ICU 49.1.1  49.1.1
translit.h
Go to the documentation of this file.
1 /*
2 **********************************************************************
3 * Copyright (C) 1999-2011, International Business Machines
4 * Corporation and others. All Rights Reserved.
5 **********************************************************************
6 * Date Name Description
7 * 11/17/99 aliu Creation.
8 **********************************************************************
9 */
10 #ifndef TRANSLIT_H
11 #define TRANSLIT_H
12 
13 #include "unicode/utypes.h"
14 
20 #if !UCONFIG_NO_TRANSLITERATION
21 
22 #include "unicode/uobject.h"
23 #include "unicode/unistr.h"
24 #include "unicode/parseerr.h"
25 #include "unicode/utrans.h" // UTransPosition, UTransDirection
26 #include "unicode/strenum.h"
27 
29 
30 class UnicodeFilter;
31 class UnicodeSet;
32 class CompoundTransliterator;
33 class TransliteratorParser;
34 class NormalizationTransliterator;
35 class TransliteratorIDParser;
36 
242 
243 private:
244 
248  UnicodeString ID;
249 
256  UnicodeFilter* filter;
257 
258  int32_t maximumContextLength;
259 
260  public:
261 
267  union Token {
272  int32_t integer;
277  void* pointer;
278  };
279 
280 #ifndef U_HIDE_INTERNAL_API
281 
286  inline static Token integerToken(int32_t);
287 
293  inline static Token pointerToken(void*);
294 #endif /* U_HIDE_INTERNAL_API */
295 
311  typedef Transliterator* (U_EXPORT2 *Factory)(const UnicodeString& ID, Token context);
312 
313 protected:
314 
324  Transliterator(const UnicodeString& ID, UnicodeFilter* adoptedFilter);
325 
331 
336  Transliterator& operator=(const Transliterator&);
337 
349  static Transliterator* createBasicInstance(const UnicodeString& id,
350  const UnicodeString* canon);
351 
352  friend class TransliteratorParser; // for parseID()
353  friend class TransliteratorIDParser; // for createBasicInstance()
354  friend class TransliteratorAlias; // for setID()
355 
356 public:
357 
362  virtual ~Transliterator();
363 
378  virtual Transliterator* clone() const;
379 
395  virtual int32_t transliterate(Replaceable& text,
396  int32_t start, int32_t limit) const;
397 
403  virtual void transliterate(Replaceable& text) const;
404 
469  virtual void transliterate(Replaceable& text, UTransPosition& index,
470  const UnicodeString& insertion,
471  UErrorCode& status) const;
472 
488  virtual void transliterate(Replaceable& text, UTransPosition& index,
489  UChar32 insertion,
490  UErrorCode& status) const;
491 
506  virtual void transliterate(Replaceable& text, UTransPosition& index,
507  UErrorCode& status) const;
508 
520  virtual void finishTransliteration(Replaceable& text,
521  UTransPosition& index) const;
522 
523 private:
524 
540  void _transliterate(Replaceable& text,
541  UTransPosition& index,
542  const UnicodeString* insertion,
543  UErrorCode &status) const;
544 
545 protected:
546 
626  virtual void handleTransliterate(Replaceable& text,
627  UTransPosition& pos,
628  UBool incremental) const = 0;
629 
630 public:
642  virtual void filteredTransliterate(Replaceable& text,
643  UTransPosition& index,
644  UBool incremental) const;
645 
646 private:
647 
675  virtual void filteredTransliterate(Replaceable& text,
676  UTransPosition& index,
677  UBool incremental,
678  UBool rollback) const;
679 
680 public:
681 
695  int32_t getMaximumContextLength(void) const;
696 
697 protected:
698 
705  void setMaximumContextLength(int32_t maxContextLength);
706 
707 public:
708 
719  virtual const UnicodeString& getID(void) const;
720 
730  static UnicodeString& U_EXPORT2 getDisplayName(const UnicodeString& ID,
731  UnicodeString& result);
732 
754  static UnicodeString& U_EXPORT2 getDisplayName(const UnicodeString& ID,
755  const Locale& inLocale,
756  UnicodeString& result);
757 
765  const UnicodeFilter* getFilter(void) const;
766 
776  UnicodeFilter* orphanFilter(void);
777 
788  void adoptFilter(UnicodeFilter* adoptedFilter);
789 
809  Transliterator* createInverse(UErrorCode& status) const;
810 
827  static Transliterator* U_EXPORT2 createInstance(const UnicodeString& ID,
828  UTransDirection dir,
829  UParseError& parseError,
830  UErrorCode& status);
831 
842  static Transliterator* U_EXPORT2 createInstance(const UnicodeString& ID,
843  UTransDirection dir,
844  UErrorCode& status);
845 
861  static Transliterator* U_EXPORT2 createFromRules(const UnicodeString& ID,
862  const UnicodeString& rules,
863  UTransDirection dir,
864  UParseError& parseError,
865  UErrorCode& status);
866 
878  virtual UnicodeString& toRules(UnicodeString& result,
879  UBool escapeUnprintable) const;
880 
893  int32_t countElements() const;
894 
914  const Transliterator& getElement(int32_t index, UErrorCode& ec) const;
915 
931  UnicodeSet& getSourceSet(UnicodeSet& result) const;
932 
947  virtual void handleGetSourceSet(UnicodeSet& result) const;
948 
962  virtual UnicodeSet& getTargetSet(UnicodeSet& result) const;
963 
964 public:
965 
977  static void U_EXPORT2 registerFactory(const UnicodeString& id,
978  Factory factory,
979  Token context);
980 
998  static void U_EXPORT2 registerInstance(Transliterator* adoptedObj);
999 
1014  static void U_EXPORT2 registerAlias(const UnicodeString& aliasID,
1015  const UnicodeString& realID);
1016 
1017 protected:
1018 
1019 #ifndef U_HIDE_INTERNAL_API
1020 
1029  static void _registerFactory(const UnicodeString& id,
1030  Factory factory,
1031  Token context);
1032 
1036  static void _registerInstance(Transliterator* adoptedObj);
1037 
1041  static void _registerAlias(const UnicodeString& aliasID, const UnicodeString& realID);
1042 
1076  static void _registerSpecialInverse(const UnicodeString& target,
1077  const UnicodeString& inverseTarget,
1078  UBool bidirectional);
1079 #endif /* U_HIDE_INTERNAL_API */
1080 
1081 public:
1082 
1096  static void U_EXPORT2 unregister(const UnicodeString& ID);
1097 
1098 public:
1099 
1109  static StringEnumeration* U_EXPORT2 getAvailableIDs(UErrorCode& ec);
1110 
1116  static int32_t U_EXPORT2 countAvailableSources(void);
1117 
1127  static UnicodeString& U_EXPORT2 getAvailableSource(int32_t index,
1128  UnicodeString& result);
1129 
1138  static int32_t U_EXPORT2 countAvailableTargets(const UnicodeString& source);
1139 
1151  static UnicodeString& U_EXPORT2 getAvailableTarget(int32_t index,
1152  const UnicodeString& source,
1153  UnicodeString& result);
1154 
1162  static int32_t U_EXPORT2 countAvailableVariants(const UnicodeString& source,
1163  const UnicodeString& target);
1164 
1178  static UnicodeString& U_EXPORT2 getAvailableVariant(int32_t index,
1179  const UnicodeString& source,
1180  const UnicodeString& target,
1181  UnicodeString& result);
1182 
1183 protected:
1184 
1185 #ifndef U_HIDE_INTERNAL_API
1186 
1190  static int32_t _countAvailableSources(void);
1191 
1196  static UnicodeString& _getAvailableSource(int32_t index,
1197  UnicodeString& result);
1198 
1203  static int32_t _countAvailableTargets(const UnicodeString& source);
1204 
1209  static UnicodeString& _getAvailableTarget(int32_t index,
1210  const UnicodeString& source,
1211  UnicodeString& result);
1212 
1217  static int32_t _countAvailableVariants(const UnicodeString& source,
1218  const UnicodeString& target);
1219 
1224  static UnicodeString& _getAvailableVariant(int32_t index,
1225  const UnicodeString& source,
1226  const UnicodeString& target,
1227  UnicodeString& result);
1228 #endif /* U_HIDE_INTERNAL_API */
1229 
1230 protected:
1231 
1238  void setID(const UnicodeString& id);
1239 
1240 public:
1241 
1252  static UClassID U_EXPORT2 getStaticClassID(void);
1253 
1269  virtual UClassID getDynamicClassID(void) const = 0;
1270 
1271 private:
1272  static UBool initializeRegistry(UErrorCode &status);
1273 
1274 public:
1275 #ifndef U_HIDE_OBSOLETE_API
1276 
1283  static int32_t U_EXPORT2 countAvailableIDs(void);
1284 
1297  static const UnicodeString& U_EXPORT2 getAvailableID(int32_t index);
1298 #endif /* U_HIDE_OBSOLETE_API */
1299 };
1300 
1301 inline int32_t Transliterator::getMaximumContextLength(void) const {
1302  return maximumContextLength;
1303 }
1304 
1305 inline void Transliterator::setID(const UnicodeString& id) {
1306  ID = id;
1307  // NUL-terminate the ID string, which is a non-aliased copy.
1308  ID.append((UChar)0);
1309  ID.truncate(ID.length()-1);
1310 }
1311 
1312 #ifndef U_HIDE_INTERNAL_API
1314  Token t;
1315  t.integer = i;
1316  return t;
1317 }
1318 
1320  Token t;
1321  t.pointer = p;
1322  return t;
1323 }
1324 #endif
1325 
1327 
1328 #endif /* #if !UCONFIG_NO_TRANSLITERATION */
1329 
1330 #endif