00001 /* 00002 ********************************************************************** 00003 * Copyright (C) 1999, International Business Machines 00004 * Corporation and others. All Rights Reserved. 00005 ********************************************************************** 00006 * Date Name Description 00007 * 11/17/99 aliu Creation. 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 00254 class U_I18N_API RuleBasedTransliterator : public Transliterator { 00255 00260 TransliterationRuleData* data; 00261 00265 UBool isDataOwned; 00266 00267 public: 00268 00277 RuleBasedTransliterator(const UnicodeString& ID, 00278 const UnicodeString& rules, 00279 UTransDirection direction, 00280 UnicodeFilter* adoptedFilter, 00281 UParseError& parseError, 00282 UErrorCode& status); 00283 00291 RuleBasedTransliterator(const UnicodeString& ID, 00292 const UnicodeString& rules, 00293 UTransDirection direction, 00294 UnicodeFilter* adoptedFilter, 00295 UErrorCode& status); 00296 00301 RuleBasedTransliterator(const UnicodeString& ID, 00302 const UnicodeString& rules, 00303 UTransDirection direction, 00304 UErrorCode& status); 00305 00310 RuleBasedTransliterator(const UnicodeString& ID, 00311 const UnicodeString& rules, 00312 UErrorCode& status); 00313 00318 RuleBasedTransliterator(const UnicodeString& ID, 00319 const UnicodeString& rules, 00320 UnicodeFilter* adoptedFilter, 00321 UErrorCode& status); 00322 00327 RuleBasedTransliterator(const UnicodeString& ID, 00328 const TransliterationRuleData* theData, 00329 UnicodeFilter* adoptedFilter = 0); 00330 00335 RuleBasedTransliterator(const RuleBasedTransliterator&); 00336 00337 virtual ~RuleBasedTransliterator(); 00338 00343 Transliterator* clone(void) const; 00344 00349 virtual void handleTransliterate(Replaceable& text, UTransPosition& offsets, 00350 UBool isIncremental) const; 00351 00356 enum { 00357 PARSE_ERROR_BASE = 0x10000, 00358 BAD_VARIABLE_DEFINITION, 00359 MALFORMED_RULE, 00360 MALFORMED_SET, 00361 MALFORMED_SYMBOL_REFERENCE, 00362 MALFORMED_UNICODE_ESCAPE, 00363 MALFORMED_VARIABLE_DEFINITION, 00364 MALFORMED_VARIABLE_REFERENCE, 00365 MISMATCHED_SEGMENT_DELIMITERS, 00366 MISPLACED_CURSOR_OFFSET, 00367 MISSING_OPERATOR, 00368 MISSING_SEGMENT_CLOSE, 00369 MULTIPLE_ANTE_CONTEXTS, 00370 MULTIPLE_CURSORS, 00371 MULTIPLE_POST_CONTEXTS, 00372 TRAILING_BACKSLASH, 00373 UNDEFINED_SEGMENT_REFERENCE, 00374 UNDEFINED_VARIABLE, 00375 UNQUOTED_SPECIAL, 00376 UNTERMINATED_QUOTE 00377 }; 00378 00379 private: 00380 00381 void _construct(const UnicodeString& rules, 00382 UTransDirection direction, 00383 UErrorCode& status, 00384 UParseError* parseError = 0); 00385 }; 00386 00394 inline RuleBasedTransliterator::RuleBasedTransliterator( 00395 const UnicodeString& ID, 00396 const UnicodeString& rules, 00397 UTransDirection direction, 00398 UnicodeFilter* adoptedFilter, 00399 UParseError& parseError, 00400 UErrorCode& status) : 00401 Transliterator(ID, adoptedFilter) { 00402 _construct(rules, direction, status, &parseError); 00403 } 00404 00412 inline RuleBasedTransliterator::RuleBasedTransliterator( 00413 const UnicodeString& ID, 00414 const UnicodeString& rules, 00415 UTransDirection direction, 00416 UnicodeFilter* adoptedFilter, 00417 UErrorCode& status) : 00418 Transliterator(ID, adoptedFilter) { 00419 _construct(rules, direction, status); 00420 } 00421 00425 inline RuleBasedTransliterator::RuleBasedTransliterator( 00426 const UnicodeString& ID, 00427 const UnicodeString& rules, 00428 UTransDirection direction, 00429 UErrorCode& status) : 00430 Transliterator(ID, 0) { 00431 _construct(rules, direction, status); 00432 } 00433 00437 inline RuleBasedTransliterator::RuleBasedTransliterator( 00438 const UnicodeString& ID, 00439 const UnicodeString& rules, 00440 UErrorCode& status) : 00441 Transliterator(ID, 0) { 00442 _construct(rules, UTRANS_FORWARD, status); 00443 } 00444 00448 inline RuleBasedTransliterator::RuleBasedTransliterator( 00449 const UnicodeString& ID, 00450 const UnicodeString& rules, 00451 UnicodeFilter* adoptedFilter, 00452 UErrorCode& status) : 00453 Transliterator(ID, adoptedFilter) { 00454 _construct(rules, UTRANS_FORWARD, status); 00455 } 00456 00457 #endif