deweese 01/11/14 12:03:32 Modified: sources/org/apache/batik/bridge BridgeContext.java SVGUseElementBridge.java URIResolver.java sources/org/apache/batik/dom/util XLinkSupport.java sources/org/apache/batik/gvt/renderer StrokingTextPainter.java sources/org/apache/batik/parser AngleParser.java LengthListParser.java LengthParser.java NumberParser.java PathParser.java PointsParser.java TransformListParser.java Log: 1) New float parser that is much faster than Float.parseFloat(...) [it isn't quite as accurate in a small number of cases it may give different results]. 2) Better error reporting on use (correctly identifies a missing xlink:href, and when an href doesn't point at an element - used to say it points at a document). 3) Few small changes to help Fop. Revision Changes Path 1.30 +2 -2 xml-batik/sources/org/apache/batik/bridge/BridgeContext.java Index: BridgeContext.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/BridgeContext.java,v retrieving revision 1.29 retrieving revision 1.30 diff -u -r1.29 -r1.30 --- BridgeContext.java 2001/10/09 22:17:10 1.29 +++ BridgeContext.java 2001/11/14 20:03:31 1.30 @@ -45,7 +45,7 @@ * a SVG DOM tree such as the current viewport or the user agent. * * @author <a href="mailto:[EMAIL PROTECTED]">Thierry Kormann</a> - * @version $Id: BridgeContext.java,v 1.29 2001/10/09 22:17:10 deweese Exp $ + * @version $Id: BridgeContext.java,v 1.30 2001/11/14 20:03:31 deweese Exp $ */ public class BridgeContext implements ErrorConstants { @@ -272,7 +272,7 @@ URIResolver ur = new URIResolver(document, documentLoader); Element ref = ur.getElement(uri, e); if (ref == null) { - throw new BridgeException(e, ERR_URI_REFERENCE_A_DOCUMENT, + throw new BridgeException(e, ERR_URI_BAD_TARGET, new Object[] {uri}); } else { return ref; 1.14 +5 -1 xml-batik/sources/org/apache/batik/bridge/SVGUseElementBridge.java Index: SVGUseElementBridge.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGUseElementBridge.java,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- SVGUseElementBridge.java 2001/11/13 15:20:58 1.13 +++ SVGUseElementBridge.java 2001/11/14 20:03:31 1.14 @@ -33,7 +33,7 @@ * Bridge class for the <use> element. * * @author <a href="mailto:[EMAIL PROTECTED]">Thierry Kormann</a> - * @version $Id: SVGUseElementBridge.java,v 1.13 2001/11/13 15:20:58 tkormann Exp $ + * @version $Id: SVGUseElementBridge.java,v 1.14 2001/11/14 20:03:31 deweese Exp $ */ public class SVGUseElementBridge extends AbstractSVGBridge implements GraphicsNodeBridge, ErrorConstants { @@ -65,6 +65,10 @@ // get the referenced element String uri = XLinkSupport.getXLinkHref(e); + if (uri.length() == 0) + throw new BridgeException(e, ERR_URI_MALFORMED, + new Object[] {uri}); + Element refElement = ctx.getReferencedElement(e, uri); SVGOMDocument document = (SVGOMDocument)e.getOwnerDocument(); 1.14 +2 -2 xml-batik/sources/org/apache/batik/bridge/URIResolver.java Index: URIResolver.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/URIResolver.java,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- URIResolver.java 2001/10/24 14:52:36 1.13 +++ URIResolver.java 2001/11/14 20:03:31 1.14 @@ -28,7 +28,7 @@ * This class is used to resolve the URI that can be found in a SVG document. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: URIResolver.java,v 1.13 2001/10/24 14:52:36 tkormann Exp $ + * @version $Id: URIResolver.java,v 1.14 2001/11/14 20:03:31 deweese Exp $ */ public class URIResolver { /** @@ -113,7 +113,7 @@ // pDocURL.getPort() + " - " + // pDocURL.getHost() + " - " + // pDocURL.getProtocol()); - + // Check if the rest of the URL matches... // if so then return the referenced element. 1.2 +2 -2 xml-batik/sources/org/apache/batik/dom/util/XLinkSupport.java Index: XLinkSupport.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/dom/util/XLinkSupport.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- XLinkSupport.java 2000/10/10 18:39:31 1.1 +++ XLinkSupport.java 2001/11/14 20:03:32 1.2 @@ -15,7 +15,7 @@ * This class provides support for XLink features. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: XLinkSupport.java,v 1.1 2000/10/10 18:39:31 hillion Exp $ + * @version $Id: XLinkSupport.java,v 1.2 2001/11/14 20:03:32 deweese Exp $ */ public class XLinkSupport { /** @@ -129,7 +129,7 @@ * Returns the value of the 'xlink:href' attribute of the given element. */ public static String getXLinkHref(Element elt) { - return elt.getAttributeNS(XLINK_NAMESPACE_URI, "href"); + return elt.getAttributeNS(XLINK_NAMESPACE_URI, "href"); } /** 1.22 +3 -3 xml-batik/sources/org/apache/batik/gvt/renderer/StrokingTextPainter.java Index: StrokingTextPainter.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/gvt/renderer/StrokingTextPainter.java,v retrieving revision 1.21 retrieving revision 1.22 diff -u -r1.21 -r1.22 --- StrokingTextPainter.java 2001/11/09 15:32:57 1.21 +++ StrokingTextPainter.java 2001/11/14 20:03:32 1.22 @@ -60,7 +60,7 @@ * @see org.apache.batik.gvt.text.GVTAttributedCharacterIterator * * @author <a href="[EMAIL PROTECTED]>Bill Haneman</a> - * @version $Id: StrokingTextPainter.java,v 1.21 2001/11/09 15:32:57 deweese Exp $ + * @version $Id: StrokingTextPainter.java,v 1.22 2001/11/14 20:03:32 deweese Exp $ */ public class StrokingTextPainter extends BasicTextPainter { @@ -133,7 +133,7 @@ System.out.println(""); } - private List getTextRuns(TextNode node, AttributedCharacterIterator aci) { + public List getTextRuns(TextNode node, AttributedCharacterIterator aci) { List textRuns = node.getTextRuns(); if (textRuns != null) { return textRuns; @@ -1384,7 +1384,7 @@ * Inner convenience class for associating a TextLayout for * sub-spans, and the ACI which iterates over that subspan. */ - class TextRun { + public class TextRun { private AttributedCharacterIterator aci; private TextSpanLayout layout; 1.4 +3 -28 xml-batik/sources/org/apache/batik/parser/AngleParser.java Index: AngleParser.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/parser/AngleParser.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- AngleParser.java 2001/11/08 23:02:43 1.3 +++ AngleParser.java 2001/11/14 20:03:32 1.4 @@ -15,7 +15,7 @@ * values. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: AngleParser.java,v 1.3 2001/11/08 23:02:43 deweese Exp $ + * @version $Id: AngleParser.java,v 1.4 2001/11/14 20:03:32 deweese Exp $ */ public class AngleParser extends NumberParser { @@ -141,34 +141,9 @@ new Object[] { new Integer(current) }); } } catch (NumberFormatException e) { - reportError("float.format", new Object[] { getBufferContent() }); + reportError("character.unexpected", + new Object[] { new Integer(current) }); } angleHandler.endAngle(); - } - - /** - * Implements {@link NumberParser#readNumber()}. - */ - protected void readNumber() throws ParseException { - bufferSize = 0; - bufferize(); - for (;;) { - read(); - switch (current) { - case 0x20: - case 0x9: - case 0xD: - case 0xA: - case 'd': - case 'g': - case 'r': - return; - default: - if (current == -1) { - return; - } - bufferize(); - } - } } } 1.4 +3 -2 xml-batik/sources/org/apache/batik/parser/LengthListParser.java Index: LengthListParser.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/parser/LengthListParser.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- LengthListParser.java 2001/11/08 23:02:43 1.3 +++ LengthListParser.java 2001/11/14 20:03:32 1.4 @@ -16,7 +16,7 @@ * list values. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: LengthListParser.java,v 1.3 2001/11/08 23:02:43 deweese Exp $ + * @version $Id: LengthListParser.java,v 1.4 2001/11/14 20:03:32 deweese Exp $ */ public class LengthListParser extends LengthParser { @@ -69,7 +69,8 @@ } } } catch (NumberFormatException e) { - reportError("float.format", new Object[] { getBufferContent() }); + reportError("character.unexpected", + new Object[] { new Integer(current) }); } ((LengthListHandler)lengthHandler).endLengthList(); } 1.4 +203 -155 xml-batik/sources/org/apache/batik/parser/LengthParser.java Index: LengthParser.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/parser/LengthParser.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- LengthParser.java 2001/11/08 23:02:43 1.3 +++ LengthParser.java 2001/11/14 20:03:32 1.4 @@ -15,9 +15,9 @@ * values. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: LengthParser.java,v 1.3 2001/11/08 23:02:43 deweese Exp $ + * @version $Id: LengthParser.java,v 1.4 2001/11/14 20:03:32 deweese Exp $ */ -public class LengthParser extends NumberParser { +public class LengthParser extends AbstractParser { /** * The length handler used to report parse events. @@ -25,11 +25,6 @@ protected LengthHandler lengthHandler; /** - * Whether the last character was a 'e' or 'E'. - */ - protected boolean eRead; - - /** * Creates a new LengthParser. */ public LengthParser() { @@ -59,23 +54,24 @@ } protected void doParse() throws ParseException { - lengthHandler.startLength(); + lengthHandler.startLength(); - read(); - skipSpaces(); + read(); + skipSpaces(); - try { - parseLength(); + try { + parseLength(); - skipSpaces(); - if (current != -1) { - reportError("end.of.stream.expected", - new Object[] { new Integer(current) }); - } - } catch (NumberFormatException e) { - reportError("float.format", new Object[] { getBufferContent() }); - } - lengthHandler.endLength(); + skipSpaces(); + if (current != -1) { + reportError("end.of.stream.expected", + new Object[] { new Integer(current) }); + } + } catch (NumberFormatException e) { + reportError("character.unexpected", + new Object[] { new Integer(current) }); + } + lengthHandler.endLength(); } /** @@ -84,142 +80,194 @@ protected void parseLength() throws ParseException, NumberFormatException { - float f = parseFloat(); + // readNumber(); + // float ret = Float.parseFloat(getBufferContent()); + + int mant =0; + int mantDig =0; + boolean mantPos=true; + boolean mantRead=false; + int exp =0; + int expDig =0; + int expAdj =0; + boolean expPos =true; + + int eRead = 0; + boolean eJustRead = false; + boolean first = true; + boolean done = false; + boolean unitDone = false; + boolean dotRead = false; + + while (!done) { + switch (current) { + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + if (eRead==0) { + // Still creating mantisa + mantRead = true; + // Only keep first 9 digits rest won't count anyway... + if (mantDig >= 9) { + if (!dotRead) + expAdj++; + break; + } + if (dotRead) expAdj--; + if ((mantDig != 0) || (current != '0')) { + // Ignore leading zeros. + mantDig++; + mant = mant*10+(current-'0'); + } + } else { + // Working on exp. + if (expDig >= 3) break; + if ((expDig != 0) || (current != '0')) { + // Ignore leading zeros. + expDig++; + expDig = expDig*10+(current-'0'); + } + } + eJustRead = false; + break; + case 'e': case 'E': + if (eRead > 1) { + done = true; + break; + } + eJustRead = true; + eRead++; + break; + case 'm': // Confusing case between 10e5 and 10em + case 'x': + if (!eJustRead) { + done = true; + break; + } + if (current == 'm') + lengthHandler.em(); + else + lengthHandler.ex(); + done = true; + unitDone = true; + read(); // eat the 'm' or 'x' char. + break; + case '.': + if ((eRead!=0) || dotRead) { + done=true; + break; + } + dotRead = true; + break; + case '+': + if ((!first) && (!eJustRead)) + done=true; + eJustRead = false; + break; + case '-': + if (first) mantPos = false; + else if (eJustRead) expPos = false; + else done = true; + eJustRead = false; + break; + + case 10: + line++; + column =1; + done = true; + break; + + default: + done=true; + break; + } + if (!done) { + first = false; + if ((position == count) && (!fillBuffer())) { + current = -1; + break; + } + current = buffer[position++]; + column++; + } + } + + if (!mantRead) + throw new NumberFormatException + ("No digits where number expected '" + ((char)current) + "'"); + + if (!expPos) exp = -exp; + exp += expAdj; // account for digits after 'dot'. + if (!mantPos) mant = -mant; - lengthHandler.lengthValue(f); + lengthHandler.lengthValue(NumberParser.buildFloat(mant, exp)); - s: if (eRead || current != -1) { - switch (current) { - case 0xD: case 0xA: case 0x20: case 0x9: - break s; - } - - if (eRead) { - switch (current) { - case 'm': - lengthHandler.em(); - read(); - break; - case 'x': - lengthHandler.ex(); - read(); - break; - default: - reportError("character.unexpected", - new Object[] { new Integer(current) }); - } - } else { - switch (current) { - case 'p': - read(); - switch (current) { - case 'c': - lengthHandler.pc(); - read(); - break; - case 't': - lengthHandler.pt(); - read(); - break; - case 'x': - lengthHandler.px(); - read(); - break; - default: - reportError("character.unexpected", - new Object[] { new Integer(current) }); - } - break; - case 'i': - read(); - if (current != 'n') { - reportError("character.expected", - new Object[] { new Character('n'), - new Integer(current) }); - break; - } - lengthHandler.in(); - read(); - break; - case 'c': - read(); - if (current != 'm') { - reportError("character.expected", - new Object[] { new Character('m'), - new Integer(current) }); - break; - } - lengthHandler.cm(); - read(); - break; - case 'm': - read(); - if (current != 'm') { - reportError("character.expected", - new Object[] { new Character('m'), - new Integer(current) }); - break; - } - lengthHandler.mm(); - read(); - break; - case '%': - lengthHandler.percentage(); - read(); - break; - default: - reportError("character.unexpected", - new Object[] { new Integer(current) }); - } - } - } - } + if(unitDone) + return; - /** - * Implements {@link NumberParser#readNumber()}. - */ - protected void readNumber() throws ParseException { - bufferSize = 0; - bufferize(); - eRead = false; - for (;;) { - read(); - switch (current) { - case 0x20: - case 0x9: - case 0xD: - case 0xA: - case 'c': - case 'i': - case 'p': - case '%': - return; - case 'e': case 'E': - eRead = true; - bufferize(); - break; - case 'm': - if (!eRead) { - return; - } - case 'x': - bufferSize--; - return; - case '+': - case '-': - if (!eRead) { - return; - } - eRead = false; - bufferize(); - break; - default: - if (current == -1) { - return; - } - eRead = false; - bufferize(); - } - } + switch (current) { + case -1: case 0xD: case 0xA: case 0x20: case 0x9: + return; + case 'p': + read(); + switch (current) { + case 'c': + lengthHandler.pc(); + read(); + break; + case 't': + lengthHandler.pt(); + read(); + break; + case 'x': + lengthHandler.px(); + read(); + break; + default: + reportError("character.unexpected", + new Object[] { new Integer(current) }); + } + break; + + case 'i': + read(); + if (current != 'n') { + reportError("character.expected", + new Object[] { new Character('n'), + new Integer(current) }); + break; + } + lengthHandler.in(); + read(); + break; + case 'c': + read(); + if (current != 'm') { + reportError("character.expected", + new Object[] { new Character('m'), + new Integer(current) }); + break; + } + lengthHandler.cm(); + read(); + break; + case 'm': + read(); + if (current != 'm') { + reportError("character.expected", + new Object[] { new Character('m'), + new Integer(current) }); + break; + } + lengthHandler.mm(); + read(); + break; + case '%': + lengthHandler.percentage(); + read(); + break; + default: + reportError("character.unexpected", + new Object[] { new Integer(current) }); + } } } 1.2 +127 -36 xml-batik/sources/org/apache/batik/parser/NumberParser.java Index: NumberParser.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/parser/NumberParser.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- NumberParser.java 2001/01/03 14:17:39 1.1 +++ NumberParser.java 2001/11/14 20:03:32 1.2 @@ -15,53 +15,144 @@ * This class represents a parser with support for numbers. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: NumberParser.java,v 1.1 2001/01/03 14:17:39 hillion Exp $ + * @version $Id: NumberParser.java,v 1.2 2001/11/14 20:03:32 deweese Exp $ */ public abstract class NumberParser extends AbstractParser { /** - * The buffer used for numbers. - */ - protected char[] buffer = new char[16]; - - /** - * The buffer size. - */ - protected int bufferSize; - - /** - * Reads a number from the current stream and put it in the buffer. - */ - protected abstract void readNumber() throws ParseException; - - /** * Parses the content of the buffer and converts it to a float. */ protected float parseFloat() - throws NumberFormatException, - ParseException { - readNumber(); - return Float.parseFloat(getBufferContent()); + throws NumberFormatException, + ParseException { + // readNumber(); + // float ret = Float.parseFloat(getBufferContent()); + + int mant =0; + int mantDig =0; + boolean mantPos=true; + boolean mantRead=false; + int exp =0; + int expDig =0; + int expAdj =0; + boolean expPos =true; + + boolean eRead = false; + boolean eJustRead = false; + boolean first = true; + boolean done = false; + boolean dotRead = false; + + while (!done) { + switch (current) { + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + if (!eRead) { + // Still creating mantisa + mantRead = true; + // Only keep first 9 digits rest won't count anyway... + if (mantDig >= 9) { + if (!dotRead) + expAdj++; + break; + } + if (dotRead) expAdj--; + if ((mantDig != 0) || (current != '0')) { + // Ignore leading zeros. + mantDig++; + mant = mant*10+(current-'0'); + } + } else { + // Working on exp. + if (expDig >= 3) break; + if ((expDig != 0) || (current != '0')) { + // Ignore leading zeros. + expDig++; + expDig = expDig*10+(current-'0'); + } + } + eJustRead = false; + break; + case 'e': case 'E': + if (eRead) { + done = true; + break; + } + eJustRead = true; + eRead = true; + break; + case '.': + if (eRead || dotRead) { + done=true; + break; + } + dotRead = true; + break; + case '+': + if ((!first) && (!eJustRead)) + done=true; + eJustRead = false; + break; + case '-': + if (first) mantPos = false; + else if (eJustRead) expPos = false; + else done = true; + eJustRead = false; + break; + + case 10: + line++; + column =1; + done = true; + break; + default: + done=true; + break; + } + if (!done) { + first = false; + if ((position == count) && (!fillBuffer())) { + current = -1; + break; + } + current = buffer[position++]; + column++; + } + } + if (!mantRead) + throw new NumberFormatException + ("No digits where number expected '" + ((char)current) + "'"); + + if (!expPos) exp = -exp; + exp += expAdj; // account for digits after 'dot'. + if (!mantPos) mant = -mant; + + return buildFloat(mant, exp); } - /** - * Returns the content of the buffer. - */ - protected String getBufferContent() { - return new String(buffer, 0, bufferSize); + public static float buildFloat(int mant, int exp) { + if ((exp < -125) || (mant==0)) return 0f; + if (exp > 128) { + if (mant > 0) return Float.POSITIVE_INFINITY; + else return Float.NEGATIVE_INFINITY; + } + + if (exp == 0) return mant; + + if (mant >= 1<<26) + mant++; // round up trailing bits if they will be dropped. + + if (exp > 0) return mant*pow10[exp]; + else return mant/pow10[-exp]; } /** - * Adds the current character to the buffer. + * Array of powers of ten. */ - protected void bufferize() { - if (bufferSize >= buffer.length) { - char[] t = new char[buffer.length * 2]; - for (int i = 0; i < bufferSize; i++) { - t[i] = buffer[i]; - } - buffer = t; - } - buffer[bufferSize++] = (char)current; - } + private static final float pow10[] = new float [128]; + static { + for (int i=0; i<pow10.length; i++) { + pow10[i] = (float)Math.pow(10, i); + } + }; } 1.8 +52 -107 xml-batik/sources/org/apache/batik/parser/PathParser.java Index: PathParser.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/parser/PathParser.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- PathParser.java 2001/11/08 23:02:43 1.7 +++ PathParser.java 2001/11/14 20:03:32 1.8 @@ -15,7 +15,7 @@ * attribute values. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: PathParser.java,v 1.7 2001/11/08 23:02:43 deweese Exp $ + * @version $Id: PathParser.java,v 1.8 2001/11/14 20:03:32 deweese Exp $ */ public class PathParser extends NumberParser { @@ -139,7 +139,7 @@ } pathHandler.endPath(); - } + } /** * Parses a 'm' command. @@ -155,7 +155,8 @@ pathHandler.movetoRel(x, y); } catch (NumberFormatException e) { - reportError("float.format", new Object[] { getBufferContent() }); + reportError("character.unexpected", + new Object[] { new Integer(current) }); skipSubPath(); } skipCommaSpaces(); @@ -181,9 +182,9 @@ pathHandler.linetoRel(x, y); } catch (NumberFormatException e) { - reportError("float.format", - new Object[] { getBufferContent() }); - skipSubPath(); + reportError("character.unexpected", + new Object[] { new Integer(current) }); + skipSubPath(); return; } break; @@ -208,7 +209,8 @@ pathHandler.movetoAbs(x, y); } catch (NumberFormatException e) { - reportError("float.format", new Object[] { getBufferContent() }); + reportError("character.unexpected", + new Object[] { new Integer(current) }); skipSubPath(); } skipCommaSpaces(); @@ -234,8 +236,8 @@ pathHandler.linetoAbs(x, y); } catch (NumberFormatException e) { - reportError("float.format", - new Object[] { getBufferContent() }); + reportError("character.unexpected", + new Object[] { new Integer(current) }); skipSubPath(); return; } @@ -263,8 +265,8 @@ float x = parseFloat(); pathHandler.linetoHorizontalRel(x); } catch (NumberFormatException e) { - reportError("float.format", - new Object[] { getBufferContent() }); + reportError("character.unexpected", + new Object[] { new Integer(current) }); skipSubPath(); return; } @@ -292,8 +294,8 @@ float x = parseFloat(); pathHandler.linetoHorizontalAbs(x); } catch (NumberFormatException e) { - reportError("float.format", - new Object[] { getBufferContent() }); + reportError("character.unexpected", + new Object[] { new Integer(current) }); skipSubPath(); return; } @@ -321,8 +323,8 @@ float x = parseFloat(); pathHandler.linetoVerticalRel(x); } catch (NumberFormatException e) { - reportError("float.format", - new Object[] { getBufferContent() }); + reportError("character.unexpected", + new Object[] { new Integer(current) }); skipSubPath(); return; } @@ -350,8 +352,8 @@ float x = parseFloat(); pathHandler.linetoVerticalAbs(x); } catch (NumberFormatException e) { - reportError("float.format", - new Object[] { getBufferContent() }); + reportError("character.unexpected", + new Object[] { new Integer(current) }); skipSubPath(); return; } @@ -394,10 +396,10 @@ pathHandler.curvetoCubicRel(x1, y1, x2, y2, x, y); } catch (NumberFormatException e) { - reportError("float.format", - new Object[] { getBufferContent() }); - skipSubPath(); - return; + reportError("character.unexpected", + new Object[] { new Integer(current) }); + skipSubPath(); + return; } skipCommaSpaces(); } @@ -434,10 +436,10 @@ pathHandler.curvetoCubicAbs(x1, y1, x2, y2, x, y); } catch (NumberFormatException e) { - reportError("float.format", - new Object[] { getBufferContent() }); - skipSubPath(); - return; + reportError("character.unexpected", + new Object[] { new Integer(current) }); + skipSubPath(); + return; } skipCommaSpaces(); } @@ -470,9 +472,9 @@ pathHandler.curvetoQuadraticRel(x1, y1, x, y); } catch (NumberFormatException e) { - reportError("float.format", - new Object[] { getBufferContent() }); - skipSubPath(); + reportError("character.unexpected", + new Object[] { new Integer(current) }); + skipSubPath(); return; } skipCommaSpaces(); @@ -506,8 +508,8 @@ pathHandler.curvetoQuadraticAbs(x1, y1, x, y); } catch (NumberFormatException e) { - reportError("float.format", - new Object[] { getBufferContent() }); + reportError("character.unexpected", + new Object[] { new Integer(current) }); skipSubPath(); return; } @@ -542,9 +544,9 @@ pathHandler.curvetoCubicSmoothRel(x2, y2, x, y); } catch (NumberFormatException e) { - reportError("float.format", - new Object[] { getBufferContent() }); - skipSubPath(); + reportError("character.unexpected", + new Object[] { new Integer(current) }); + skipSubPath(); return; } skipCommaSpaces(); @@ -578,8 +580,8 @@ pathHandler.curvetoCubicSmoothAbs(x2, y2, x, y); } catch (NumberFormatException e) { - reportError("float.format", - new Object[] { getBufferContent() }); + reportError("character.unexpected", + new Object[] { new Integer(current) }); skipSubPath(); return; } @@ -610,9 +612,9 @@ pathHandler.curvetoQuadraticSmoothRel(x, y); } catch (NumberFormatException e) { - reportError("float.format", - new Object[] { getBufferContent() }); - skipSubPath(); + reportError("character.unexpected", + new Object[] { new Integer(current) }); + skipSubPath(); return; } skipCommaSpaces(); @@ -642,10 +644,10 @@ pathHandler.curvetoQuadraticSmoothAbs(x, y); } catch (NumberFormatException e) { - reportError("float.format", - new Object[] { getBufferContent() }); - skipSubPath(); - return; + reportError("character.unexpected", + new Object[] { new Integer(current) }); + skipSubPath(); + return; } skipCommaSpaces(); } @@ -717,10 +719,10 @@ pathHandler.arcRel(rx, ry, ax, laf, sf, x, y); } catch (NumberFormatException e) { - reportError("float.format", - new Object[] { getBufferContent() }); - skipSubPath(); - return; + reportError("character.unexpected", + new Object[] { new Integer(current) }); + skipSubPath(); + return; } skipCommaSpaces(); } @@ -791,10 +793,10 @@ pathHandler.arcAbs(rx, ry, ax, laf, sf, x, y); } catch (NumberFormatException e) { - reportError("float.format", - new Object[] { getBufferContent() }); - skipSubPath(); - return; + reportError("character.unexpected", + new Object[] { new Integer(current) }); + skipSubPath(); + return; } skipCommaSpaces(); } @@ -814,63 +816,6 @@ return; } read(); - } - } - } - - /** - * Implements {@link NumberParser#readNumber()}. - */ - protected void readNumber() throws ParseException { - bufferSize = 0; - bufferize(); - boolean eRead = false; - boolean eJustRead = false; - boolean dotRead = current == '.'; - - for (;;) { - read(); - switch (current) { - case 0x20: - case 0x9: - case 0xD: - case 0xA: - case 'm': case 'M': - case 'c': case 'C': - case 's': case 'S': - case 'q': case 'Q': - case 't': case 'T': - case 'l': case 'L': - case 'h': case 'H': - case 'v': case 'V': - case 'a': case 'A': - case 'z': case 'Z': - case ',': - case -1: - return; - case 'e': case 'E': - if (eRead) { - return; - } - eJustRead = true; - eRead = true; - bufferize(); - break; - case '.': - if (eRead || dotRead) { - return; - } - dotRead = true; - bufferize(); - break; - case '+': - case '-': - if (!eJustRead) { - return; - } - default: - eJustRead = false; - bufferize(); } } } 1.4 +3 -42 xml-batik/sources/org/apache/batik/parser/PointsParser.java Index: PointsParser.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/parser/PointsParser.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- PointsParser.java 2001/11/08 23:02:43 1.3 +++ PointsParser.java 2001/11/14 20:03:32 1.4 @@ -15,7 +15,7 @@ * attribute values (used with polyline and polygon elements). * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: PointsParser.java,v 1.3 2001/11/08 23:02:43 deweese Exp $ + * @version $Id: PointsParser.java,v 1.4 2001/11/14 20:03:32 deweese Exp $ */ public class PointsParser extends NumberParser { @@ -78,51 +78,12 @@ pointsHandler.point(x, y); } catch (NumberFormatException e) { - reportError("float.format", - new Object[] { getBufferContent() }); + reportError("character.unexpected", + new Object[] { new Integer(current) }); } skipCommaSpaces(); } pointsHandler.endPoints(); - } - - /** - * Implements {@link NumberParser#readNumber()}. - */ - protected void readNumber() throws ParseException { - bufferSize = 0; - bufferize(); - eRead = false; - for (;;) { - read(); - switch (current) { - case 0x20: - case 0x9: - case 0xD: - case 0xA: - case ',': - eRead = false; - return; - case 'e': case 'E': - eRead = true; - bufferize(); - break; - case '+': - case '-': - if (!eRead) { - return; - } - eRead = false; - bufferize(); - break; - default: - if (current == -1) { - return; - } - eRead = false; - bufferize(); - } - } } } 1.5 +11 -33 xml-batik/sources/org/apache/batik/parser/TransformListParser.java Index: TransformListParser.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/parser/TransformListParser.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- TransformListParser.java 2001/11/08 23:02:43 1.4 +++ TransformListParser.java 2001/11/14 20:03:32 1.5 @@ -15,7 +15,7 @@ * attribute values. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: TransformListParser.java,v 1.4 2001/11/08 23:02:43 deweese Exp $ + * @version $Id: TransformListParser.java,v 1.5 2001/11/14 20:03:32 deweese Exp $ */ public class TransformListParser extends NumberParser { @@ -193,7 +193,8 @@ transformListHandler.matrix(a, b, c, d, e, f); } catch (NumberFormatException ex) { - reportError("float.format", new Object[] { getBufferContent() }); + reportError("character.unexpected", + new Object[] { new Integer(current) }); skipTransform(); } } @@ -287,7 +288,8 @@ transformListHandler.rotate(theta, cx, cy); } catch (NumberFormatException e) { - reportError("float.format", new Object[] { getBufferContent() }); + reportError("character.unexpected", + new Object[] { new Integer(current) }); skipTransform(); } } @@ -403,7 +405,8 @@ transformListHandler.translate(tx, ty); } catch (NumberFormatException e) { - reportError("float.format", new Object[] { getBufferContent() }); + reportError("character.unexpected", + new Object[] { new Integer(current) }); skipTransform(); } } @@ -478,7 +481,8 @@ transformListHandler.scale(sx, sy); } catch (NumberFormatException e) { - reportError("float.format", new Object[] { getBufferContent() }); + reportError("character.unexpected", + new Object[] { new Integer(current) }); skipTransform(); } } @@ -552,7 +556,8 @@ transformListHandler.skewY(sk); } } catch (NumberFormatException e) { - reportError("float.format", new Object[] { getBufferContent() }); + reportError("character.unexpected", + new Object[] { new Integer(current) }); skipTransform(); } } @@ -571,33 +576,6 @@ if (current == -1) { break loop; } - } - } - } - - /** - * Implements {@link NumberParser#readNumber()}. - */ - protected void readNumber() throws ParseException { - bufferSize = 0; - bufferize(); - for (;;) { - read(); - switch (current) { - case 0x20: - case 0x9: - case 0xD: - case 0xA: - case ',': - case ')': - return; - default: - if (current == -1) { - reportError("end.of.stream", new Object[] {}); - skipTransform(); - return; - } - bufferize(); } } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]