ICU 52.1  52.1
translit.h
Go to the documentation of this file.
1 /*
2 **********************************************************************
3 * Copyright (C) 1999-2013, 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 
505  virtual void transliterate(Replaceable& text, UTransPosition& index,
506  UErrorCode& status) const;
507 
519  virtual void finishTransliteration(Replaceable& text,
520  UTransPosition& index) const;
521 
522 private:
523 
539  void _transliterate(Replaceable& text,
540  UTransPosition& index,
541  const UnicodeString* insertion,
542  UErrorCode &status) const;
543 
544 protected:
545 
625  virtual void handleTransliterate(Replaceable& text,
626  UTransPosition& pos,
627  UBool incremental) const = 0;
628 
629 public:
641  virtual void filteredTransliterate(Replaceable& text,
642  UTransPosition& index,
643  UBool incremental) const;
644 
645 private:
646 
674  virtual void filteredTransliterate(Replaceable& text,
675  UTransPosition& index,
676  UBool incremental,
677  UBool rollback) const;
678 
679 public:
680 
694  int32_t getMaximumContextLength(void) const;
695 
696 protected:
697 
704  void setMaximumContextLength(int32_t maxContextLength);
705 
706 public:
707 
718  virtual const UnicodeString& getID(void) const;
719 
729  static UnicodeString& U_EXPORT2 getDisplayName(const UnicodeString& ID,
730  UnicodeString& result);
731 
753  static UnicodeString& U_EXPORT2 getDisplayName(const UnicodeString& ID,
754  const Locale& inLocale,
755  UnicodeString& result);
756 
764  const UnicodeFilter* getFilter(void) const;
765 
775  UnicodeFilter* orphanFilter(void);
776 
787  void adoptFilter(UnicodeFilter* adoptedFilter);
788 
808  Transliterator* createInverse(UErrorCode& status) const;
809 
826  static Transliterator* U_EXPORT2 createInstance(const UnicodeString& ID,
827  UTransDirection dir,
828  UParseError& parseError,
829  UErrorCode& status);
830 
841  static Transliterator* U_EXPORT2 createInstance(const UnicodeString& ID,
842  UTransDirection dir,
843  UErrorCode& status);
844 
860  static Transliterator* U_EXPORT2 createFromRules(const UnicodeString& ID,
861  const UnicodeString& rules,
862  UTransDirection dir,
863  UParseError& parseError,
864  UErrorCode& status);
865 
877  virtual UnicodeString& toRules(UnicodeString& result,
878  UBool escapeUnprintable) const;
879 
892  int32_t countElements() const;
893 
913  const Transliterator& getElement(int32_t index, UErrorCode& ec) const;
914 
930  UnicodeSet& getSourceSet(UnicodeSet& result) const;
931 
946  virtual void handleGetSourceSet(UnicodeSet& result) const;
947 
961  virtual UnicodeSet& getTargetSet(UnicodeSet& result) const;
962 
963 public:
964 
976  static void U_EXPORT2 registerFactory(const UnicodeString& id,
977  Factory factory,
978  Token context);
979 
997  static void U_EXPORT2 registerInstance(Transliterator* adoptedObj);
998 
1013  static void U_EXPORT2 registerAlias(const UnicodeString& aliasID,
1014  const UnicodeString& realID);
1015 
1016 protected:
1017 
1018 #ifndef U_HIDE_INTERNAL_API
1019 
1028  static void _registerFactory(const UnicodeString& id,
1029  Factory factory,
1030  Token context);
1031 
1035  static void _registerInstance(Transliterator* adoptedObj);
1036 
1040  static void _registerAlias(const UnicodeString& aliasID, const UnicodeString& realID);
1041 
1075  static void _registerSpecialInverse(const UnicodeString& target,
1076  const UnicodeString& inverseTarget,
1077  UBool bidirectional);
1078 #endif /* U_HIDE_INTERNAL_API */
1079 
1080 public:
1081 
1095  static void U_EXPORT2 unregister(const UnicodeString& ID);
1096 
1097 public:
1098 
1108  static StringEnumeration* U_EXPORT2 getAvailableIDs(UErrorCode& ec);
1109 
1115  static int32_t U_EXPORT2 countAvailableSources(void);
1116 
1126  static UnicodeString& U_EXPORT2 getAvailableSource(int32_t index,
1127  UnicodeString& result);
1128 
1137  static int32_t U_EXPORT2 countAvailableTargets(const UnicodeString& source);
1138 
1150  static UnicodeString& U_EXPORT2 getAvailableTarget(int32_t index,
1151  const UnicodeString& source,
1152  UnicodeString& result);
1153 
1161  static int32_t U_EXPORT2 countAvailableVariants(const UnicodeString& source,
1162  const UnicodeString& target);
1163 
1177  static UnicodeString& U_EXPORT2 getAvailableVariant(int32_t index,
1178  const UnicodeString& source,
1179  const UnicodeString& target,
1180  UnicodeString& result);
1181 
1182 protected:
1183 
1184 #ifndef U_HIDE_INTERNAL_API
1185 
1189  static int32_t _countAvailableSources(void);
1190 
1195  static UnicodeString& _getAvailableSource(int32_t index,
1196  UnicodeString& result);
1197 
1202  static int32_t _countAvailableTargets(const UnicodeString& source);
1203 
1208  static UnicodeString& _getAvailableTarget(int32_t index,
1209  const UnicodeString& source,
1210  UnicodeString& result);
1211 
1216  static int32_t _countAvailableVariants(const UnicodeString& source,
1217  const UnicodeString& target);
1218 
1223  static UnicodeString& _getAvailableVariant(int32_t index,
1224  const UnicodeString& source,
1225  const UnicodeString& target,
1226  UnicodeString& result);
1227 #endif /* U_HIDE_INTERNAL_API */
1228 
1229 protected:
1230 
1237  void setID(const UnicodeString& id);
1238 
1239 public:
1240 
1251  static UClassID U_EXPORT2 getStaticClassID(void);
1252 
1268  virtual UClassID getDynamicClassID(void) const = 0;
1269 
1270 private:
1271  static UBool initializeRegistry(UErrorCode &status);
1272 
1273 public:
1274 #ifndef U_HIDE_OBSOLETE_API
1275 
1282  static int32_t U_EXPORT2 countAvailableIDs(void);
1283 
1296  static const UnicodeString& U_EXPORT2 getAvailableID(int32_t index);
1297 #endif /* U_HIDE_OBSOLETE_API */
1298 };
1299 
1300 inline int32_t Transliterator::getMaximumContextLength(void) const {
1301  return maximumContextLength;
1302 }
1303 
1304 inline void Transliterator::setID(const UnicodeString& id) {
1305  ID = id;
1306  // NUL-terminate the ID string, which is a non-aliased copy.
1307  ID.append((UChar)0);
1308  ID.truncate(ID.length()-1);
1309 }
1310 
1311 #ifndef U_HIDE_INTERNAL_API
1312 inline Transliterator::Token Transliterator::integerToken(int32_t i) {
1313  Token t;
1314  t.integer = i;
1315  return t;
1316 }
1317 
1318 inline Transliterator::Token Transliterator::pointerToken(void* p) {
1319  Token t;
1320  t.pointer = p;
1321  return t;
1322 }
1323 #endif /* U_HIDE_INTERNAL_API */
1324 
1326 
1327 #endif /* #if !UCONFIG_NO_TRANSLITERATION */
1328 
1329 #endif