From a3164a1079b2caf136b629cd8614fe1a73215469 Mon Sep 17 00:00:00 2001 From: kitfox Date: Sat, 29 Sep 2012 05:21:33 +0000 Subject: Now avoiding reentering XML parser when USE tags reference other documents. git-svn-id: https://svn.java.net/svn/svgsalamander~svn/trunk/svg-core@126 7dc7fa77-23fb-e6ad-8e2e-c86bd48ed22b --- src/main/java/com/kitfox/svg/SVGElement.java | 16 ++++----- src/main/java/com/kitfox/svg/SVGLoader.java | 17 +++++++--- src/main/java/com/kitfox/svg/SVGUniverse.java | 6 +++- src/main/java/com/kitfox/svg/Use.java | 48 ++++++++++++++++++--------- 4 files changed, 59 insertions(+), 28 deletions(-) (limited to 'src') diff --git a/src/main/java/com/kitfox/svg/SVGElement.java b/src/main/java/com/kitfox/svg/SVGElement.java index 7398ea9..4375a89 100644 --- a/src/main/java/com/kitfox/svg/SVGElement.java +++ b/src/main/java/com/kitfox/svg/SVGElement.java @@ -391,14 +391,14 @@ abstract public class SVGElement implements Serializable */ public void loaderEndElement(SVGLoaderHelper helper) throws SVGParseException { - try - { - build(); - } - catch (SVGException se) - { - throw new SVGParseException(se); - } +// try +// { +// build(); +// } +// catch (SVGException se) +// { +// throw new SVGParseException(se); +// } } /** diff --git a/src/main/java/com/kitfox/svg/SVGLoader.java b/src/main/java/com/kitfox/svg/SVGLoader.java index c86978d..857ff5b 100644 --- a/src/main/java/com/kitfox/svg/SVGLoader.java +++ b/src/main/java/com/kitfox/svg/SVGLoader.java @@ -228,16 +228,25 @@ public class SVGLoader extends DefaultHandler svgEle.loaderEndElement(helper); SVGElement parent = null; - if (buildStack.size() != 0) parent = (SVGElement)buildStack.getLast(); + if (buildStack.size() != 0) + { + parent = (SVGElement)buildStack.getLast(); + } //else loadRoot = (SVGElement)svgEle; - if (parent != null) parent.loaderAddChild(helper, svgEle); - else diagram.setRoot((SVGRoot)svgEle); + if (parent != null) + { + parent.loaderAddChild(helper, svgEle); + } + else + { + diagram.setRoot((SVGRoot)svgEle); + } } catch (Exception e) { -e.printStackTrace(); + e.printStackTrace(); throw new SAXException(e); } } diff --git a/src/main/java/com/kitfox/svg/SVGUniverse.java b/src/main/java/com/kitfox/svg/SVGUniverse.java index f59e0d1..c68dc79 100644 --- a/src/main/java/com/kitfox/svg/SVGUniverse.java +++ b/src/main/java/com/kitfox/svg/SVGUniverse.java @@ -431,7 +431,10 @@ public class SVGUniverse implements Serializable try { URI uri = new URI(docRoot.toString()); - if (loadedDocs.containsKey(uri) && !forceLoad) return uri; + if (loadedDocs.containsKey(uri) && !forceLoad) + { + return uri; + } InputStream is = docRoot.openStream(); return loadSVG(uri, new InputSource(createDocumentInputStream(is))); @@ -574,6 +577,7 @@ public class SVGUniverse implements Serializable // SAXParser saxParser = factory.newSAXParser(); // saxParser.parse(new InputSource(new BufferedReader(is)), handler); + handler.getLoadedDiagram().updateTime(curTime); return xmlBase; } catch (SAXParseException sex) diff --git a/src/main/java/com/kitfox/svg/Use.java b/src/main/java/com/kitfox/svg/Use.java index 3229482..897fdba 100644 --- a/src/main/java/com/kitfox/svg/Use.java +++ b/src/main/java/com/kitfox/svg/Use.java @@ -45,7 +45,8 @@ public class Use extends ShapeElement { float width = 1f; float height = 1f; - SVGElement href = null; +// SVGElement href = null; + URI href = null; AffineTransform refXform; @@ -94,18 +95,31 @@ public class Use extends ShapeElement { StyleAttribute sty = new StyleAttribute(); - if (getPres(sty.setName("x"))) x = sty.getFloatValueWithUnits(); + if (getPres(sty.setName("x"))) + { + x = sty.getFloatValueWithUnits(); + } - if (getPres(sty.setName("y"))) y = sty.getFloatValueWithUnits(); + if (getPres(sty.setName("y"))) + { + y = sty.getFloatValueWithUnits(); + } - if (getPres(sty.setName("width"))) width = sty.getFloatValueWithUnits(); + if (getPres(sty.setName("width"))) + { + width = sty.getFloatValueWithUnits(); + } - if (getPres(sty.setName("height"))) height = sty.getFloatValueWithUnits(); + if (getPres(sty.setName("height"))) + { + height = sty.getFloatValueWithUnits(); + } if (getPres(sty.setName("xlink:href"))) { URI src = sty.getURIValue(getXMLBase()); - href = diagram.getUniverse().getElement(src); + href = src; +// href = diagram.getUniverse().getElement(src); } //Determine use offset/scale @@ -121,9 +135,11 @@ public class Use extends ShapeElement { AffineTransform oldXform = g.getTransform(); g.transform(refXform); - if (href == null || !(href instanceof RenderableElement)) return; + SVGElement ref = diagram.getUniverse().getElement(href); + + if (ref == null || !(ref instanceof RenderableElement)) return; - RenderableElement rendEle = (RenderableElement)href; + RenderableElement rendEle = (RenderableElement)ref; rendEle.pushParentContext(this); rendEle.render(g); rendEle.popParentContext(); @@ -135,9 +151,10 @@ public class Use extends ShapeElement { public Shape getShape() { - if (href instanceof ShapeElement) + SVGElement ref = diagram.getUniverse().getElement(href); + if (ref instanceof ShapeElement) { - Shape shape = ((ShapeElement)href).getShape(); + Shape shape = ((ShapeElement)ref).getShape(); shape = refXform.createTransformedShape(shape); shape = shapeToParent(shape); return shape; @@ -148,9 +165,10 @@ public class Use extends ShapeElement { public Rectangle2D getBoundingBox() throws SVGException { - if (href instanceof ShapeElement) + SVGElement ref = diagram.getUniverse().getElement(href); + if (ref instanceof ShapeElement) { - ShapeElement shapeEle = (ShapeElement)href; + ShapeElement shapeEle = (ShapeElement)ref; shapeEle.pushParentContext(this); Rectangle2D bounds = shapeEle.getBoundingBox(); shapeEle.popParentContext(); @@ -222,10 +240,10 @@ public class Use extends ShapeElement { if (getPres(sty.setName("xlink:href"))) { URI src = sty.getURIValue(getXMLBase()); - SVGElement newVal = diagram.getUniverse().getElement(src); - if (newVal != href) +// SVGElement newVal = diagram.getUniverse().getElement(src); + if (!src.equals(href)) { - href = newVal; + href = src; shapeChange = true; } } -- cgit v1.2.3-55-g7522