16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*
26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org**********************************************************************
36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Copyright (c) 2003-2011, International Business Machines
46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Corporation and others.  All Rights Reserved.
56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org**********************************************************************
66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Author: Alan Liu
76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Created: September 24 2003
86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Since: ICU 2.8
96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org**********************************************************************
106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef _RULEITER_H_
126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define _RULEITER_H_
136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/uobject.h"
156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_BEGIN
176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass UnicodeString;
196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass ParsePosition;
206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass SymbolTable;
216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * An iterator that returns 32-bit code points.  This class is deliberately
246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <em>not</em> related to any of the ICU character iterator classes
256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in order to minimize complexity.
266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @author Alan Liu
276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @since ICU 2.8
286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass RuleCharacterIterator : public UMemory {
306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // TODO: Ideas for later.  (Do not implement if not needed, lest the
326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // code coverage numbers go down due to unused methods.)
336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // 1. Add a copy constructor, operator==() method.
346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // 2. Rather than return DONE, throw an exception if the end
356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // is reached -- this is an alternate usage model, probably not useful.
366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprivate:
386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Text being iterated.
406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const UnicodeString& text;
426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Position of iterator.
456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ParsePosition& pos;
476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Symbol table used to parse and dereference variables.  May be 0.
506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const SymbolTable* sym;
526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Current variable expansion, or 0 if none.
556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const UnicodeString* buf;
576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Position within buf.  Meaningless if buf == 0.
606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t bufPos;
626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic:
646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Value returned when there are no more characters to iterate.
666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    enum { DONE = -1 };
686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Bitmask option to enable parsing of variable names.  If (options &
716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * PARSE_VARIABLES) != 0, then an embedded variable will be expanded to
726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * its value.  Variables are parsed using the SymbolTable API.
736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    enum { PARSE_VARIABLES = 1 };
756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Bitmask option to enable parsing of escape sequences.  If (options &
786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * PARSE_ESCAPES) != 0, then an embedded escape sequence will be expanded
796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * to its value.  Escapes are parsed using Utility.unescapeAt().
806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    enum { PARSE_ESCAPES   = 2 };
826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Bitmask option to enable skipping of whitespace.  If (options &
856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * SKIP_WHITESPACE) != 0, then Pattern_White_Space characters will be silently
866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * skipped, as if they were not present in the input.
876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    enum { SKIP_WHITESPACE = 4 };
896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Constructs an iterator over the given text, starting at the given
926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * position.
936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param text the text to be iterated
946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param sym the symbol table, or null if there is none.  If sym is null,
956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * then variables will not be deferenced, even if the PARSE_VARIABLES
966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * option is set.
976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param pos upon input, the index of the next character to return.  If a
986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * variable has been dereferenced, then pos will <em>not</em> increment as
996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * characters of the variable value are iterated.
1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    RuleCharacterIterator(const UnicodeString& text, const SymbolTable* sym,
1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                          ParsePosition& pos);
1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Returns true if this iterator has no more characters to return.
1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UBool atEnd() const;
1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Returns the next character using the given options, or DONE if there
1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * are no more characters, and advance the position to the next
1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * character.
1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param options one or more of the following options, bitwise-OR-ed
1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * together: PARSE_VARIABLES, PARSE_ESCAPES, SKIP_WHITESPACE.
1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param isEscaped output parameter set to TRUE if the character
1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * was escaped
1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param ec input-output error code.  An error will only be set by
1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * this routing if options includes PARSE_VARIABLES and an unknown
1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * variable name is seen, or if options includes PARSE_ESCAPES and
1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * an invalid escape sequence is seen.
1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return the current 32-bit code point, or DONE
1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UChar32 next(int32_t options, UBool& isEscaped, UErrorCode& ec);
1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Returns true if this iterator is currently within a variable expansion.
1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    inline UBool inVariable() const;
1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * An opaque object representing the position of a RuleCharacterIterator.
1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    struct Pos : public UMemory {
1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    private:
1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        const UnicodeString* buf;
1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t pos;
1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t bufPos;
1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        friend class RuleCharacterIterator;
1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    };
1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Sets an object which, when later passed to setPos(), will
1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * restore this iterator's position.  Usage idiom:
1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * RuleCharacterIterator iterator = ...;
1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * RuleCharacterIterator::Pos pos;
1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * iterator.getPos(pos);
1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * for (;;) {
1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *   iterator.getPos(pos);
1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *   int c = iterator.next(...);
1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *   ...
1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * }
1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * iterator.setPos(pos);
1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param p a position object to be set to this iterator's
1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * current position.
1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void getPos(Pos& p) const;
1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Restores this iterator to the position it had when getPos()
1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * set the given object.
1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param p a position object previously set by getPos()
1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void setPos(const Pos& p);
1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Skips ahead past any ignored characters, as indicated by the given
1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * options.  This is useful in conjunction with the lookahead() method.
1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Currently, this only has an effect for SKIP_WHITESPACE.
1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param options one or more of the following options, bitwise-OR-ed
1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * together: PARSE_VARIABLES, PARSE_ESCAPES, SKIP_WHITESPACE.
1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void skipIgnored(int32_t options);
1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Returns a string containing the remainder of the characters to be
1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * returned by this iterator, without any option processing.  If the
1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * iterator is currently within a variable expansion, this will only
1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * extend to the end of the variable expansion.  This method is provided
1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * so that iterators may interoperate with string-based APIs.  The typical
1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * sequence of calls is to call skipIgnored(), then call lookahead(), then
1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * parse the string returned by lookahead(), then call jumpahead() to
1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * resynchronize the iterator.
1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param result a string to receive the characters to be returned
1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * by future calls to next()
1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param maxLookAhead The maximum to copy into the result.
1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return a reference to result
1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString& lookahead(UnicodeString& result, int32_t maxLookAhead = -1) const;
1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Advances the position by the given number of 16-bit code units.
1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * This is useful in conjunction with the lookahead() method.
1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param count the number of 16-bit code units to jump over
1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void jumpahead(int32_t count);
1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Returns a string representation of this object, consisting of the
2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * characters being iterated, with a '|' marking the current position.
2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Position within an expanded variable is <em>not</em> indicated.
2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param result output parameter to receive a string
2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * representation of this object
2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//    UnicodeString& toString(UnicodeString& result) const;
2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprivate:
2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Returns the current 32-bit code point without parsing escapes, parsing
2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * variables, or skipping whitespace.
2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @return the current 32-bit code point
2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UChar32 _current() const;
2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Advances the position by the given amount.
2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @param count the number of 16-bit code units to advance past
2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void _advance(int32_t count);
2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org};
2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UBool RuleCharacterIterator::inVariable() const {
2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return buf != 0;
2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_END
2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif // _RULEITER_H_
2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//eof
232