00001
00002
00003
00004
00005
00006
00007
00008 #ifndef RBT_PARS_H
00009 #define RBT_PARS_H
00010
00011 #include "unicode/rbt.h"
00012 #include "uvector.h"
00013 #include "unicode/parseerr.h"
00014
00015 class TransliterationRuleData;
00016 class UnicodeSet;
00017 class ParseData;
00018 class RuleHalf;
00019 class ParsePosition;
00020
00021 class TransliterationRuleParser {
00022
00027 const UnicodeString& rules;
00028
00029 UTransDirection direction;
00030
00031 TransliterationRuleData* data;
00032
00037 UErrorCode status;
00038
00043 UParseError* parseError;
00044
00048 ParseData* parseData;
00049
00055 UVector setVariablesVector;
00056
00063 UChar variableNext;
00064
00070 UChar variableLimit;
00071
00079 UnicodeString undefinedVariableName;
00080
00081 static const UnicodeString gOPERATORS;
00082
00083 public:
00084
00085 static TransliterationRuleData*
00086 parse(const UnicodeString& rules,
00087 UTransDirection direction,
00088 UParseError* parseError = 0);
00089
00090 private:
00091
00097 TransliterationRuleParser(const UnicodeString& rules,
00098 UTransDirection direction,
00099 UParseError* parseError = 0);
00100
00104 ~TransliterationRuleParser();
00105
00114 void parseRules(void);
00115
00129 int32_t parseRule(int32_t pos, int32_t limit);
00130
00140 int32_t syntaxError(int32_t parseErrorCode, const UnicodeString&, int32_t start);
00141
00147
00148
00153 UChar parseSet(const UnicodeString& rule,
00154 ParsePosition& pos);
00155
00160 void appendVariableDef(const UnicodeString& name,
00161 UnicodeString& buf);
00162
00171 void determineVariableRange(void);
00172
00185 static int32_t quotedIndexOf(const UnicodeString& text,
00186 int32_t start, int32_t limit,
00187 UChar c);
00188
00189 friend class RuleHalf;
00190
00191
00192 TransliterationRuleParser(const TransliterationRuleParser&);
00193 TransliterationRuleParser& operator=(const TransliterationRuleParser&);
00194 };
00195
00196 #endif