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