blob: c74203843e38ebb4bf24d211d49708fde3f3a819 [file] [log] [blame]
/*
* Copyright (C) 1996-2001, International Business Machines Corporation and
* others. All Rights Reserved.
*
* $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/UnicodeNameTransliterator.java,v $
* $Date: 2001/10/17 17:43:03 $
* $Revision: 1.3 $
*/
package com.ibm.text;
import java.util.*;
/**
* A transliterator that performs character to name mapping.
* @author Alan Liu
*/
public class UnicodeNameTransliterator extends Transliterator {
char openDelimiter;
char closeDelimiter;
static final String _ID = "Any-Name";
/**
* System registration hook.
*/
static void register() {
Transliterator.registerFactory(_ID, new Transliterator.Factory() {
public Transliterator getInstance(String ID) {
return new UnicodeNameTransliterator(null);
}
});
}
/**
* Constructs a transliterator.
*/
public UnicodeNameTransliterator(char openDelimiter, char closeDelimiter,
UnicodeFilter filter) {
super(_ID, filter);
this.openDelimiter = openDelimiter;
this.closeDelimiter = closeDelimiter;
}
/**
* Constructs a transliterator with the default delimiters '{' and
* '}'.
*/
public UnicodeNameTransliterator(UnicodeFilter filter) {
this('{', '}', filter);
}
/**
* Implements {@link Transliterator#handleTransliterate}.
*/
protected void handleTransliterate(Replaceable text,
Position offsets, boolean isIncremental) {
int cursor = offsets.start;
int limit = offsets.limit;
StringBuffer str = new StringBuffer();
str.append(openDelimiter);
int len;
String name;
while (cursor < limit) {
char c = text.charAt(cursor);
if ((name=UCharacter.getName(c)) != null) {
str.setLength(1);
str.append(name).append(closeDelimiter);
text.replace(cursor, cursor+1, str.toString());
len = str.length();
cursor += len; // advance cursor by 1 and adjust for new text
limit += len-1; // change in length is (len - 1)
} else {
++cursor;
}
}
offsets.contextLimit += limit - offsets.limit;
offsets.limit = limit;
offsets.start = cursor;
}
}