package net.sf.jpluck.plucker;
import net.sf.jpluck.palm.PdbOutputStream;
import java.io.IOException;
import java.io.Serializable;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
public class Text implements Serializable {
private byte[] content;
private boolean hasSignificantContent;
Text(String str, String encoding) {
if (encoding.equalsIgnoreCase("PalmLatin")) {
encoding = "Windows-1252";
}
for (int i = 0, n = str.length(); i < n; i++) {
if (!hasSignificantContent) {
hasSignificantContent = !Character.isWhitespace(str.charAt(i));
if (hasSignificantContent) {
break;
}
}
}
CharBuffer cb = CharBuffer.wrap(str);
Charset cs = Charset.forName(encoding);
ByteBuffer bb = cs.encode(cb);
content = bb.array();
}
public String toString() {
return new String(content);
}
public static Text createNonBreakingSpace() {
return new Text(String.valueOf((char) 160), "ISO-8859-1");
}
public static Text createPalmMidDot() {
return new Text(String.valueOf((char) 0x95), "ISO-8859-1");
}
/*private void parse(String str) {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdbOutputStream out = new PdbOutputStream(baos);
for (int i = 0, n = str.length(); i < n; i++) {
char c = str.charAt(i);
if (c <= 255) {
// Non-unicode
out.write(c);
if (!hasSignificantContent) {
hasSignificantContent = !Character.isWhitespace(c);
}
} else {
// Unicode
out.writeByte(0);
out.writeByte(Function.UNICODE16BIT_CHARACTER);
String alt = (String) characterMapping.get(new Character(c));
if (alt != null) {
out.writeByte(alt.length());
out.writeShort(c);
out.writeString(alt);
} else {
out.writeByte(0);
out.writeShort(c);
}
hasSignificantContent = true;
}
}
out.flush();
content = baos.toByteArray();
} catch (IOException e) {
// Should not occur
throw new RuntimeException(e);
}
}*/
public int getSize() {
return content.length;
}
public boolean hasSignificantContent() {
return hasSignificantContent;
}
public void write(PdbOutputStream pdb) throws IOException {
pdb.write(content);
}
int add(Text text) {
int totalLength = content.length + text.content.length;
int idx = 0;
byte lastChar = content[content.length - 1];
int firstCharNext = text.content[0];
if ((lastChar == ' ') && (firstCharNext == ' ')) {
totalLength--;
idx = 1;
}
byte[] newContent = new byte[totalLength];
System.arraycopy(content, 0, newContent, 0, content.length);
System.arraycopy(text.content, idx, newContent, content.length, text.content.length - idx);
content = newContent;
hasSignificantContent = (hasSignificantContent || text.hasSignificantContent);
return text.content.length - idx;
}
void stripLeadingSpace() {
if (content[0] == 32) {
byte[] newContent = new byte[content.length - 1];
System.arraycopy(content, 1, newContent, 0, content.length - 1);
content = newContent;
}
}
/*private static Map characterMapping = new HashMap();
static {
characterMapping.put(new Character('\u20ac'), String.valueOf((char) 128));
characterMapping.put(new Character('\u201a'), String.valueOf((char) 130));
characterMapping.put(new Character('\u0192'), String.valueOf((char) 131));
characterMapping.put(new Character('\u201e'), String.valueOf((char) 132));
characterMapping.put(new Character('\u2026'), String.valueOf((char) 133));
characterMapping.put(new Character('\u2020'), String.valueOf((char) 134));
characterMapping.put(new Character('\u2021'), String.valueOf((char) 135));
characterMapping.put(new Character('\u02c6'), String.valueOf((char) 136));
characterMapping.put(new Character('\u2030'), String.valueOf((char) 137));
characterMapping.put(new Character('\u0160'), String.valueOf((char) 138));
characterMapping.put(new Character('\u2039'), String.valueOf((char) 139));
characterMapping.put(new Character('\u0152'), String.valueOf((char) 140));
//characterMapping.put(new Character('\u017d'), String.valueOf((char)142));
characterMapping.put(new Character('\u2018'), String.valueOf((char) 145));
characterMapping.put(new Character('\u2019'), String.valueOf((char) 146));
characterMapping.put(new Character('\u201c'), String.valueOf((char) 147));
characterMapping.put(new Character('\u201d'), String.valueOf((char) 148));
characterMapping.put(new Character('\u2022'), String.valueOf((char) 149));
characterMapping.put(new Character('\u2013'), String.valueOf((char) 150));
characterMapping.put(new Character('\u2014'), String.valueOf((char) 151));
characterMapping.put(new Character('\u02dc'), String.valueOf((char) 152));
characterMapping.put(new Character('\u2122'), String.valueOf((char) 153));
characterMapping.put(new Character('\u0161'), String.valueOf((char) 154));
characterMapping.put(new Character('\u203a'), String.valueOf((char) 155));
characterMapping.put(new Character('\u0153'), String.valueOf((char) 156));
//characterMapping.put(new Character('\u017e'), String.valueOf((char)158));
characterMapping.put(new Character('\u0178'), String.valueOf((char) 159));
}*/
}