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