[SCM] JAS(2) Plotter branch, upstream, updated. upstream/2.2.6.dfsg-1-g8225608

Giovanni Mascellani gmascellani-guest at alioth.debian.org
Sun Jan 24 17:05:17 UTC 2010


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "JAS(2) Plotter".

The branch, upstream has been updated
       via  82256084e1b5d694dd6b0618c315d481281bc88d (commit)
      from  e5f0335850594d1dae3a1f419fb943dd1c32076e (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
-----------------------------------------------------------------------

Summary of changes:
 src/main/java/jas/util/layout/PnutsLayout.java     | 1308 --------------------
 .../java/jas/util/xml/XMLCharacterProperties.java  |  522 --------
 2 files changed, 0 insertions(+), 1830 deletions(-)

diff --git a/src/main/java/jas/util/layout/PnutsLayout.java b/src/main/java/jas/util/layout/PnutsLayout.java
deleted file mode 100644
index 403be11..0000000
--- a/src/main/java/jas/util/layout/PnutsLayout.java
+++ /dev/null
@@ -1,1308 +0,0 @@
-/*
- * @(#) PnutsLayout.java	1.2 98/05/12
- *
- * Copyright (c) 1997,1998 Sun Microsystems, Inc. All Rights Reserved.
- *
- * This routine is taken from the PNUTS package at:
- *    http://javacenter.sun.co.jp/pnuts/index.html
- *
- * See the file "license.txt" for information on usage and redistribution
- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- */
-package jas.util.layout; // package name changed for use with JAS
-
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Dimension;
-import java.awt.Insets;
-import java.awt.LayoutManager;
-import java.awt.LayoutManager2;
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.util.BitSet;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.StringTokenizer;
-
-/**
- * The PnutsLayout is a general purpose geometry manager. 
- * It is more user-friendly than any LayoutManager out there
- * and as flexible as GridBagLayout.
- * e.g.
- * <pre>
- *  setLayout(new PnutsLayout("cols = 3"));
- *  add(button1, "ipadx = 20, ipady = 20");
- *  add(button2, "padx = 20, pady = 20");
- *  add(button3, "colspan = 2");
- *  add(button4, "rowspan = 2");
- *  add(button3, "halign = left, valign = top");
- *  add(button3, "halign = right, valign = bottom");
- *  add(button3, "halign = center, valign = fill");
- * </pre>
- * 
- * <table border>
- * <tr><th>property</th><th>the meaning</th><th>default</th></tr>
- * <tr><td>cols</td><td>number of columns</td><td>1</td></tr>
- * <tr><td>uniform</td><td>if width and/or height of each columns are all same, "x", "y" or "xy"</td><td>""</td></tr>
- * <tr><td>colspan</td><td>number of columns the component occupies</td><td>1</td></tr>
- * <tr><td>rowspan</td><td>number of rows the component occupies</td><td>1</td></tr>
- * <tr><td>padx</td><td>external padding (x)</td><td>0</td></tr>
- * <tr><td>pady</td><td>external padding (y)</td><td>0</td></tr>
- * <tr><td>ipadx</td><td>internal padding (x)</td><td>0</td></tr>
- * <tr><td>ipady</td><td>internal padding (y)</td><td>0</td></tr>
- * <tr><td>halign</td><td>alignment of x. One of "left", "right", "center", "fill"</td><td>center</td></tr>
- * <tr><td>valign</td><td>alignment of y. One of "top", "bottom", "center", "fill"</td><td>center</td></tr>
- * <tr><td>expand</td><td>expand as the size of container changes. one of "x", "y", "xy"</td><td>""</td></tr>
- * </table>
- *
- * <p>
- * @version 1.2
- * @autor Toyokazu Tomatsu
- */
-
-public class PnutsLayout implements LayoutManager2, java.io.Serializable {
-
-    public static final int CENTER 	= 0;
-    public static final int TOP 	= 1;
-    public static final int BOTTOM 	= 2;
-    public static final int LEFT 	= 4;
-    public static final int RIGHT 	= 8;
-    public static final int V_FIT	= 16;
-    public static final int H_FIT	= 32;
-    static final int V_FILL 	= TOP | BOTTOM;
-    static final int H_FILL 	= LEFT | RIGHT;
-
-    static Integer[] integer = new Integer[33];
-    static {
-	for (int i = 0; i < integer.length; i++){
-	    integer[i] = new Integer(i);
-	}
-    }
-
-    static Integer getInteger(int i){
-	if (i < 32){
-	    return integer[i];
-	} else {
-	    return new Integer(i);
-	}
-    }
-
-    static int zero[] = new int[16];
-    static {
-	for (int i = 0; i < zero.length; i++){
-	    zero[i] = 0;
-	}
-    }
- 
-    /**
-     * alignment table
-     */
-    Hashtable alignmentTable = new Hashtable();
-
-    /**
-     * span table
-     */
-    Hashtable spanTable = new Hashtable();
-
-    /**
-     * padx/y table
-     */
-    Hashtable padTable = new Hashtable();
-
-    /**
-     * ipadx/y table
-     */
-    Hashtable iPadTable = new Hashtable();
-
-    private int widths[];
-    private int heights[];
-    private int hfit[];
-    private int vfit[];
-    private int hfits;
-    private int vfits;
-    int grid_x[];
-    int grid_y[];
-    int pos_x[] = new int[8];
-    int pos_y[] = new int[8];
-
-    private Dimension psize;
-    private boolean valid = false;
-
-    /**
-     * default align
-     */
-    protected int align = CENTER;
-
-    /**
-     * default padx
-     */
-    protected int padx;
-
-    /**
-     * default pady
-     */
-    protected int pady;
-
-    /**
-     * default ipadx
-     */
-    protected int ipadx;
-
-    /**
-     * default ipady
-     */
-    protected int ipady;
-
-    /**
-     * The number of columns
-     */
-    protected int cols;
-
-    /**
-     * The number of rows
-     */
-    protected int rows;
-
-    protected boolean xfix;
-    protected boolean yfix;
-
-    /**
-     * construct a PnutsLayout
-     */
-    public PnutsLayout() {
-	this(1);
-    }
-
-    /**
-     * construct a PnutsLayout with specified number of columns
-     * @param cols the number of columns
-     */
-    public PnutsLayout(int cols) {
-	this(cols, 0, 0);
-    }
-
-    /**
-     * construct a PnutsLayout
-     * @param cols the number of columns
-     * @param padx default external padding
-     * @param pady default external padding
-     */
-    public PnutsLayout(int cols, int padx, int pady) {
-	this.cols = cols;
-	this.padx = padx;
-	this.pady = pady;
-    }
-
-    /*
-     * construct a PnutsLayout from a constraint string.
-     * Usage:
-     *   "cols=<number>, padx=<number>, pady=<number>, uniform=<x | y | xy>"
-     *
-     * @param str a constraint string
-     */
-    public PnutsLayout(String str) {
-	Hashtable t = str2table(str);
-
-	this.cols = getInt(t.get("cols"), 1);
-	this.padx = getInt(t.get("padx"), 0);
-	this.pady = getInt(t.get("pady"), 0);
-	this.ipadx = getInt(t.get("ipadx"), 0);
-	this.ipady = getInt(t.get("ipady"), 0);
-
-	int ha = 0;
-	int va = 0;
-
-	String h = (String)t.get("halign");
-	if (h != null){
-	    if ("left".equalsIgnoreCase(h)){
-		ha |= LEFT;
-	    } else if ("right".equalsIgnoreCase(h)){
-		ha |= RIGHT;
-	    } else if ("center".equalsIgnoreCase(h)){
-		ha |= CENTER;
-	    } else if ("fill".equalsIgnoreCase(h)){
-		ha |= RIGHT;
-		ha |= LEFT;
-	    }
-	} else {
-	    ha = this.align & (LEFT | RIGHT | H_FIT);
-	}
-
-	String v = (String)t.get("valign");
-	if (v != null){
-	    if ("top".equalsIgnoreCase(v)){
-		va |= TOP;
-	    } else if ("bottom".equalsIgnoreCase(v)){
-		va |= BOTTOM;
-	    } else if ("center".equalsIgnoreCase(v)){
-		va |= CENTER;
-	    } else if ("fill".equalsIgnoreCase(v)){
-		va |= TOP;
-		va |= BOTTOM;
-	    }
-	} else {
-	    va = this.align & (TOP | BOTTOM | V_FIT);
-	}
-
-	String ex = (String)t.get("expand");
-	if (ex instanceof String){
-	    if ("x".equalsIgnoreCase(ex)){
-		ha |= H_FIT;
-	    } else if ("y".equalsIgnoreCase(ex)){
-		va |= V_FIT;
-	    } else if ("xy".equalsIgnoreCase(ex)){
-		ha |= H_FIT;
-		va |= V_FIT;
-	    }
-	}
-
-	this.align = ha | va;
-
-	String fix = (String)t.get("uniform");
-	if ("x".equals(fix)){
-	    xfix = true;
-	} else if ("y".equals(fix)){
-	    yfix = true;
-	} else if ("xy".equals(fix)){
-	    xfix = true;
-	    yfix = true;
-	}
-    }
-
-    /**
-     * Adds the specified component to the layout, using the specified
-     * constraint object.
-     * @param      comp         the component to be added.
-     * @param      obj		an object that determines how 
-     *                          the component is added to the layout.
-     * Usage:
-     *   container.add(component, new Object[]{align, colspan, rowspan});
-     */
-    public void addLayoutComponent(Component comp, Object obj) {
-	if (obj instanceof Hashtable){
-	    setConstraints(comp, (Hashtable)obj);
-	} else if (obj instanceof String){
-	    setConstraints(comp, (String)obj);
-	}
-    }
-
-    /**
-     * Specify layout constraints with comma-separated list of
-     * "<property>=<value>".
-     *
-     * halign ::= left | right | center | fill
-     * valign ::= top | bottom | center | fill
-     * expand    ::= x | y | xy
-     *
-     * @param      comp         the component
-     * @param      str 		a string that describes how 
-     *                          the component is added to the layout.
-     */
-    public void setConstraints(Component comp, String str){
-	int hal = this.align & (LEFT | RIGHT | H_FIT);
-	int val = this.align & (TOP | BOTTOM | V_FIT);
-	Hashtable tab = str2table(str);
-
-	Object v0 = tab.get("expand");
-	if (v0 instanceof String){
-	    String s = (String)v0;
-	    if ("x".equalsIgnoreCase(s)){
-		hal |= H_FIT;
-	    } else if ("y".equalsIgnoreCase(s)){
-		val |= V_FIT;
-	    } else if ("xy".equalsIgnoreCase(s)){
-		hal |= H_FIT;
-		val |= V_FIT;
-	    }
-	}
-
-	Object v1 = tab.get("halign");
-	if (v1 instanceof String){
-	    hal &= ~(LEFT | RIGHT);
-	    String s = (String)v1;
-	    if ("left".equalsIgnoreCase(s)){
-		hal |= LEFT;
-	    } else if ("right".equalsIgnoreCase(s)){
-		hal |= RIGHT;
-	    } else if ("center".equalsIgnoreCase(s)){
-		hal |= CENTER;
-	    } else if ("fill".equalsIgnoreCase(s)){
-		hal |= RIGHT;
-		hal |= LEFT;
-	    }
-	}
-
-	Object v2 = tab.get("valign");
-	if (v2 instanceof String){
-	    val &= ~(TOP | BOTTOM);
-	    String s = (String)v2;
-	    if ("top".equalsIgnoreCase(s)){
-		val |= TOP;
-	    } else if ("bottom".equalsIgnoreCase(s)){
-		val |= BOTTOM;
-	    } else if ("center".equalsIgnoreCase(s)){
-		val |= CENTER;
-	    } else if ("fill".equalsIgnoreCase(s)){
-		val |= TOP;
-		val |= BOTTOM;
-	    }
-	}
-
-	tab.put("valign", getInteger(val));
-	tab.put("halign", getInteger(hal));
-
-	setConstraints(comp, tab);
-    }
-
-    static int getInt(Object obj, int defaultValue){
-	if (obj == null){
-	    return defaultValue;
-	}
-	if (obj instanceof Integer){
-	    return ((Integer)obj).intValue();
-	} else {
-	    return Integer.parseInt((String)obj);
-	}
-    }
-
-    /**
-     * Specify layout constraints with Hashtable
-     *
-     * @param      comp         the component to be set the constraint.
-     * @param      table	a Hashtable that describes how 
-     *                          the component is added to the layout.
-     */
-    public void setConstraints(Component comp, Hashtable table){
-
-	int h = getInt(table.get("halign"), this.align & (LEFT | RIGHT));
-	int v = getInt(table.get("valign"), this.align & (TOP | BOTTOM));
-	alignmentTable.put(comp, getInteger(h | v));
-
-	int c = getInt(table.get("colspan"), 1);
-	if (c <= cols){
-	    spanTable.put(comp, new Object[]{
-		getInteger(c),
-		    getInteger(getInt(table.get("rowspan"), 1))});
-	}
-
-	padTable.put(comp, new Object[]{
-	    getInteger(getInt(table.get("padx"), this.padx)),
-		getInteger(getInt(table.get("pady"), this.pady))});
-		
-	iPadTable.put(comp, new Object[]{
-	    getInteger(getInt(table.get("ipadx"), this.ipadx)),
-		getInteger(getInt(table.get("ipady"), this.ipady))});
-    }
-
-    /**
-     * get a string representaion of constraint for the
-     * specified component
-     *
-     * @param   comp         the component to be investigate
-     * @return	string representaion of the constraint
-     */
-    public String getConstraintString(Component comp){
-	Hashtable tab = getConstraints(comp);
-	StringBuffer buf = new StringBuffer();
-
-	String halign = (String)tab.get("halign");
-	if (halign != null){
-	    buf.append("halign = " + halign);
-	}
-	String valign = (String)tab.get("valign");
-	if (valign != null){
-	    if (buf.length() > 0) buf.append(", ");
-	    buf.append("valign = " + valign);
-	}
-
-	String expand = (String)tab.get("expand");
-	if (expand != null){
-	    if (buf.length() > 0) buf.append(", ");
-	    buf.append("expand = " + expand);
-	}
-
-	int padx = ((Integer)tab.get("padx")).intValue();
-	if (padx > 0){
-	    if (buf.length() > 0) buf.append(", ");
-	    buf.append("padx = " + padx);
-	}
-	int pady = ((Integer)tab.get("pady")).intValue();
-	if (pady > 0){
-	    if (buf.length() > 0) buf.append(", ");
-	    buf.append("pady = " + pady);
-	}
-	int ipadx = ((Integer)tab.get("ipadx")).intValue();
-	if (ipadx > 0){
-	    if (buf.length() > 0) buf.append(", ");
-	    buf.append("ipadx = " + ipadx);
-	}
-	int ipady = ((Integer)tab.get("ipady")).intValue();
-	if (ipady > 0){
-	    if (buf.length() > 0) buf.append(", ");
-	    buf.append("ipady = " + ipady);
-	}
-	int colspan = ((Integer)tab.get("colspan")).intValue();
-	if (colspan > 1){
-	    if (buf.length() > 0) buf.append(", ");
-	    buf.append("colspan = " + colspan);
-	}
-	int rowspan = ((Integer)tab.get("rowspan")).intValue();
-	if (rowspan > 1){
-	    if (buf.length() > 0) buf.append(", ");
-	    buf.append("rowspan = " + rowspan);
-	}
-	return buf.toString();
-    }
-
-    /**
-     * get a Hashtable of constraint for the specified component
-     *
-     * @param      comp         the component to be investigate
-     * @return	the constraints as Hashtable
-     */
-    public Hashtable getConstraints(Component comp){
-	Hashtable tab = new Hashtable();
-	Object o1 = alignmentTable.get(comp);
-	int align = this.align;
-	if (o1 != null){
-	    align = ((Integer)o1).intValue();
-	    String halign = "center";
-	    String valign = "center";
-	    switch (align & H_FILL){
-	    case LEFT:
-		halign = "left";
-		break;
-	    case RIGHT:
-		halign = "right";
-		break;
-	    case H_FILL:
-		halign = "fill";
-		break;
-	    }
-	    switch (align & V_FILL){
-	    case TOP:
-		valign = "top";
-		break;
-	    case BOTTOM:
-		valign = "bottom";
-		break;
-	    case V_FILL:
-		valign = "fill";
-		break;
-	    }
-	    if (!"center".equals(halign)){
-		tab.put("halign", halign);
-	    }
-	    if (!"center".equals(valign)){
-		tab.put("valign", valign);
-	    }
-
-	    String expand = "";
-	    if ((align & H_FIT) == H_FIT){
-		expand += "x";
-	    }
-	    if ((align & V_FIT) == V_FIT){
-		expand += "y";
-	    }
-	    if (expand.length() > 0){
-		tab.put("expand", expand);
-	    }
-	}
-	Object[] o2 = (Object[])padTable.get(comp);
-	if (o2 != null){
-	    tab.put("padx", o2[0]);
-	    tab.put("pady", o2[1]);
-	}
-	Object o3[] = (Object[])iPadTable.get(comp);
-	if (o3 != null){
-	    tab.put("ipadx", o3[0]);
-	    tab.put("ipady", o3[1]);
-	}
-	Object o4[] = (Object[])spanTable.get(comp);
-	if (o4 != null){
-	    tab.put("colspan", o4[0]);
-	    tab.put("rowspan", o4[1]);
-	}
-	return tab;
-    }
-
-    /**
-     * Adds the specified component with the specified name to
-     * the layout.
-     * @param name the component name
-     * @param comp the component to be added
-     */
-    public void addLayoutComponent(String name, Component comp){
-    }
-
-    /**
-     * Removes the specified component from the layout.
-     * @param comp the component ot be removed
-     */
-    public void removeLayoutComponent(Component comp){
-    }
-
-    /** 
-     * Returns the maximum size of this component.
-     * @see java.awt.Component#getMinimumSize()
-     * @see java.awt.Component#getPreferredSize()
-     * @see LayoutManager
-     */
-    public Dimension maximumLayoutSize(Container target){
-	return target.getMaximumSize();
-    }
-
-    /**
-     * Returns the alignment along the x axis.  This specifies how
-     * the component would like to be aligned relative to other 
-     * components.  The value should be a number between 0 and 1
-     * where 0 represents alignment along the origin, 1 is aligned
-     * the furthest away from the origin, 0.5 is centered, etc.
-     */
-    public float getLayoutAlignmentX(Container target){
-	return 0f;
-    }
-
-    /**
-     * Returns the alignment along the y axis.  This specifies how
-     * the component would like to be aligned relative to other 
-     * components.  The value should be a number between 0 and 1
-     * where 0 represents alignment along the origin, 1 is aligned
-     * the furthest away from the origin, 0.5 is centered, etc.
-     */
-    public float getLayoutAlignmentY(Container target){
-	return 0f;
-    }
-
-    /**
-     * Invalidates the layout, indicating that if the layout manager
-     * has cached information it should be discarded.
-     *
-     * @param	target	container to invalidate the layout
-     */
-    public void invalidateLayout(Container target){
-	valid = false;
-    }
-
-
-    /**
-     * Set the number of columns
-     *
-     * @param	cols	the number of columns
-     */
-    public void setCols(int cols){
-	for (Enumeration e = spanTable.elements(); e.hasMoreElements(); ){
-	    Object[] obj = (Object[])e.nextElement();
-	    int colspan = ((Integer)obj[0]).intValue();
-	    if (colspan > cols){
-		return;
-	    }
-	}
-	this.cols = cols;
-	valid = false;
-    }
-
-    /**
-     *  set "uniform" property
-     *
-     * @param	x	uniform property for horizontal direction
-     * @param	y	uniform property for vertical direction
-     */
-    public void setUniform(boolean x, boolean y){
-	xfix = x;
-	yfix = y;
-	valid = false;
-    }
-
-    /**
-     * get "uniform" property
-     *
-     * @return boolean array of "uniform property"
-     */
-    public boolean[] getUniform(){
-	return new boolean[]{xfix, yfix};
-    }
-
-    /**
-     * @param comp the component of which you want to change colspan
-     * @param colspan the number of columns the component occupies
-     */
-    public void setColspan(Component comp, int colspan){
-	Object[] p = (Object[])spanTable.get(comp);
-	if (p != null){
-	    p[0] = getInteger(colspan);
-	    spanTable.put(comp, p);
-	} else {
-	    spanTable.put(comp, new Object[]{ getInteger(colspan), getInteger(1)});
-	}
-	invalidateLayout(comp.getParent());
-    }
-
-    /**
-     * @param comp the component of which you want to get colspan
-     * @return the value of "colspan" property
-     */
-    public int getColspan(Component comp){
-	Object o[] = (Object[])spanTable.get(comp);
-	if (o == null || o.length < 2){
-	    return 1;
-	} else {
-	    return ((Integer)o[0]).intValue();
-	}
-    }
-
-    /**
-     * @param comp the component of which you want to change rowspan
-     * @param rowspan the number of rows the component occupies
-     */
-    public void setRowspan(Component comp, int rowspan){
-	Object[] p = (Object[])spanTable.get(comp);
-	if (p != null){
-	    p[1] = getInteger(rowspan);
-	    spanTable.put(comp, p);
-	} else {
-	    spanTable.put(comp, new Object[]{ getInteger(1), getInteger(rowspan)});
-	}
-	invalidateLayout(comp.getParent());
-    }
-
-    /**
-     * @param comp the component of which you want to get rowspan
-     * @return the value of "rowspan" property
-     */
-    public int getRowspan(Component comp){
-	Object o[] = (Object[])spanTable.get(comp);
-	if (o == null || o.length < 2){
-	    return 1;
-	} else {
-	    return ((Integer)o[1]).intValue();
-	}
-    }
-
-    /**
-     * @param comp the component of which you want to change alignment
-     * @param align "left", "right", "fill", "center"
-     */
-    public void setHAlign(Component comp, String s){
-	int i = 0;
-	if ("left".equalsIgnoreCase(s)){
-	    i = LEFT;
-	} else if ("right".equalsIgnoreCase(s)){
-	    i = RIGHT;
-	} else if ("fill".equalsIgnoreCase(s)){
-	    i = H_FILL;
-	} else {
-	    i = CENTER;
-	}
-	alignmentTable.put(comp, getInteger(i));
-	invalidateLayout(comp.getParent());
-    }
-
-    /**
-     * @param comp the component of which you want to change alignment
-     * @param align "top", "bottom", "fill", "center"
-     */
-    public void setVAlign(Component comp, String s){
-	int i = 0;
-	if ("left".equalsIgnoreCase(s)){
-	    i = TOP;
-	} else if ("bottom".equalsIgnoreCase(s)){
-	    i = BOTTOM;
-	} else if ("fill".equalsIgnoreCase(s)){
-	    i = V_FILL;
-	} else {
-	    i = CENTER;
-	}
-	alignmentTable.put(comp, getInteger(i));
-	invalidateLayout(comp.getParent());
-    }
-
-    /**
-     * @param comp the component of which you want to get alignment
-     * @return	"fill" | "left" | "right" | "center"
-     */
-    public String getHAlign(Component comp){
-	Integer it = (Integer)alignmentTable.get(comp);
-	int i = this.align;
-	if (it != null){
-	    i = it.intValue();
-	}
-	if ((i & H_FILL) == H_FILL){
-	    return "fill";
-	}
-	if ((i & LEFT) == LEFT){
-	    return "left";
-	}
-	if ((i & RIGHT) == RIGHT){
-	    return "right";
-	}
-	return "center";
-    }
-
-    /**
-     * @param comp the component of which you want to get alignment
-     * @return "fill" | "top" | "bottom" | "center"
-     */
-    public String getVAlign(Component comp){
-	Integer it = (Integer)alignmentTable.get(comp);
-	int i = this.align;
-	if (it != null){
-	    i = it.intValue();
-	}
-	if ((i & V_FILL) == V_FILL){
-	    return "fill";
-	}
-	if ((i & TOP) == TOP){
-	    return "top";
-	}
-	if ((i & BOTTOM) == BOTTOM){
-	    return "bottom";
-	}
-	return "center";
-    }
-
-    /**
-     * @param comp the component of which you want to set "expand"
-     */
-    public void setExpand(Component comp, String ex){
-	Integer it = (Integer)alignmentTable.get(comp);
-	int i = this.align;
-	if (it != null){
-	    i = it.intValue();
-	}
-	if ("x".equalsIgnoreCase(ex)){
-	    i |= H_FIT;
-	} else if ("y".equalsIgnoreCase(ex)){
-	    i |= V_FIT;
-	} else if ("xy".equalsIgnoreCase(ex)){
-	    i |= H_FIT;
-	    i |= V_FIT;
-	}
-	alignmentTable.put(comp, getInteger(i));
-	invalidateLayout(comp.getParent());
-    }
-
-    /**
-     * @param comp the component of which you want to get "expand"
-     * @return	"x" | "y" | "xy" | ""
-     */
-    public String getExpand(Component comp){
-	Integer it = (Integer)alignmentTable.get(comp);
-	int i = this.align;
-	if (it != null){
-	    i = it.intValue();
-	}
-	if ((i & (H_FIT | V_FIT)) == (H_FIT | V_FIT)){
-	    return "xy";
-	}
-	if ((i & H_FIT) == H_FIT){
-	    return "x";
-	}
-	if ((i & V_FIT) == V_FIT){
-	    return "y";
-	}
-	return "";
-    }
-
-    /**
-     * @param comp the component of which you want to change alignment
-     * @param x	"padx" property
-     * @param y	"pady" property
-     */
-    public void setPadding(Component comp, int x, int y){
-	padTable.put(comp, new Object[]{getInteger(x), getInteger(y)});
-	invalidateLayout(comp.getParent());
-    }
-
-    /**
-     * @param comp the component of which you want to get "padx"
-     * @return the value of "padx" property
-     */
-    public int getPadX(Component comp){
-	Object[] pair = (Object[])padTable.get(comp);
-	if (pair != null){
-	    return ((Integer)pair[0]).intValue();
-	}
-	return 0;
-    }
-
-    /**
-     * @param comp the component of which you want to get "pady"
-     * @return the value of "pady" property
-     */
-    public int getPadY(Component comp){
-	Object[] pair = (Object[])padTable.get(comp);
-	if (pair != null){
-	    return ((Integer)pair[1]).intValue();
-	}
-	return 0;
-    }
- 
-    /**
-     * @param comp the component of which you want to change alignment
-     * @param x "ipadx" property
-     * @param y "ipady" property
-     */
-    public void setIPadding(Component comp, int x, int y){
-	iPadTable.put(comp, new Object[]{getInteger(x), getInteger(y)});
-	invalidateLayout(comp.getParent());
-    }
-
-    /**
-     * @param comp the component of which you want to get "ipadx"
-     * @return the value of "ipadx" property
-     */
-    public int getIPadX(Component comp){
-	Object[] pair = (Object[])iPadTable.get(comp);
-	if (pair != null){
-	    return ((Integer)pair[0]).intValue();
-	}
-	return 0;
-    }
-
-    /**
-     * @param comp the component of which you want to get "ipady"
-     * @return the value of "ipady" property
-     */
-    public int getIPadY(Component comp){
-	Object[] pair = (Object[])iPadTable.get(comp);
-	if (pair != null){
-	    return ((Integer)pair[1]).intValue();
-	}
-	return 0;
-    }
-
-    void clear(int[] array, int len){
-	int i = 0;
-	for (; i <= len - zero.length; i += zero.length){
-	    System.arraycopy(zero, 0, array, i, zero.length);
-	}
-	System.arraycopy(zero, 0, array, i, len - i);
-    }
-	
-   void bindContainer(Container target){
-
-	if (valid){
-	    return;
-	}
-
-	BitSet map[] = new BitSet[cols];
-	for (int i = 0; i < cols; i++){
-	    map[i] = new BitSet();
-	}
-
-	int nmembers = target.getComponentCount();
-
-	int _k = 0;
-	int _j = 0;
-	int _l = 0;
-
-	if (pos_x.length < nmembers){
-	    pos_x = new int[nmembers * 2];
-	}
-	if (pos_y.length < nmembers){
-	    pos_y = new int[nmembers * 2];
-	}
-
-	clear(pos_x, nmembers);
-	clear(pos_y, nmembers);
-
-	for (int i = 0; i < nmembers; i++){
-	    Component comp = target.getComponent(i);
-	    Object p[] = (Object[])spanTable.get(comp);
-	    int colspan = 1;
-	    int rowspan = 1;
-	    if (p != null){
-		colspan = ((Integer)p[0]).intValue();
-		rowspan = ((Integer)p[1]).intValue();
-	    }
-
-	    while (!fit(_j, _k, colspan, rowspan, map)){
-		if (++_j >= cols){
-		    _j = 0;
-		    ++_k;
-		}
-	    }
-	    pos_y[i] = _k;
-	    pos_x[i] = _j;
-
-	    for (int jj = 0; jj < colspan; jj++){
-		for (int kk = 0; kk < rowspan; kk++){
-		    map[_j + jj].set(_k + kk);
-		}
-	    }
-
-	    if (_l < _k + rowspan){
-		_l = _k + rowspan;
-	    }
-
-	    if (++_j >= cols){
-		_j = 0;
-		++_k;
-	    }
-	}
-	rows = _l;
-
-	grid_x = new int[cols + 1];
-	grid_y = new int[rows + 1];
-	widths = new int[cols];
-	heights = new int[rows];
-	vfit = new int[rows];
-	hfit = new int[cols];
-	int wmax = 0;
-	int hmax = 0;
-
-	for (int i = 0, j = 0, k = 0; i < nmembers; i++){
-	    Component m = target.getComponent(i);
-	    Dimension d = m.getPreferredSize();
-	    int d_width = d.width;
-	    int d_height = d.height;
-	    Object[] ip = (Object[])iPadTable.get(m);
-	    if (ip != null){
-		d_width = d.width + ((Integer)ip[0]).intValue();
-		d_height = d.height + ((Integer)ip[1]).intValue();
-	    }
-
-	    Object pd[] = (Object[])padTable.get(m);
-	    int px = padx;
-	    int py = pady;
-	    if (pd != null){
-		px = ((Integer)pd[0]).intValue();
-		py = ((Integer)pd[1]).intValue();
-	    }
-
-	    k = pos_y[i];
-	    j = pos_x[i];
-
-	    int colspan = 1;
-	    int rowspan = 1;
-	    Object p[] = (Object[])spanTable.get(m);
-	    if (p != null){
-	      colspan = ((Integer)p[0]).intValue();
-	      rowspan = ((Integer)p[1]).intValue();
-	    }
-	    
-	    int wc = 0;
-	    for (int ii = 0; ii < colspan; ii++){
-	      wc += widths[j + ii];
-	    }
-
- 	    if (wc < d_width + px * 2){
-	      for (int ii = 0; ii < colspan; ii++){
-		widths[j + ii] += (d_width + px * 2 - wc) / colspan;
-		if (xfix){
-		    if (wmax < widths[j + ii]){
-			wmax = widths[j + ii];
-		    }
-		}
-	      }
-	    }
-
-	    if (heights[k] < (d_height + py * 2) / rowspan){
-	      heights[k] = (d_height + py * 2) / rowspan;
-	      if (yfix){
-		  if (hmax < heights[k]){
-		      hmax = heights[k];
-		  }
-	      }
-	    }
-
-	    Object val = alignmentTable.get(m);
-	    int al = this.align;
-	    if (val != null && val instanceof Integer){
-		al = ((Integer)val).intValue();
-	    }
-
-	    if ((al & H_FIT) != 0){
-		for (int ii = 0; ii < colspan; ii++){
-		    hfit[j + ii] |= 1;
-		}
-	    }
-	    if ((al & V_FIT) != 0){
-		for (int ii = 0; ii < rowspan; ii++){
-		    vfit[k + ii] |= 1;
-		}
-	    }
-
-	    j += colspan;
-	    if (j >= cols){
-	      j = 0;
-	      k++;
-	    }
-	}
-
-	if (xfix){
-	    for (int _m = 0; _m < cols; _m++){
-		widths[_m] = wmax;
-		//		hfit[_m] = 1;
-	    }
-	}
-	if (yfix){
-	    for (int _m = 0; _m < rows; _m++){
-		heights[_m] = hmax;
-		//		vfit[_m] = 1;
-	    }
-	}
-
-	int w = 0;
-	int h = 0;
-
-	for (int j = 0 ; j < cols ; j++) {
-	    w += widths[j];
-	}
-	for (int j = 0 ; j < rows ; j++) {
-	    h += heights[j];
-	}
-
-	hfits = 0;
-	for (int i = 0; i < hfit.length; i++){
-	    if ((hfit[i] & 1) != 0){
-		hfits++;
-	    }
-	}
-	vfits = 0;
-	for (int i = 0; i < vfit.length; i++){
-	    if ((vfit[i] & 1) != 0){
-		vfits++;
-	    }
-	}
-
-	Insets insets = target.getInsets();
-	w += insets.left + insets.right + padx * cols;
-	h += insets.top + insets.bottom + pady * rows;
-	psize = new Dimension(w, h);
-
-	valid = true;
-    }
-
-    /**
-     * Returns the preferred dimensions for this layout given the components
-     * in the specified target container.
-     * @param target the component which needs to be laid out
-     * @see Container
-     * @see #minimumLayoutSize
-     */
-    public Dimension preferredLayoutSize(Container target) {
-	bindContainer(target);
-	return psize;
-    }
-
-    /**
-     * Returns the minimum dimensions needed to layout the components
-     * contained in the specified target container.
-     * @param target the component which needs to be laid out 
-     * @see #preferredLayoutSize
-     */
-    public Dimension minimumLayoutSize(Container target) {
-	return preferredLayoutSize(target);
-    }
-
-    /**
-     * Lays out the container. This method will actually reshape the
-     * components in the target in order to satisfy the constraints of
-     * the BorderLayout object. 
-     * @param target the specified component being laid out.
-     * @see Container
-     */
-    public void layoutContainer(Container target) {
-	Insets insets = target.getInsets();
-	int nmembers = target.getComponentCount();
-	bindContainer(target);
-
-	int tw = target.getSize().width;
-	int th = target.getSize().height;
-	int pw = psize.width;
-	int ph = psize.height;
-	int aw = 0;
-	int ah = 0;
-
-	if (hfits > 0){
-	    aw = (tw - pw) / hfits;
-	}
-	if (vfits > 0){
-	    ah = (th - ph) / vfits;
-	}
-
-	int h = insets.top;
-	int w = insets.left;
-
-	grid_x[0] = w;
-
-	for (int i = 1; i <= cols; i++){
-	    grid_x[i] = grid_x[i - 1] + widths[i - 1] + padx;
-	    if ((hfit[i - 1] & 1) != 0){
-		grid_x[i] += aw;
-	    }
-	}
-
-	grid_y[0] = h;
-
-	for (int i = 1; i <= rows; i++){
-	    grid_y[i] = grid_y[i - 1] + heights[i - 1] + pady;
-	    if ((vfit[i - 1] & 1) != 0){
-		grid_y[i] += ah;
-	    }
-	}
-
-	for (int i = 0, j = 0, k = 0; i < nmembers; i++){
-	    Component m = target.getComponent(i);
-	    Dimension d = m.getPreferredSize();
-	    int d_width = d.width;
-	    int d_height = d.height;
-	    Object[] ip = (Object[])iPadTable.get(m);
-	    if (ip != null){
-		d_width = d.width + ((Integer)ip[0]).intValue();
-		d_height = d.height + ((Integer)ip[1]).intValue();
-	    }
-
-	    k = pos_y[i];
-	    j = pos_x[i];
-
-	    int colspan = 1;
-	    int rowspan = 1;
-	    Object p[] = (Object[])spanTable.get(m);
-	    if (p != null){
-	      colspan = ((Integer)p[0]).intValue();
-	      rowspan = ((Integer)p[1]).intValue();
-	    }
-
-	    int al = this.align;
-	    Object val = alignmentTable.get(m);
-	    if (val != null && (val instanceof Integer)){
-	        al = ((Integer)val).intValue();
-	    }
-	    int x, y;
-
-	    int dw = d_width;
-	    int dh = d_height;
-
-	    Object pt[] = (Object[])padTable.get(m);
-	    int px = padx;
-	    int py = pady;
-	    if (pt != null){
-		px = ((Integer)pt[0]).intValue();
-		py = ((Integer)pt[1]).intValue();
-	    }
-
-	    if ((al & LEFT) != 0){
-		x = grid_x[j] + px;
-		//		if ((al & RIGHT) != 0 && (al & H_FIT) != 0){
-		if ((al & RIGHT) != 0){
-		    dw =  grid_x[j + colspan] - grid_x[j] - px * 2;
-		}
-	    } else if ((al & RIGHT) != 0){
-		x = grid_x[j + colspan] - dw - px;
-	    } else {
-		x = (grid_x[j] + grid_x[j + colspan] - dw) / 2;
-	    }
-
-	    if ((al & TOP) != 0){
-		y = grid_y[k] + py;
-		//	        if ((al & BOTTOM) != 0 && (al & V_FIT) != 0){
-	        if ((al & BOTTOM) != 0){
-		    dh = grid_y[k + rowspan] - grid_y[k] - py * 2;
-		}
-	    } else if ((al & BOTTOM) != 0){
-		y = grid_y[k + rowspan] - dh -  py;
-	    } else {
-		y = (grid_y[k] + grid_y[k + rowspan] - dh) / 2;
-	    }
-
-	    m.setBounds(x, y, dw, dh);
-	}
-    }
-
-    boolean fit(int x, int y, int c, int r, BitSet[] map){
-	for (int i = 0; i < c; i++){
-	    for (int j = 0; j < r; j++){
-		if (x + i >= cols){
-		    return false;
-		}
-		if (map[x + i].get(y + j)){
-		    return false;
-		}
-	    }
-	}
-	return true;
-    }
-
-    static Hashtable str2table(String str){
-	Hashtable table = new Hashtable();
-	StringTokenizer st = new StringTokenizer(str, ",");
-	while (st.hasMoreTokens()){
-	    String t = st.nextToken();
-	    StringTokenizer st2 = new StringTokenizer(t, "= ");
-	    String key = st2.nextToken();
-	    String value = st2.nextToken();
-	    table.put(key, value);
-	}
-	return table;
-    }
-
-    /**
-     * Get the number of columns
-     *
-     * @return	the number of columns
-     */
-    public int getCols(){
-	return cols;
-    }
-
-    /**
-     * get the number of rows
-     *
-     * @return	the number of rows
-     */
-    public int getRows(){
-	if (!valid){
-	    throw new RuntimeException("PnutsLayout not valid");
-	}
-	return rows;
-    }
-
-    /**
-     * get left-top point of the component(x,y)
-     *
-     * @param	x	the index of column
-     * @param	y	the index of row
-     * @return  left-top point of the component
-     */
-    public Point getGridPoint(Container target, int x, int y){
-	if (!valid){
-	    return null;
-	}
-	return new Point(grid_x[x], grid_y[y]);
-    }
-
-    /**
-     * get bounding-box for idx'th component
-     *
-     * @param	idx	the index of the component
-     * @return  bounding-box as Rectangle object
-     */
-    public Rectangle getGridRectangle(Container target, int idx){
-	if (!valid){
-	    return null;
-	}
-	int x = pos_x[idx];
-	int y = pos_y[idx];
-	int gx = grid_x[x];
-	int gy = grid_y[y];
-	Object s[] = (Object[])spanTable.get(target.getComponent(idx));
-	int sx = 1;
-	int sy = 1;
-	if (s != null){
-	    sx = ((Integer)s[0]).intValue();
-	    sy = ((Integer)s[1]).intValue();
-	}
-	return new Rectangle(gx, gy, grid_x[x + sx] - gx, grid_y[y + sy] - gy);
-    }
-    
-    /**
-     * @return the String representation of this PnutsLayout's values.
-     */
-    public String toString() {
-	return getClass().getName() +
-	  "[cols=" + cols + ",padx=" + padx + ",pady=" + pady + ",ipadx=" + ipadx + ",ipady=" + ipady + "]";
-    }
-}
diff --git a/src/main/java/jas/util/xml/XMLCharacterProperties.java b/src/main/java/jas/util/xml/XMLCharacterProperties.java
deleted file mode 100644
index c12faeb..0000000
--- a/src/main/java/jas/util/xml/XMLCharacterProperties.java
+++ /dev/null
@@ -1,522 +0,0 @@
-// Borrowed from Apache so that we can use an XMLWriter without using Xerces
-/*
- * The Apache Software License, Version 1.1
- *
- *
- * Copyright (c) 1999 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Xerces" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache at apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation and was
- * originally based on software copyright (c) 1999, International
- * Business Machines, Inc., http://www.apache.org.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package jas.util.xml;
-
-// package org.apache.xerces.utils;
-
-/**
- * A class representing properties of characters according to various
- * W3C recommendations
- *
- * XMLCharacterProperties provides convenience methods for commonly used
- * character tests.
- *
- * For performance reasons, the tables used by the convenience methods are
- * also public, and are directly accessed by performance critical routines.
- *
- */
-
-public final class XMLCharacterProperties {
-    /*
-     * [26] VersionNum ::= ([a-zA-Z0-9_.:] | '-')+
-     *
-     * Note: This is the same as the ascii portion of the
-     *       NameChar definition.
-     */
-    /**
-     * Check to see if a string is a valid version string according to
-     * [26] in the XML 1.0 Recommendation
-     *
-     * @param version string to check
-     * @return true if version is a valid version string
-     */
-    public static boolean validVersionNum(String version) {
-        int len = version.length();
-        if (len == 0)
-            return false;
-        for (int i = 0; i < len; i++) {
-            char ch = version.charAt(i);
-            if (ch > 'z' || fgAsciiNameChar[ch] == 0)
-                return false;
-        }
-        return true;
-    }
-    /*
-     * [81] EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')*
-     */
-    /**
-     * Check to see if a string is a valid encoding name according to [81]
-     * in the XML 1.0 Recommendation
-     *
-     * @param encoding string to check
-     * @return true if encoding is a valid encoding name
-     */
-    public static boolean validEncName(String encoding) {
-        int len = encoding.length();
-        if (len == 0)
-            return false;
-        char ch = encoding.charAt(0);
-        if (ch > 'z' || fgAsciiAlphaChar[ch] == 0)
-            return false;
-        for (int i = 1; i < len; i++) {
-            ch = encoding.charAt(i);
-            if (ch > 'z' || fgAsciiEncNameChar[ch] == 0)
-                return false;
-        }
-        return true;
-    }
-    /*
-     * [13] PubidChar ::= #x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%]
-     */
-    /**
-     * Check to see if a string is a valid public identifier according to [13]
-     * in the XML 1.0 Recommendation
-     *
-     * @param publicId string to check
-     * @return true if publicId is a valid public identifier
-     */
-    public static int validPublicId(String publicId) {
-        int len = publicId.length();
-        if (len == 0)
-            return -1;
-        for (int i = 0; i < len; i++) {
-            char ch = publicId.charAt(i);
-            if (ch > 'z' || fgAsciiPubidChar[ch] == 0)
-                return i;
-        }
-        return -1;
-    }
-    /*
-     * [5] Name ::= (Letter | '_' | ':') (NameChar)*
-     */
-    /**
-     * Check to see if a string is a valid Name according to [5]
-     * in the XML 1.0 Recommendation
-     *
-     * @param name string to check
-     * @return true if name is a valid Name
-     */
-    public static boolean validName(String name) {
-        int len = name.length();
-        if (len == 0)
-            return false;
-        char ch = name.charAt(0);
-        if (ch > 'z') {
-            if ((fgCharFlags[ch] & E_InitialNameCharFlag) == 0)
-                return false;
-        } else if (fgAsciiInitialNameChar[ch] == 0)
-            return false;
-        for (int i = 1; i < len; i++) {
-            ch = name.charAt(i);
-            if (ch > 'z') {
-                if ((fgCharFlags[ch] & E_NameCharFlag) == 0)
-                    return false;
-            } else if (fgAsciiNameChar[ch] == 0)
-                return false;
-        }
-        return true;
-    }
-
-    /*
-     * from the namespace rec
-     * [4] NCName ::= (Letter | '_') (NCNameChar)*
-     */
-    /**
-     * Check to see if a string is a valid NCName according to [4]
-     * from the XML Namespaces 1.0 Recommendation
-     *
-     * @param name string to check
-     * @return true if name is a valid NCName
-     */
-    public static boolean validNCName(String name) {
-        int len = name.length();
-        if (len == 0)
-            return false;
-        char ch = name.charAt(0);
-        if (ch > 'z') {
-            if ((fgCharFlags[ch] & E_InitialNameCharFlag) == 0)
-                return false;
-        } else if (fgAsciiInitialNCNameChar[ch] == 0)
-            return false;
-        for (int i = 1; i < len; i++) {
-            ch = name.charAt(i);
-            if (ch > 'z') {
-                if ((fgCharFlags[ch] & E_NameCharFlag) == 0)
-                    return false;
-            } else if (fgAsciiNCNameChar[ch] == 0)
-                return false;
-        }
-        return true;
-    }
-
-
-    /*
-     * [7] Nmtoken ::= (NameChar)+
-     */
-    /**
-     * Check to see if a string is a valid Nmtoken according to [7]
-     * in the XML 1.0 Recommendation
-     *
-     * @param nmtoken string to checj
-     * @return true if nmtoken is a valid Nmtoken
-     */
-    public static boolean validNmtoken(String nmtoken) {
-        int len = nmtoken.length();
-        if (len == 0)
-            return false;
-        for (int i = 0; i < len; i++) {
-            char ch = nmtoken.charAt(i);
-            if (ch > 'z') {
-                if ((fgCharFlags[ch] & E_NameCharFlag) == 0)
-                    return false;
-            } else if (fgAsciiNameChar[ch] == 0) {
-                return false;
-            }
-        }
-        return true;
-    }
-    /*
-     * Here are tables used to build character properties.
-     */
-    public static final byte fgAsciiXDigitChar[] = {
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, // '0' - '9'
-        0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 'A' - 'F'
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 'a' - 'f'
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-    };
-    public static final byte fgAsciiAlphaChar[] = {
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 'A' - 'O'
-        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, // 'P' - 'Z'
-        0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 'a' - 'o'
-        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0  // 'p' - 'z'
-    };
-    public static final byte fgAsciiEncNameChar[] = {
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, // '-' is 0x2D and '.' is 0x2E
-        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, // '0' - '9'
-        0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 'A' - 'O'
-        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, // 'P' - 'Z' and '_' is 0x5F
-        0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 'a' - 'o'
-        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0  // 'p' - 'z'
-    };
-    public static final byte fgAsciiPubidChar[] = {
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, // ' ', '!', '#', '$', '%',
-                                                        // '\'', '(', ')', '*', '+', ',', '-', '.', '/'
-        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, // '0' - '9', ':', ';', '=', '?'
-        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // '@', 'A' - 'O'
-        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, // 'P' - 'Z' and '_' is 0x5F
-        0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 'a' - 'o'
-        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0  // 'p' - 'z'
-    };
-    public static final byte fgAsciiInitialNameChar[] = {
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, // ':' is 0x3A
-        0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 'A' - 'O'
-        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, // 'P' - 'Z' and '_' is 0x5F
-        0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 'a' - 'o'
-        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0  // 'p' - 'z'
-    };
-    public static final byte fgAsciiNameChar[] = {
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, // '-' is 0x2D and '.' is 0x2E
-        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, // '0' - '9' and ':' is 0x3A
-        0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 'A' - 'O'
-        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, // 'P' - 'Z' and '_' is 0x5F
-        0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 'a' - 'o'
-        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0  // 'p' - 'z'
-    };
-    public static final byte fgAsciiInitialNCNameChar[] = {
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // ':' is 0x3A
-        0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 'A' - 'O'
-        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, // 'P' - 'Z' and '_' is 0x5F
-        0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 'a' - 'o'
-        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0  // 'p' - 'z'
-    };
-    public static final byte fgAsciiNCNameChar[] = {
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, // '-' is 0x2D and '.' is 0x2E
-        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, // '0' - '9' and ':' is 0x3A
-        0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 'A' - 'O'
-        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, // 'P' - 'Z' and '_' is 0x5F
-        0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 'a' - 'o'
-        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0  // 'p' - 'z'
-    };
-    public static final byte fgAsciiCharData[] = {
-        4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, // tab is 0x09
-        4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-        0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, // '&' is 0x26
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, // '<' is 0x3C
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, // ']' is 0x5D
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-    };
-    public static final byte fgAsciiWSCharData[] = {
-        4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 4, 4, 5, 4, 4, // tab is 0x09,  LF is 0x0A,  CR is 0x0D
-        4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-        5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, // ' ' is 0x20, '&' is 0x26
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, // '<' is 0x3C
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, // ']' is 0x5D
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-    };
-    public static final byte E_CharDataFlag = 1<<0;
-    public static final byte E_InitialNameCharFlag = 1<<1;
-    public static final byte E_NameCharFlag = 1<<2;
-    public static byte[] fgCharFlags = null;
-    public static synchronized void initCharFlags() {
-        if (fgCharFlags == null) {
-            fgCharFlags = new byte[0x10000];
-            setFlagForRange(fgCharDataRanges, E_CharDataFlag);
-            setFlagForRange(fgInitialNameCharRanges, (byte)(E_InitialNameCharFlag | E_NameCharFlag));
-            setFlagForRange(fgNameCharRanges, E_NameCharFlag);
-        }
-    }
-    private static void setFlagForRange(char[] ranges, byte flag)
-    {
-        int i;
-        int ch;
-        for (i = 0; (ch = ranges[i]) != 0; i += 2) {
-            int endch = ranges[i+1];
-            while (ch <= endch)
-                fgCharFlags[ch++] |= flag;
-        }
-        for (i++; (ch = ranges[i]) != 0; i++)
-            fgCharFlags[ch] |= flag;
-    }
-    /*
-     *  [2] Char ::= #x9 | #xA | #xD | [#x20-#xD7FF]        // any Unicode character, excluding the
-     *               | [#xE000-#xFFFD] | [#x10000-#x10FFFF] // surrogate blocks, FFFE, and FFFF.
-     * [14] CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*)
-     *
-     * We will use Char - ( [^<&] | ']' | #xA | #xD ) and handle the special cases inline.
-     */
-    private static final char fgCharDataRanges[] = {
-        0x0020, 0x0025, // '&' is 0x0026
-        0x0027, 0x003B, // '<' is 0x003C
-        0x003D, 0x005C, // ']' is 0x005D
-        0x005E, 0xD7FF,
-        0xE000, 0xFFFD,
-            0x0000,
-        0x0009,         // tab
-            0x0000
-    };
-    /*
-     *  [5] Name ::= (Letter | '_' | ':') (NameChar)*
-     *  [4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' | CombiningChar | Extender
-     * [84] Letter ::= BaseChar | Ideographic
-     * [85] BaseChar ::= <see standard>
-     * [86] Ideographic ::= <see standard>
-     * [87] CombiningChar ::= <see standard>
-     * [88] Digit ::= <see standard>
-     * [89] Extender ::= <see standard>
-     */
-    private static final char fgInitialNameCharRanges[] = {
-        //
-        // Ranges:
-        //
-        //  BaseChar ranges
-        //
-        0x0041, 0x005A, 0x0061, 0x007A, 0x00C0, 0x00D6, 0x00D8, 0x00F6,
-        0x00F8, 0x0131, 0x0134, 0x013E, 0x0141, 0x0148, 0x014A, 0x017E,
-        0x0180, 0x01C3, 0x01CD, 0x01F0, 0x01F4, 0x01F5, 0x01FA, 0x0217,
-        0x0250, 0x02A8, 0x02BB, 0x02C1, 0x0388, 0x038A, 0x038E, 0x03A1,
-        0x03A3, 0x03CE, 0x03D0, 0x03D6, 0x03E2, 0x03F3, 0x0401, 0x040C,
-        0x040E, 0x044F, 0x0451, 0x045C, 0x045E, 0x0481, 0x0490, 0x04C4,
-        0x04C7, 0x04C8, 0x04CB, 0x04CC, 0x04D0, 0x04EB, 0x04EE, 0x04F5,
-        0x04F8, 0x04F9, 0x0531, 0x0556, 0x0561, 0x0586, 0x05D0, 0x05EA,
-        0x05F0, 0x05F2, 0x0621, 0x063A, 0x0641, 0x064A, 0x0671, 0x06B7,
-        0x06BA, 0x06BE, 0x06C0, 0x06CE, 0x06D0, 0x06D3, 0x06E5, 0x06E6,
-        0x0905, 0x0939, 0x0958, 0x0961, 0x0985, 0x098C, 0x098F, 0x0990,
-        0x0993, 0x09A8, 0x09AA, 0x09B0, 0x09B6, 0x09B9, 0x09DC, 0x09DD,
-        0x09DF, 0x09E1, 0x09F0, 0x09F1, 0x0A05, 0x0A0A, 0x0A0F, 0x0A10,
-        0x0A13, 0x0A28, 0x0A2A, 0x0A30, 0x0A32, 0x0A33, 0x0A35, 0x0A36,
-        0x0A38, 0x0A39, 0x0A59, 0x0A5C, 0x0A72, 0x0A74, 0x0A85, 0x0A8B,
-        0x0A8F, 0x0A91, 0x0A93, 0x0AA8, 0x0AAA, 0x0AB0, 0x0AB2, 0x0AB3,
-        0x0AB5, 0x0AB9, 0x0B05, 0x0B0C, 0x0B0F, 0x0B10, 0x0B13, 0x0B28,
-        0x0B2A, 0x0B30, 0x0B32, 0x0B33, 0x0B36, 0x0B39, 0x0B5C, 0x0B5D,
-        0x0B5F, 0x0B61, 0x0B85, 0x0B8A, 0x0B8E, 0x0B90, 0x0B92, 0x0B95,
-        0x0B99, 0x0B9A, 0x0B9E, 0x0B9F, 0x0BA3, 0x0BA4, 0x0BA8, 0x0BAA,
-        0x0BAE, 0x0BB5, 0x0BB7, 0x0BB9, 0x0C05, 0x0C0C, 0x0C0E, 0x0C10,
-        0x0C12, 0x0C28, 0x0C2A, 0x0C33, 0x0C35, 0x0C39, 0x0C60, 0x0C61,
-        0x0C85, 0x0C8C, 0x0C8E, 0x0C90, 0x0C92, 0x0CA8, 0x0CAA, 0x0CB3,
-        0x0CB5, 0x0CB9, 0x0CE0, 0x0CE1, 0x0D05, 0x0D0C, 0x0D0E, 0x0D10,
-        0x0D12, 0x0D28, 0x0D2A, 0x0D39, 0x0D60, 0x0D61, 0x0E01, 0x0E2E,
-        0x0E32, 0x0E33, 0x0E40, 0x0E45, 0x0E81, 0x0E82, 0x0E87, 0x0E88,
-        0x0E94, 0x0E97, 0x0E99, 0x0E9F, 0x0EA1, 0x0EA3, 0x0EAA, 0x0EAB,
-        0x0EAD, 0x0EAE, 0x0EB2, 0x0EB3, 0x0EC0, 0x0EC4, 0x0F40, 0x0F47,
-        0x0F49, 0x0F69, 0x10A0, 0x10C5, 0x10D0, 0x10F6, 0x1102, 0x1103,
-        0x1105, 0x1107, 0x110B, 0x110C, 0x110E, 0x1112, 0x1154, 0x1155,
-        0x115F, 0x1161, 0x116D, 0x116E, 0x1172, 0x1173, 0x11AE, 0x11AF,
-        0x11B7, 0x11B8, 0x11BC, 0x11C2, 0x1E00, 0x1E9B, 0x1EA0, 0x1EF9,
-        0x1F00, 0x1F15, 0x1F18, 0x1F1D, 0x1F20, 0x1F45, 0x1F48, 0x1F4D,
-        0x1F50, 0x1F57, 0x1F5F, 0x1F7D, 0x1F80, 0x1FB4, 0x1FB6, 0x1FBC,
-        0x1FC2, 0x1FC4, 0x1FC6, 0x1FCC, 0x1FD0, 0x1FD3, 0x1FD6, 0x1FDB,
-        0x1FE0, 0x1FEC, 0x1FF2, 0x1FF4, 0x1FF6, 0x1FFC, 0x212A, 0x212B,
-        0x2180, 0x2182, 0x3041, 0x3094, 0x30A1, 0x30FA, 0x3105, 0x312C,
-        0xAC00, 0xD7A3,
-        //
-        //  Ideographic ranges
-        //
-        0x3021, 0x3029, 0x4E00, 0x9FA5,
-        //
-        // Ranges end marker
-        //
-        0x0000,
-        //
-        // Single char values
-        //
-        0x003A, // ':'
-        0x005F, // '_'
-        //
-        //  BaseChar singles
-        //
-        0x0386, 0x038C, 0x03DA, 0x03DC, 0x03DE, 0x03E0, 0x0559, 0x06D5,
-        0x093D, 0x09B2, 0x0A5E, 0x0A8D, 0x0ABD, 0x0AE0, 0x0B3D, 0x0B9C,
-        0x0CDE, 0x0E30, 0x0E84, 0x0E8A, 0x0E8D, 0x0EA5, 0x0EA7, 0x0EB0,
-        0x0EBD, 0x1100, 0x1109, 0x113C, 0x113E, 0x1140, 0x114C, 0x114E,
-        0x1150, 0x1159, 0x1163, 0x1165, 0x1167, 0x1169, 0x1175, 0x119E,
-        0x11A8, 0x11AB, 0x11BA, 0x11EB, 0x11F0, 0x11F9, 0x1F59, 0x1F5B,
-        0x1F5D, 0x1FBE, 0x2126, 0x212E,
-        //
-        //  Ideographic singles
-        //
-        0x3007,
-        //
-        // Singles end marker
-        //
-        0x0000
-    };
-    private static final char fgNameCharRanges[] = {
-        //
-        // Ranges:
-        //
-        0x002D, 0x002E, // '-' and '.'
-        //
-        //  CombiningChar ranges
-        //
-        0x0300, 0x0345, 0x0360, 0x0361, 0x0483, 0x0486, 0x0591, 0x05A1,
-        0x05A3, 0x05B9, 0x05BB, 0x05BD, 0x05C1, 0x05C2, 0x064B, 0x0652,
-        0x06D6, 0x06DC, 0x06DD, 0x06DF, 0x06E0, 0x06E4, 0x06E7, 0x06E8,
-        0x06EA, 0x06ED, 0x0901, 0x0903, 0x093E, 0x094C, 0x0951, 0x0954,
-        0x0962, 0x0963, 0x0981, 0x0983, 0x09C0, 0x09C4, 0x09C7, 0x09C8,
-        0x09CB, 0x09CD, 0x09E2, 0x09E3, 0x0A40, 0x0A42, 0x0A47, 0x0A48,
-        0x0A4B, 0x0A4D, 0x0A70, 0x0A71, 0x0A81, 0x0A83, 0x0ABE, 0x0AC5,
-        0x0AC7, 0x0AC9, 0x0ACB, 0x0ACD, 0x0B01, 0x0B03, 0x0B3E, 0x0B43,
-        0x0B47, 0x0B48, 0x0B4B, 0x0B4D, 0x0B56, 0x0B57, 0x0B82, 0x0B83,
-        0x0BBE, 0x0BC2, 0x0BC6, 0x0BC8, 0x0BCA, 0x0BCD, 0x0C01, 0x0C03,
-        0x0C3E, 0x0C44, 0x0C46, 0x0C48, 0x0C4A, 0x0C4D, 0x0C55, 0x0C56,
-        0x0C82, 0x0C83, 0x0CBE, 0x0CC4, 0x0CC6, 0x0CC8, 0x0CCA, 0x0CCD,
-        0x0CD5, 0x0CD6, 0x0D02, 0x0D03, 0x0D3E, 0x0D43, 0x0D46, 0x0D48,
-        0x0D4A, 0x0D4D, 0x0E34, 0x0E3A, 0x0E47, 0x0E4E, 0x0EB4, 0x0EB9,
-        0x0EBB, 0x0EBC, 0x0EC8, 0x0ECD, 0x0F18, 0x0F19, 0x0F71, 0x0F84,
-        0x0F86, 0x0F8B, 0x0F90, 0x0F95, 0x0F99, 0x0FAD, 0x0FB1, 0x0FB7,
-        0x20D0, 0x20DC, 0x302A, 0x302F,
-        //
-        //  Digit ranges
-        //
-        0x0030, 0x0039, 0x0660, 0x0669, 0x06F0, 0x06F9, 0x0966, 0x096F,
-        0x09E6, 0x09EF, 0x0A66, 0x0A6F, 0x0AE6, 0x0AEF, 0x0B66, 0x0B6F,
-        0x0BE7, 0x0BEF, 0x0C66, 0x0C6F, 0x0CE6, 0x0CEF, 0x0D66, 0x0D6F,
-        0x0E50, 0x0E59, 0x0ED0, 0x0ED9, 0x0F20, 0x0F29,
-        //
-        //  Extender ranges
-        //
-        0x3031, 0x3035, 0x309D, 0x309E, 0x30FC, 0x30FE,
-        //
-        // Ranges end marker
-        //
-        0x0000,
-        //
-        // Single char values
-        //
-        //  CombiningChar singles
-        //
-        0x05BF, 0x05C4, 0x0670, 0x093C, 0x094D, 0x09BC, 0x09BE, 0x09BF,
-        0x09D7, 0x0A02, 0x0A3C, 0x0A3E, 0x0A3F, 0x0ABC, 0x0B3C, 0x0BD7,
-        0x0D57, 0x0E31, 0x0EB1, 0x0F35, 0x0F37, 0x0F39, 0x0F3E, 0x0F3F,
-        0x0F97, 0x0FB9, 0x20E1, 0x3099, 0x309A,
-        //
-        //  Extender singles
-        //
-        0x00B7, 0x02D0, 0x02D1, 0x0387, 0x0640, 0x0E46, 0x0EC6, 0x3005,
-        //
-        // Singles end marker
-        //
-        0x0000
-    };
-}


hooks/post-receive
-- 
JAS(2) Plotter



More information about the pkg-java-commits mailing list