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