16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/******************************************************************** 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * COPYRIGHT: 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copyright (c) 2008-2011, International Business Machines Corporation and 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * others. All Rights Reserved. 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ********************************************************************/ 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// file: regextxt.cpp 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// This file contains utility code for supporting UText in the regular expression engine. 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utf.h" 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "regextxt.h" 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_BEGIN 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CFUNC UChar U_CALLCONV 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orguregex_utext_unescape_charAt(int32_t offset, void *ct) { 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org struct URegexUTextUnescapeCharContext *context = (struct URegexUTextUnescapeCharContext *)ct; 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 c; 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (offset == context->lastOffset + 1) { 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c = UTEXT_NEXT32(context->text); 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org context->lastOffset++; 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if (offset == context->lastOffset) { 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c = UTEXT_PREVIOUS32(context->text); 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UTEXT_NEXT32(context->text); 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_moveIndex32(context->text, offset - context->lastOffset - 1); 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c = UTEXT_NEXT32(context->text); 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org context->lastOffset = offset; 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // !!!: Doesn't handle characters outside BMP 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_IS_BMP(c)) { 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return (UChar)c; 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return 0; 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CFUNC UChar U_CALLCONV 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orguregex_ucstr_unescape_charAt(int32_t offset, void *context) { 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return ((UChar *)context)[offset]; 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_END 47