00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef RBT_H
00011 #define RBT_H
00012
00013 #include "unicode/translit.h"
00014 #include "unicode/utypes.h"
00015 #include "unicode/parseerr.h"
00016
00017 class TransliterationRuleData;
00018
00280 class U_I18N_API RuleBasedTransliterator : public Transliterator {
00281
00286 TransliterationRuleData* data;
00287
00291 UBool isDataOwned;
00292
00293 public:
00294
00303 RuleBasedTransliterator(const UnicodeString& id,
00304 const UnicodeString& rules,
00305 UTransDirection direction,
00306 UnicodeFilter* adoptedFilter,
00307 UParseError& parseError,
00308 UErrorCode& status);
00309
00317 RuleBasedTransliterator(const UnicodeString& id,
00318 const UnicodeString& rules,
00319 UTransDirection direction,
00320 UnicodeFilter* adoptedFilter,
00321 UErrorCode& status);
00322
00327 RuleBasedTransliterator(const UnicodeString& id,
00328 const UnicodeString& rules,
00329 UTransDirection direction,
00330 UErrorCode& status);
00331
00336 RuleBasedTransliterator(const UnicodeString& id,
00337 const UnicodeString& rules,
00338 UErrorCode& status);
00339
00344 RuleBasedTransliterator(const UnicodeString& id,
00345 const UnicodeString& rules,
00346 UnicodeFilter* adoptedFilter,
00347 UErrorCode& status);
00348
00353 RuleBasedTransliterator(const UnicodeString& id,
00354 const TransliterationRuleData* theData,
00355 UnicodeFilter* adoptedFilter = 0);
00356
00361 RuleBasedTransliterator(const RuleBasedTransliterator&);
00362
00363 virtual ~RuleBasedTransliterator();
00364
00369 Transliterator* clone(void) const;
00370
00375 virtual void handleTransliterate(Replaceable& text, UTransPosition& offsets,
00376 UBool isIncremental) const;
00377
00382 enum {
00383 PARSE_ERROR_BASE = 0x10000,
00384 BAD_VARIABLE_DEFINITION,
00385 MALFORMED_RULE,
00386 MALFORMED_SET,
00387 MALFORMED_SYMBOL_REFERENCE,
00388 MALFORMED_UNICODE_ESCAPE,
00389 MALFORMED_VARIABLE_DEFINITION,
00390 MALFORMED_VARIABLE_REFERENCE,
00391 MISMATCHED_SEGMENT_DELIMITERS,
00392 MISPLACED_ANCHOR_START,
00393 MISPLACED_CURSOR_OFFSET,
00394 MISSING_OPERATOR,
00395 MISSING_SEGMENT_CLOSE,
00396 MULTIPLE_ANTE_CONTEXTS,
00397 MULTIPLE_CURSORS,
00398 MULTIPLE_POST_CONTEXTS,
00399 TRAILING_BACKSLASH,
00400 UNDEFINED_SEGMENT_REFERENCE,
00401 UNDEFINED_VARIABLE,
00402 UNQUOTED_SPECIAL,
00403 UNTERMINATED_QUOTE
00404 };
00405
00406 private:
00407
00408 void _construct(const UnicodeString& rules,
00409 UTransDirection direction,
00410 UErrorCode& status,
00411 UParseError* parseError = 0);
00412 };
00413
00421 inline RuleBasedTransliterator::RuleBasedTransliterator(
00422 const UnicodeString& id,
00423 const UnicodeString& rules,
00424 UTransDirection direction,
00425 UnicodeFilter* adoptedFilter,
00426 UParseError& parseError,
00427 UErrorCode& status) :
00428 Transliterator(id, adoptedFilter) {
00429 _construct(rules, direction, status, &parseError);
00430 }
00431
00439 inline RuleBasedTransliterator::RuleBasedTransliterator(
00440 const UnicodeString& id,
00441 const UnicodeString& rules,
00442 UTransDirection direction,
00443 UnicodeFilter* adoptedFilter,
00444 UErrorCode& status) :
00445 Transliterator(id, adoptedFilter) {
00446 _construct(rules, direction, status);
00447 }
00448
00452 inline RuleBasedTransliterator::RuleBasedTransliterator(
00453 const UnicodeString& id,
00454 const UnicodeString& rules,
00455 UTransDirection direction,
00456 UErrorCode& status) :
00457 Transliterator(id, 0) {
00458 _construct(rules, direction, status);
00459 }
00460
00464 inline RuleBasedTransliterator::RuleBasedTransliterator(
00465 const UnicodeString& id,
00466 const UnicodeString& rules,
00467 UErrorCode& status) :
00468 Transliterator(id, 0) {
00469 _construct(rules, UTRANS_FORWARD, status);
00470 }
00471
00475 inline RuleBasedTransliterator::RuleBasedTransliterator(
00476 const UnicodeString& id,
00477 const UnicodeString& rules,
00478 UnicodeFilter* adoptedFilter,
00479 UErrorCode& status) :
00480 Transliterator(id, adoptedFilter) {
00481 _construct(rules, UTRANS_FORWARD, status);
00482 }
00483
00484 #endif