Package net.sf.jpluck.plucker

Source Code of net.sf.jpluck.plucker.Text

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));
  }*/
}
 
TOP

Related Classes of net.sf.jpluck.plucker.Text

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.