2 * Copyright (C) 1996-2010, International Business Machines Corporation and
\r
3 * others. All Rights Reserved.
\r
5 package com.ibm.icu.text;
\r
6 import com.ibm.icu.lang.UCharacter;
\r
9 * A transliterator that performs character to name mapping.
\r
10 * It generates the Perl syntax \N{name}.
\r
13 class UnicodeNameTransliterator extends Transliterator {
\r
15 static final String _ID = "Any-Name";
\r
17 static final String OPEN_DELIM = "\\N{";
\r
18 static final char CLOSE_DELIM = '}';
\r
19 static final int OPEN_DELIM_LEN = 3;
\r
22 * System registration hook.
\r
24 static void register() {
\r
25 Transliterator.registerFactory(_ID, new Transliterator.Factory() {
\r
26 public Transliterator getInstance(String ID) {
\r
27 return new UnicodeNameTransliterator(null);
\r
33 * Constructs a transliterator.
\r
35 public UnicodeNameTransliterator(UnicodeFilter filter) {
\r
40 * Implements {@link Transliterator#handleTransliterate}.
\r
42 protected void handleTransliterate(Replaceable text,
\r
43 Position offsets, boolean isIncremental) {
\r
44 int cursor = offsets.start;
\r
45 int limit = offsets.limit;
\r
47 StringBuilder str = new StringBuilder();
\r
48 str.append(OPEN_DELIM);
\r
52 while (cursor < limit) {
\r
53 int c = text.char32At(cursor);
\r
54 if ((name=UCharacter.getExtendedName(c)) != null) {
\r
56 str.setLength(OPEN_DELIM_LEN);
\r
57 str.append(name).append(CLOSE_DELIM);
\r
59 int clen = UTF16.getCharCount(c);
\r
60 text.replace(cursor, cursor+clen, str.toString());
\r
62 cursor += len; // advance cursor by 1 and adjust for new text
\r
63 limit += len-clen; // change in length
\r
69 offsets.contextLimit += limit - offsets.limit;
\r
70 offsets.limit = limit;
\r
71 offsets.start = cursor;
\r