1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*
2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru**********************************************************************
3b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho* Copyright (c) 2003-2011, International Business Machines
4ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Corporation and others.  All Rights Reserved.
5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru**********************************************************************
6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Author: Alan Liu
7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Created: September 24 2003
8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Since: ICU 2.8
9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru**********************************************************************
10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/
11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef _RULEITER_H_
12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define _RULEITER_H_
13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/uobject.h"
15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_NAMESPACE_BEGIN
17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass UnicodeString;
19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass ParsePosition;
20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass SymbolTable;
21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/**
23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * An iterator that returns 32-bit code points.  This class is deliberately
24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * <em>not</em> related to any of the ICU character iterator classes
25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * in order to minimize complexity.
26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @author Alan Liu
27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @since ICU 2.8
28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */
29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass RuleCharacterIterator : public UMemory {
30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // TODO: Ideas for later.  (Do not implement if not needed, lest the
32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // code coverage numbers go down due to unused methods.)
33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // 1. Add a copy constructor, operator==() method.
34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // 2. Rather than return DONE, throw an exception if the end
35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // is reached -- this is an alternate usage model, probably not useful.
36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruprivate:
38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Text being iterated.
40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const UnicodeString& text;
42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Position of iterator.
45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ParsePosition& pos;
47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Symbol table used to parse and dereference variables.  May be 0.
50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const SymbolTable* sym;
52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Current variable expansion, or 0 if none.
55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const UnicodeString* buf;
57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Position within buf.  Meaningless if buf == 0.
60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t bufPos;
62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupublic:
64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Value returned when there are no more characters to iterate.
66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    enum { DONE = -1 };
68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Bitmask option to enable parsing of variable names.  If (options &
71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * PARSE_VARIABLES) != 0, then an embedded variable will be expanded to
72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * its value.  Variables are parsed using the SymbolTable API.
73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    enum { PARSE_VARIABLES = 1 };
75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Bitmask option to enable parsing of escape sequences.  If (options &
78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * PARSE_ESCAPES) != 0, then an embedded escape sequence will be expanded
79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * to its value.  Escapes are parsed using Utility.unescapeAt().
80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    enum { PARSE_ESCAPES   = 2 };
82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Bitmask option to enable skipping of whitespace.  If (options &
85b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     * SKIP_WHITESPACE) != 0, then Pattern_White_Space characters will be silently
86b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     * skipped, as if they were not present in the input.
87ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
88ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    enum { SKIP_WHITESPACE = 4 };
89ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
90ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
91ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Constructs an iterator over the given text, starting at the given
92ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * position.
93ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @param text the text to be iterated
94ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @param sym the symbol table, or null if there is none.  If sym is null,
95ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * then variables will not be deferenced, even if the PARSE_VARIABLES
96ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * option is set.
97ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @param pos upon input, the index of the next character to return.  If a
98ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * variable has been dereferenced, then pos will <em>not</em> increment as
99ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * characters of the variable value are iterated.
100ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
101ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    RuleCharacterIterator(const UnicodeString& text, const SymbolTable* sym,
102ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                          ParsePosition& pos);
103ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
104ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
105ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Returns true if this iterator has no more characters to return.
106ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
107ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UBool atEnd() const;
108ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
109ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
110ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Returns the next character using the given options, or DONE if there
111ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * are no more characters, and advance the position to the next
112ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * character.
113ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @param options one or more of the following options, bitwise-OR-ed
114ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * together: PARSE_VARIABLES, PARSE_ESCAPES, SKIP_WHITESPACE.
115ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @param isEscaped output parameter set to TRUE if the character
116ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * was escaped
117ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @param ec input-output error code.  An error will only be set by
118ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * this routing if options includes PARSE_VARIABLES and an unknown
119ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * variable name is seen, or if options includes PARSE_ESCAPES and
120ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * an invalid escape sequence is seen.
121ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @return the current 32-bit code point, or DONE
122ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
123ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UChar32 next(int32_t options, UBool& isEscaped, UErrorCode& ec);
124ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
125ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
126ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Returns true if this iterator is currently within a variable expansion.
127ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
128ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    inline UBool inVariable() const;
129ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
130ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
131ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * An opaque object representing the position of a RuleCharacterIterator.
132ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
133ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    struct Pos : public UMemory {
134ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    private:
135ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        const UnicodeString* buf;
136ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        int32_t pos;
137ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        int32_t bufPos;
138ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        friend class RuleCharacterIterator;
139ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    };
140ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
141ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
142ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Sets an object which, when later passed to setPos(), will
143ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * restore this iterator's position.  Usage idiom:
144ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     *
145ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * RuleCharacterIterator iterator = ...;
146ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * RuleCharacterIterator::Pos pos;
147ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * iterator.getPos(pos);
148ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * for (;;) {
149ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     *   iterator.getPos(pos);
150ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     *   int c = iterator.next(...);
151ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     *   ...
152ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * }
153ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * iterator.setPos(pos);
154ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     *
155ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @param p a position object to be set to this iterator's
156ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * current position.
157ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
158ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    void getPos(Pos& p) const;
159ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
160ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
161ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Restores this iterator to the position it had when getPos()
162ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * set the given object.
163ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @param p a position object previously set by getPos()
164ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
165ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    void setPos(const Pos& p);
166ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
167ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
168ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Skips ahead past any ignored characters, as indicated by the given
169ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * options.  This is useful in conjunction with the lookahead() method.
170ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     *
171ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Currently, this only has an effect for SKIP_WHITESPACE.
172ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @param options one or more of the following options, bitwise-OR-ed
173ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * together: PARSE_VARIABLES, PARSE_ESCAPES, SKIP_WHITESPACE.
174ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
175ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    void skipIgnored(int32_t options);
176ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
177ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
178ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Returns a string containing the remainder of the characters to be
179ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * returned by this iterator, without any option processing.  If the
180ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * iterator is currently within a variable expansion, this will only
181ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * extend to the end of the variable expansion.  This method is provided
182ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * so that iterators may interoperate with string-based APIs.  The typical
183ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * sequence of calls is to call skipIgnored(), then call lookahead(), then
184ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * parse the string returned by lookahead(), then call jumpahead() to
185ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * resynchronize the iterator.
186ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @param result a string to receive the characters to be returned
187ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * by future calls to next()
188ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @param maxLookAhead The maximum to copy into the result.
189ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @return a reference to result
190ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
191ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UnicodeString& lookahead(UnicodeString& result, int32_t maxLookAhead = -1) const;
192ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
193ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
194ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Advances the position by the given number of 16-bit code units.
195ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * This is useful in conjunction with the lookahead() method.
196ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @param count the number of 16-bit code units to jump over
197ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
198ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    void jumpahead(int32_t count);
199ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
200ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
201ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Returns a string representation of this object, consisting of the
202ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * characters being iterated, with a '|' marking the current position.
203ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Position within an expanded variable is <em>not</em> indicated.
204ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @param result output parameter to receive a string
205ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * representation of this object
206ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
207ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru//    UnicodeString& toString(UnicodeString& result) const;
208ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
209ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruprivate:
210ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
211ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Returns the current 32-bit code point without parsing escapes, parsing
212ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * variables, or skipping whitespace.
213ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @return the current 32-bit code point
214ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
215ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UChar32 _current() const;
216ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
217ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /**
218ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Advances the position by the given amount.
219ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * @param count the number of 16-bit code units to advance past
220ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
221ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    void _advance(int32_t count);
222ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru};
223ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
224ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline UBool RuleCharacterIterator::inVariable() const {
225ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return buf != 0;
226ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
227ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
228ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_NAMESPACE_END
229ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
230ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif // _RULEITER_H_
231ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru//eof
232