• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* GENERATED SOURCE. DO NOT MODIFY. */
2 // © 2016 and later: Unicode, Inc. and others.
3 // License & terms of use: http://www.unicode.org/copyright.html#License
4 /*
5  * Copyright (C) 1996-2010, International Business Machines Corporation and
6  * others. All Rights Reserved.
7  */
8 package ohos.global.icu.text;
9 import ohos.global.icu.lang.UCharacter;
10 
11 /**
12  * A transliterator that performs character to name mapping.
13  * It generates the Perl syntax \N{name}.
14  * @author Alan Liu
15  */
16 class UnicodeNameTransliterator extends Transliterator {
17 
18     static final String _ID = "Any-Name";
19 
20     static final String OPEN_DELIM = "\\N{";
21     static final char CLOSE_DELIM = '}';
22     static final int OPEN_DELIM_LEN = 3;
23 
24     /**
25      * System registration hook.
26      */
register()27     static void register() {
28         Transliterator.registerFactory(_ID, new Transliterator.Factory() {
29             @Override
30             public Transliterator getInstance(String ID) {
31                 return new UnicodeNameTransliterator(null);
32             }
33         });
34     }
35 
36     /**
37      * Constructs a transliterator.
38      */
UnicodeNameTransliterator(UnicodeFilter filter)39     public UnicodeNameTransliterator(UnicodeFilter filter) {
40         super(_ID, filter);
41     }
42 
43     /**
44      * Implements {@link Transliterator#handleTransliterate}.
45      */
46     @Override
handleTransliterate(Replaceable text, Position offsets, boolean isIncremental)47     protected void handleTransliterate(Replaceable text,
48                                        Position offsets, boolean isIncremental) {
49         int cursor = offsets.start;
50         int limit = offsets.limit;
51 
52         StringBuilder str = new StringBuilder();
53         str.append(OPEN_DELIM);
54         int len;
55         String name;
56 
57         while (cursor < limit) {
58             int c = text.char32At(cursor);
59             if ((name=UCharacter.getExtendedName(c)) != null) {
60 
61                 str.setLength(OPEN_DELIM_LEN);
62                 str.append(name).append(CLOSE_DELIM);
63 
64                 int clen = UTF16.getCharCount(c);
65                 text.replace(cursor, cursor+clen, str.toString());
66                 len = str.length();
67                 cursor += len; // advance cursor by 1 and adjust for new text
68                 limit += len-clen; // change in length
69             } else {
70                 ++cursor;
71             }
72         }
73 
74         offsets.contextLimit += limit - offsets.limit;
75         offsets.limit = limit;
76         offsets.start = cursor;
77     }
78 
79     /* (non-Javadoc)
80      * @see ohos.global.icu.text.Transliterator#addSourceTargetSet(ohos.global.icu.text.UnicodeSet, ohos.global.icu.text.UnicodeSet, ohos.global.icu.text.UnicodeSet)
81      */
82     @Override
addSourceTargetSet(UnicodeSet inputFilter, UnicodeSet sourceSet, UnicodeSet targetSet)83     public void addSourceTargetSet(UnicodeSet inputFilter, UnicodeSet sourceSet, UnicodeSet targetSet) {
84         UnicodeSet myFilter = getFilterAsUnicodeSet(inputFilter);
85         if (myFilter.size() > 0) {
86             sourceSet.addAll(myFilter);
87             targetSet.addAll('0', '9')
88             .addAll('A', 'Z')
89             .add('-')
90             .add(' ')
91             .addAll(OPEN_DELIM)
92             .add(CLOSE_DELIM)
93             .addAll('a', 'z') // for controls
94             .add('<').add('>') // for controls
95             .add('(').add(')') // for controls
96             ;
97         }
98     }
99 }
100