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;
00355 RuleBasedTransliterator(const UnicodeString& id,
00356 const TransliterationRuleData* theData,
00357 UnicodeFilter* adoptedFilter = 0);
00358
00359
00360 friend class Transliterator;
00361
00365 RuleBasedTransliterator(const UnicodeString& id,
00366 TransliterationRuleData* data,
00367 UBool isDataAdopted);
00368
00369 public:
00370
00375 RuleBasedTransliterator(const RuleBasedTransliterator&);
00376
00377 virtual ~RuleBasedTransliterator();
00378
00383 Transliterator* clone(void) const;
00384
00389 virtual void handleTransliterate(Replaceable& text, UTransPosition& offsets,
00390 UBool isIncremental) const;
00391
00404 virtual UnicodeString& toRules(UnicodeString& result,
00405 UBool escapeUnprintable) const;
00406
00418 static UClassID getStaticClassID(void) { return (UClassID)&fgClassID; }
00419
00442 virtual UClassID getDynamicClassID(void) const { return getStaticClassID(); };
00443
00444 private:
00445
00449 static const char fgClassID;
00450
00451 void _construct(const UnicodeString& rules,
00452 UTransDirection direction,
00453 UParseError& parseError,
00454 UErrorCode& status);
00455 };
00456
00464 inline RuleBasedTransliterator::RuleBasedTransliterator(
00465 const UnicodeString& id,
00466 const UnicodeString& rules,
00467 UTransDirection direction,
00468 UnicodeFilter* adoptedFilter,
00469 UParseError& parseError,
00470 UErrorCode& status) :
00471 Transliterator(id, adoptedFilter) {
00472 _construct(rules, direction,parseError,status);
00473 }
00474
00482 inline RuleBasedTransliterator::RuleBasedTransliterator(
00483 const UnicodeString& id,
00484 const UnicodeString& rules,
00485 UTransDirection direction,
00486 UnicodeFilter* adoptedFilter,
00487 UErrorCode& status) :
00488 Transliterator(id, adoptedFilter) {
00489 UParseError parseError;
00490 _construct(rules, direction,parseError, status);
00491 }
00492
00496 inline RuleBasedTransliterator::RuleBasedTransliterator(
00497 const UnicodeString& id,
00498 const UnicodeString& rules,
00499 UTransDirection direction,
00500 UErrorCode& status) :
00501 Transliterator(id, 0) {
00502 UParseError parseError;
00503 _construct(rules, direction,parseError, status);
00504 }
00505
00509 inline RuleBasedTransliterator::RuleBasedTransliterator(
00510 const UnicodeString& id,
00511 const UnicodeString& rules,
00512 UErrorCode& status) :
00513 Transliterator(id, 0) {
00514 UParseError parseError;
00515 _construct(rules, UTRANS_FORWARD, parseError, status);
00516 }
00517
00521 inline RuleBasedTransliterator::RuleBasedTransliterator(
00522 const UnicodeString& id,
00523 const UnicodeString& rules,
00524 UnicodeFilter* adoptedFilter,
00525 UErrorCode& status) :
00526 Transliterator(id, adoptedFilter) {
00527 UParseError parseError;
00528 _construct(rules, UTRANS_FORWARD,parseError, status);
00529 }
00530
00531 U_NAMESPACE_END
00532
00533 #endif