1*0e209d39SAndroid Build Coastguard Worker // © 2016 and later: Unicode, Inc. and others. 2*0e209d39SAndroid Build Coastguard Worker // License & terms of use: http://www.unicode.org/copyright.html 3*0e209d39SAndroid Build Coastguard Worker /******************************************************************** 4*0e209d39SAndroid Build Coastguard Worker * COPYRIGHT: 5*0e209d39SAndroid Build Coastguard Worker * Copyright (c) 2008-2011, International Business Machines Corporation and 6*0e209d39SAndroid Build Coastguard Worker * others. All Rights Reserved. 7*0e209d39SAndroid Build Coastguard Worker ********************************************************************/ 8*0e209d39SAndroid Build Coastguard Worker // 9*0e209d39SAndroid Build Coastguard Worker // file: regextxt.cpp 10*0e209d39SAndroid Build Coastguard Worker // 11*0e209d39SAndroid Build Coastguard Worker // This file contains utility code for supporting UText in the regular expression engine. 12*0e209d39SAndroid Build Coastguard Worker // 13*0e209d39SAndroid Build Coastguard Worker 14*0e209d39SAndroid Build Coastguard Worker #include "unicode/utf.h" 15*0e209d39SAndroid Build Coastguard Worker #include "regextxt.h" 16*0e209d39SAndroid Build Coastguard Worker 17*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_BEGIN 18*0e209d39SAndroid Build Coastguard Worker 19*0e209d39SAndroid Build Coastguard Worker U_CFUNC char16_t U_CALLCONV uregex_utext_unescape_charAt(int32_t offset,void * ct)20*0e209d39SAndroid Build Coastguard Workeruregex_utext_unescape_charAt(int32_t offset, void *ct) { 21*0e209d39SAndroid Build Coastguard Worker struct URegexUTextUnescapeCharContext *context = (struct URegexUTextUnescapeCharContext *)ct; 22*0e209d39SAndroid Build Coastguard Worker UChar32 c; 23*0e209d39SAndroid Build Coastguard Worker if (offset == context->lastOffset + 1) { 24*0e209d39SAndroid Build Coastguard Worker c = UTEXT_NEXT32(context->text); 25*0e209d39SAndroid Build Coastguard Worker context->lastOffset++; 26*0e209d39SAndroid Build Coastguard Worker } else if (offset == context->lastOffset) { 27*0e209d39SAndroid Build Coastguard Worker c = UTEXT_PREVIOUS32(context->text); 28*0e209d39SAndroid Build Coastguard Worker UTEXT_NEXT32(context->text); 29*0e209d39SAndroid Build Coastguard Worker } else { 30*0e209d39SAndroid Build Coastguard Worker utext_moveIndex32(context->text, offset - context->lastOffset - 1); 31*0e209d39SAndroid Build Coastguard Worker c = UTEXT_NEXT32(context->text); 32*0e209d39SAndroid Build Coastguard Worker context->lastOffset = offset; 33*0e209d39SAndroid Build Coastguard Worker } 34*0e209d39SAndroid Build Coastguard Worker 35*0e209d39SAndroid Build Coastguard Worker // !!!: Doesn't handle characters outside BMP 36*0e209d39SAndroid Build Coastguard Worker if (U_IS_BMP(c)) { 37*0e209d39SAndroid Build Coastguard Worker return (char16_t)c; 38*0e209d39SAndroid Build Coastguard Worker } else { 39*0e209d39SAndroid Build Coastguard Worker return 0; 40*0e209d39SAndroid Build Coastguard Worker } 41*0e209d39SAndroid Build Coastguard Worker } 42*0e209d39SAndroid Build Coastguard Worker 43*0e209d39SAndroid Build Coastguard Worker U_CFUNC char16_t U_CALLCONV uregex_ucstr_unescape_charAt(int32_t offset,void * context)44*0e209d39SAndroid Build Coastguard Workeruregex_ucstr_unescape_charAt(int32_t offset, void *context) { 45*0e209d39SAndroid Build Coastguard Worker return ((char16_t *)context)[offset]; 46*0e209d39SAndroid Build Coastguard Worker } 47*0e209d39SAndroid Build Coastguard Worker 48*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_END 49