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 U_NAMESPACE_BEGIN
00018
00019 class TransliterationRuleData;
00020
00282 class U_I18N_API RuleBasedTransliterator : public Transliterator {
00283
00288 TransliterationRuleData* data;
00289
00293 UBool isDataOwned;
00294
00295 public:
00296
00304 RuleBasedTransliterator(const UnicodeString& id,
00305 const UnicodeString& rules,
00306 UTransDirection direction,
00307 UnicodeFilter* adoptedFilter,
00308 UParseError& parseError,
00309 UErrorCode& status);
00310
00318 RuleBasedTransliterator(const UnicodeString& id,
00319 const UnicodeString& rules,
00320 UTransDirection direction,
00321 UnicodeFilter* adoptedFilter,
00322 UErrorCode& status);
00323
00328 RuleBasedTransliterator(const UnicodeString& id,
00329 const UnicodeString& rules,
00330 UTransDirection direction,
00331 UErrorCode& status);
00332
00337 RuleBasedTransliterator(const UnicodeString& id,
00338 const UnicodeString& rules,
00339 UErrorCode& status);
00340
00345 RuleBasedTransliterator(const UnicodeString& id,
00346 const UnicodeString& rules,
00347 UnicodeFilter* adoptedFilter,
00348 UErrorCode& status);
00349 private:
00350
00351 friend class TransliteratorRegistry;
00358 RuleBasedTransliterator(const UnicodeString& id,
00359 const TransliterationRuleData* theData,
00360 UnicodeFilter* adoptedFilter = 0);
00361
00362
00363 friend class Transliterator;
00364
00371 RuleBasedTransliterator(const UnicodeString& id,
00372 TransliterationRuleData* data,
00373 UBool isDataAdopted);
00374
00375 public:
00376
00381 RuleBasedTransliterator(const RuleBasedTransliterator&);
00382
00383 virtual ~RuleBasedTransliterator();
00384
00389 Transliterator* clone(void) const;
00390
00391 protected:
00396 virtual void handleTransliterate(Replaceable& text, UTransPosition& offsets,
00397 UBool isIncremental) const;
00398
00399 public:
00412 virtual UnicodeString& toRules(UnicodeString& result,
00413 UBool escapeUnprintable) const;
00414
00415 protected:
00419 virtual void handleGetSourceSet(UnicodeSet& result) const;
00420
00421 public:
00425 virtual UnicodeSet& getTargetSet(UnicodeSet& result) const;
00426
00438 static UClassID getStaticClassID(void) { return (UClassID)&fgClassID; }
00439
00462 virtual UClassID getDynamicClassID(void) const { return getStaticClassID(); };
00463
00464 private:
00465
00469 static const char fgClassID;
00470
00471 void _construct(const UnicodeString& rules,
00472 UTransDirection direction,
00473 UParseError& parseError,
00474 UErrorCode& status);
00475 };
00476
00489 inline RuleBasedTransliterator::RuleBasedTransliterator(
00490 const UnicodeString& id,
00491 const UnicodeString& rules,
00492 UTransDirection direction,
00493 UnicodeFilter* adoptedFilter,
00494 UParseError& parseError,
00495 UErrorCode& status) :
00496 Transliterator(id, adoptedFilter) {
00497 _construct(rules, direction,parseError,status);
00498 }
00499
00510 inline RuleBasedTransliterator::RuleBasedTransliterator(
00511 const UnicodeString& id,
00512 const UnicodeString& rules,
00513 UTransDirection direction,
00514 UnicodeFilter* adoptedFilter,
00515 UErrorCode& status) :
00516 Transliterator(id, adoptedFilter) {
00517 UParseError parseError;
00518 _construct(rules, direction,parseError, status);
00519 }
00520
00524 inline RuleBasedTransliterator::RuleBasedTransliterator(
00525 const UnicodeString& id,
00526 const UnicodeString& rules,
00527 UTransDirection direction,
00528 UErrorCode& status) :
00529 Transliterator(id, 0) {
00530 UParseError parseError;
00531 _construct(rules, direction,parseError, status);
00532 }
00533
00537 inline RuleBasedTransliterator::RuleBasedTransliterator(
00538 const UnicodeString& id,
00539 const UnicodeString& rules,
00540 UErrorCode& status) :
00541 Transliterator(id, 0) {
00542 UParseError parseError;
00543 _construct(rules, UTRANS_FORWARD, parseError, status);
00544 }
00545
00549 inline RuleBasedTransliterator::RuleBasedTransliterator(
00550 const UnicodeString& id,
00551 const UnicodeString& rules,
00552 UnicodeFilter* adoptedFilter,
00553 UErrorCode& status) :
00554 Transliterator(id, adoptedFilter) {
00555 UParseError parseError;
00556 _construct(rules, UTRANS_FORWARD,parseError, status);
00557 }
00558
00559 U_NAMESPACE_END
00560
00561 #endif