150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/******************************************************************** 250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * COPYRIGHT: 383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius * Copyright (c) 2008-2011, International Business Machines Corporation and 450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * others. All Rights Reserved. 550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ********************************************************************/ 650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// 750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// file: regextxt.cpp 850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// 950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// This file contains utility code for supporting UText in the regular expression engine. 1050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// 1150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1283a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#include "unicode/utf.h" 1350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "regextxt.h" 1450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_NAMESPACE_BEGIN 1650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CFUNC UChar U_CALLCONV 1850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehouregex_utext_unescape_charAt(int32_t offset, void *ct) { 1950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho struct URegexUTextUnescapeCharContext *context = (struct URegexUTextUnescapeCharContext *)ct; 2050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UChar32 c; 2150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (offset == context->lastOffset + 1) { 2250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho c = UTEXT_NEXT32(context->text); 2350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->lastOffset++; 2450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } else if (offset == context->lastOffset) { 2550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho c = UTEXT_PREVIOUS32(context->text); 2650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UTEXT_NEXT32(context->text); 2750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } else { 2850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho utext_moveIndex32(context->text, offset - context->lastOffset - 1); 2950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho c = UTEXT_NEXT32(context->text); 3050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho context->lastOffset = offset; 3150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 3283a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius 3350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // !!!: Doesn't handle characters outside BMP 3450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (U_IS_BMP(c)) { 3550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return (UChar)c; 3650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } else { 3750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return 0; 3850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 3950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 4050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 4150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_CFUNC UChar U_CALLCONV 4250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehouregex_ucstr_unescape_charAt(int32_t offset, void *context) { 4350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return ((UChar *)context)[offset]; 4450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 4550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 4650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_NAMESPACE_END 47