You are viewing a plain text version of this content. The canonical link for it is here.
Posted to batik-dev@xmlgraphics.apache.org by hi...@apache.org on 2001/02/02 09:04:47 UTC
cvs commit: xml-batik/sources/org/apache/batik/swing JSVGCanvas.java
hillion 01/02/02 00:04:47
Modified: . build.xml
sources/org/apache/batik/apps/svgviewer ViewerFrame.java
sources/org/apache/batik/dom AbstractParentNode.java
sources/org/apache/batik/dom/svg
SVGOMAnimatedEnumeration.java
SVGOMAnimatedLength.java
SVGOMAnimatedNumberList.java
SVGOMAnimatedTransformList.java
SVGOMNumberList.java
sources/org/apache/batik/parser
FragmentIdentifierHandler.java
FragmentIdentifierParser.java
PreserveAspectRatioHandler.java
PreserveAspectRatioParser.java
sources/org/apache/batik/swing JSVGCanvas.java
Added: sources/org/apache/batik/parser
DefaultFragmentIdentifierHandler.java
Log:
- changed build.xml to include the svg generator in the distrib and
to build all the javadocs.
- fixed a bug in DOM (AbstractParentNode.replaceChild()),
- initial commit of an incomplete fragment identifier parser,
- added support for linking to a viewBox (URI of the form
"<base-uri>#svgView(viewBox(<float>,<float>,<float>,<float>))".
only works from a link in the same document.
Revision Changes Path
1.40 +15 -19 xml-batik/build.xml
Index: build.xml
===================================================================
RCS file: /home/cvs/xml-batik/build.xml,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -r1.39 -r1.40
--- build.xml 2001/02/01 14:18:37 1.39
+++ build.xml 2001/02/02 08:04:45 1.40
@@ -45,7 +45,7 @@
[win32] .\build.bat help
- $Id: build.xml,v 1.39 2001/02/01 14:18:37 tkormann Exp $
+ $Id: build.xml,v 1.40 2001/02/02 08:04:45 hillion Exp $
-->
@@ -60,8 +60,8 @@
<tstamp/>
<property name="Project" value="Batik"/>
<property name="project" value="batik"/>
- <property name="year" value="2000"/>
- <property name="version" value="1.0beta2"/>
+ <property name="year" value="2001"/>
+ <property name="version" value="1.0beta3"/>
<property name="src" value="sources"/>
<property name="resources" value="resources"/>
@@ -248,6 +248,7 @@
bridge-jar,
xml-jar,
svg-pp-jar,
+ svggen-jar,
svg-viewer-jar,
rasterizer-jar">
<copy todir="${build}/lib">
@@ -309,6 +310,16 @@
</target>
+ <!-- AWT Util (dependencies: util) -->
+ <target name="svggen-jar" depends="compile, prepare-build">
+ <jar jarfile="${build}/lib/${project}-svggen.jar">
+ <fileset dir="${dest}">
+ <include name="${package-prefix}/svggen/**/*.class"/>
+ </fileset>
+ </jar>
+ </target>
+
+
<!-- GUI Util (dependencies: none) -->
<target name="gui-util-jar" depends="compile, prepare-build">
<jar jarfile="${build}/lib/${project}-gui-util.jar">
@@ -618,22 +629,7 @@
<target name="javadocs" depends="javadoc"/>
<target name="javadoc" depends="prepare-docs">
<mkdir dir="${docs}/javadoc"/>
- <javadoc packagenames="${class-prefix}.apps.*,
- ${class-prefix}.bridge,
- ${class-prefix}.css.*,
- ${class-prefix}.dom.*,
- ${class-prefix}.ext.*,
- ${class-prefix}.gvt.*,
- ${class-prefix}.i18n.*,
- ${class-prefix}.parser.*,
- ${class-prefix}.script.*,
- ${class-prefix}.swing.*,
- ${class-prefix}.transcoder,
- ${class-prefix}.transcoder.image,
- ${class-prefix}.transcoder.svg2svg,
- ${class-prefix}.util,
- ${class-prefix}.util.gui,
- ${class-prefix}.util.svg,
+ <javadoc packagenames="${class-prefix}.*,
org.xml.*,
org.w3c.css.*,
org.w3c.dom.*"
1.48 +59 -1 xml-batik/sources/org/apache/batik/apps/svgviewer/ViewerFrame.java
Index: ViewerFrame.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/apps/svgviewer/ViewerFrame.java,v
retrieving revision 1.47
retrieving revision 1.48
diff -u -r1.47 -r1.48
--- ViewerFrame.java 2001/01/29 15:58:54 1.47
+++ ViewerFrame.java 2001/02/02 08:04:46 1.48
@@ -142,7 +142,8 @@
*
* @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
* @author <a href="mailto:cjolif@ilog.fr">Christophe Jolif</a>
- * @version $Id: ViewerFrame.java,v 1.47 2001/01/29 15:58:54 cjolif Exp $
+ * @author <a href="mailto:bill.haneman@ireland.sun.com">Bill Haneman</a>
+ * @version $Id: ViewerFrame.java,v 1.48 2001/02/02 08:04:46 hillion Exp $
*/
public class ViewerFrame
extends JFrame
@@ -713,6 +714,7 @@
* @param s The document name.
*/
public void loadDocument(String s) {
+ String old = uri;
uri = s;
File f = new File(uri);
if (f.exists()) {
@@ -723,6 +725,18 @@
}
}
if (uri != null) {
+ if (old != null) {
+ URL prev = null;
+ try {
+ prev = new URL(old);
+ if (prev.sameFile(new URL(uri))) {
+ manageFragmentIdentifier();
+ return;
+ }
+ } catch (java.net.MalformedURLException e) {
+ }
+ }
+
// interrupt any document load already underway
if ((thread != null) && thread.isAlive()) {
thread.interrupt();
@@ -751,6 +765,50 @@
}
}
+ protected void manageFragmentIdentifier() {
+ URL u = null;
+ try {
+ u = new URL(uri);
+ } catch (java.net.MalformedURLException e) {
+ System.out.println(e.getMessage());
+ }
+ String ref = u.getRef();
+ if (ref == null) {
+ canvas.setTransform(new java.awt.geom.AffineTransform());
+ } else {
+ org.apache.batik.parser.FragmentIdentifierParser p;
+ p = new org.apache.batik.parser.FragmentIdentifierParser();
+ FragmentIdentifierHandler h = new FragmentIdentifierHandler();
+ p.setFragmentIdentifierHandler(h);
+
+ try {
+ p.parse(new java.io.StringReader(ref));
+
+ canvas.setViewBox(h.x, h.y, h.width, h.height);
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.out.println(e.getMessage());
+ }
+ }
+
+ }
+
+
+ /**
+ * To manage fragment identifiers.
+ */
+ protected static class FragmentIdentifierHandler
+ extends org.apache.batik.parser.DefaultFragmentIdentifierHandler {
+ float x, y, width, height;
+ public void viewBox(float x, float y, float width, float height)
+ throws org.apache.batik.parser.ParseException {
+ this.x = x;
+ this.y = y;
+ this.width = width;
+ this.height = height;
+ }
+ }
// ActionMap /////////////////////////////////////////////////////
/**
1.5 +17 -5 xml-batik/sources/org/apache/batik/dom/AbstractParentNode.java
Index: AbstractParentNode.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/dom/AbstractParentNode.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- AbstractParentNode.java 2000/11/22 16:26:51 1.4
+++ AbstractParentNode.java 2001/02/02 08:04:46 1.5
@@ -24,7 +24,7 @@
* This class implements the Node interface with support for children.
*
* @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
- * @version $Id: AbstractParentNode.java,v 1.4 2000/11/22 16:26:51 hillion Exp $
+ * @version $Id: AbstractParentNode.java,v 1.5 2001/02/02 08:04:46 hillion Exp $
*/
public abstract class AbstractParentNode extends AbstractNode {
@@ -553,14 +553,22 @@
*/
public ExtendedNode replace(ExtendedNode n, ExtendedNode o) {
if (o == firstChild) {
- n.setNextSibling(firstChild.getNextSibling());
+ ExtendedNode t = (ExtendedNode)firstChild.getNextSibling();
+ n.setNextSibling(t);
+ if (o == lastChild) {
+ lastChild = n;
+ } else {
+ t.setPreviousSibling(n);
+ }
firstChild.setNextSibling(null);
firstChild = n;
return o;
}
if (o == lastChild) {
- n.setPreviousSibling(lastChild.getPreviousSibling());
+ ExtendedNode t = (ExtendedNode)lastChild.getPreviousSibling();
+ n.setPreviousSibling(t);
+ t.setNextSibling(n);
lastChild.setPreviousSibling(null);
lastChild = n;
return o;
@@ -569,8 +577,12 @@
ExtendedNode cn = firstChild;
while (cn != null) {
if (cn == o) {
- n.setPreviousSibling(o.getPreviousSibling());
- n.setNextSibling(o.getNextSibling());
+ ExtendedNode t = (ExtendedNode)o.getPreviousSibling();
+ n.setPreviousSibling(t);
+ t.setNextSibling(n);
+ t = (ExtendedNode)o.getNextSibling();
+ n.setNextSibling(t);
+ t.setPreviousSibling(n);
o.setPreviousSibling(null);
o.setNextSibling(null);
return o;
1.4 +2 -2 xml-batik/sources/org/apache/batik/dom/svg/SVGOMAnimatedEnumeration.java
Index: SVGOMAnimatedEnumeration.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/dom/svg/SVGOMAnimatedEnumeration.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- SVGOMAnimatedEnumeration.java 2000/12/28 09:37:18 1.3
+++ SVGOMAnimatedEnumeration.java 2001/02/02 08:04:46 1.4
@@ -18,7 +18,7 @@
* This class implements the {@link SVGAnimatedEnumeration} interface.
*
* @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
- * @version $Id: SVGOMAnimatedEnumeration.java,v 1.3 2000/12/28 09:37:18 hillion Exp $
+ * @version $Id: SVGOMAnimatedEnumeration.java,v 1.4 2001/02/02 08:04:46 hillion Exp $
*/
public class SVGOMAnimatedEnumeration
implements SVGAnimatedEnumeration {
@@ -121,7 +121,7 @@
/**
* <b>DOM</b>: Implements {@link
- * org.w3c.dom.svg.SVGAnimatedNumber#setBaseVal(short)}.
+ * org.w3c.dom.svg.SVGAnimatedEnumeration#setBaseVal(short)}.
*/
public void setBaseVal(short baseVal) throws DOMException {
if (baseVal == 0 || baseVal > shortStringMap.size()) {
1.6 +2 -2 xml-batik/sources/org/apache/batik/dom/svg/SVGOMAnimatedLength.java
Index: SVGOMAnimatedLength.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/dom/svg/SVGOMAnimatedLength.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- SVGOMAnimatedLength.java 2000/12/28 09:37:18 1.5
+++ SVGOMAnimatedLength.java 2001/02/02 08:04:46 1.6
@@ -19,7 +19,7 @@
* This class implements {@link org.w3c.dom.svg.SVGAnimatedLength}.
*
* @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
- * @version $Id: SVGOMAnimatedLength.java,v 1.5 2000/12/28 09:37:18 hillion Exp $
+ * @version $Id: SVGOMAnimatedLength.java,v 1.6 2001/02/02 08:04:46 hillion Exp $
*/
public class SVGOMAnimatedLength
implements SVGAnimatedLength,
@@ -103,7 +103,7 @@
}
/**
- * Implements {@link ModificationHandler#getObject(Object,String)}.
+ * Implements {@link ModificationHandler#getObject(Object)}.
*/
public Object getObject(Object key) {
return element;
1.4 +2 -2 xml-batik/sources/org/apache/batik/dom/svg/SVGOMAnimatedNumberList.java
Index: SVGOMAnimatedNumberList.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/dom/svg/SVGOMAnimatedNumberList.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- SVGOMAnimatedNumberList.java 2000/12/28 09:37:18 1.3
+++ SVGOMAnimatedNumberList.java 2001/02/02 08:04:46 1.4
@@ -18,7 +18,7 @@
* This class implements {@link org.w3c.dom.svg.SVGAnimatedNumberList}.
*
* @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
- * @version $Id: SVGOMAnimatedNumberList.java,v 1.3 2000/12/28 09:37:18 hillion Exp $
+ * @version $Id: SVGOMAnimatedNumberList.java,v 1.4 2001/02/02 08:04:46 hillion Exp $
*/
public class SVGOMAnimatedNumberList
implements SVGAnimatedNumberList,
@@ -102,7 +102,7 @@
}
/**
- * Implements {@link ModificationHandler#getObject(Object,String)}.
+ * Implements {@link ModificationHandler#getObject(Object)}.
*/
public Object getObject(Object key) {
return null;
1.5 +2 -2 xml-batik/sources/org/apache/batik/dom/svg/SVGOMAnimatedTransformList.java
Index: SVGOMAnimatedTransformList.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/dom/svg/SVGOMAnimatedTransformList.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- SVGOMAnimatedTransformList.java 2000/12/18 14:58:56 1.4
+++ SVGOMAnimatedTransformList.java 2001/02/02 08:04:46 1.5
@@ -18,7 +18,7 @@
* This class implements {@link org.w3c.dom.svg.SVGAnimatedLength}.
*
* @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
- * @version $Id: SVGOMAnimatedTransformList.java,v 1.4 2000/12/18 14:58:56 hillion Exp $
+ * @version $Id: SVGOMAnimatedTransformList.java,v 1.5 2001/02/02 08:04:46 hillion Exp $
*/
public class SVGOMAnimatedTransformList
implements SVGAnimatedTransformList,
@@ -99,7 +99,7 @@
}
/**
- * Implements {@link ModificationHandler#getObject(Object,String)}.
+ * Implements {@link ModificationHandler#getObject(Object)}.
*/
public Object getObject(Object key) {
return null;
1.5 +2 -2 xml-batik/sources/org/apache/batik/dom/svg/SVGOMNumberList.java
Index: SVGOMNumberList.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/dom/svg/SVGOMNumberList.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- SVGOMNumberList.java 2000/12/28 09:37:26 1.4
+++ SVGOMNumberList.java 2001/02/02 08:04:46 1.5
@@ -21,7 +21,7 @@
* This class implements the {@link SVGNumberList} interface.
*
* @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
- * @version $Id: SVGOMNumberList.java,v 1.4 2000/12/28 09:37:26 hillion Exp $
+ * @version $Id: SVGOMNumberList.java,v 1.5 2001/02/02 08:04:46 hillion Exp $
*/
public class SVGOMNumberList
implements SVGNumberList,
@@ -218,7 +218,7 @@
}
/**
- * Implements {@link ModificationHandler#getObject(Object,String)}.
+ * Implements {@link ModificationHandler#getObject(Object)}.
*/
public Object getObject(Object key) {
return null;
1.2 +4 -4 xml-batik/sources/org/apache/batik/parser/FragmentIdentifierHandler.java
Index: FragmentIdentifierHandler.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/parser/FragmentIdentifierHandler.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- FragmentIdentifierHandler.java 2000/10/10 18:40:25 1.1
+++ FragmentIdentifierHandler.java 2001/02/02 08:04:47 1.2
@@ -14,11 +14,11 @@
* in order to be notified of parsing events.
*
* @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
- * @version $Id: FragmentIdentifierHandler.java,v 1.1 2000/10/10 18:40:25 hillion Exp $
+ * @version $Id: FragmentIdentifierHandler.java,v 1.2 2001/02/02 08:04:47 hillion Exp $
*/
-public interface FragmentIdentifierHandler {
+public interface FragmentIdentifierHandler extends PreserveAspectRatioHandler {
/**
- * Invoked when the fragment identifier attribute starts.
+ * Invoked when the fragment identifier starts.
* @exception ParseException if an error occured while processing the
* fragment identifier
*/
@@ -50,7 +50,7 @@
void viewTarget(String name) throws ParseException;
/**
- * Invoked when the points attribute ends.
+ * Invoked when the fragment identifier ends.
* @exception ParseException if an error occured while processing the
* fragment identifier
*/
1.2 +377 -6 xml-batik/sources/org/apache/batik/parser/FragmentIdentifierParser.java
Index: FragmentIdentifierParser.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/parser/FragmentIdentifierParser.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- FragmentIdentifierParser.java 2000/10/10 18:40:25 1.1
+++ FragmentIdentifierParser.java 2001/02/02 08:04:47 1.2
@@ -8,15 +8,38 @@
package org.apache.batik.parser;
+import java.io.Reader;
+
+import org.apache.batik.util.XMLUtilities;
+
/**
- * This interface represents an event-based parser for the SVG
- * fragment identifier (used with polyline and polygon elements).
+ * This class represents an event-based parser for the SVG
+ * fragment identifiers.
*
* @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
- * @version $Id: FragmentIdentifierParser.java,v 1.1 2000/10/10 18:40:25 hillion Exp $
+ * @version $Id: FragmentIdentifierParser.java,v 1.2 2001/02/02 08:04:47 hillion Exp $
*/
-public interface FragmentIdentifierParser extends Parser {
+public class FragmentIdentifierParser extends PreserveAspectRatioParser {
+
/**
+ * The buffer used for numbers.
+ */
+ protected char[] buffer = new char[16];
+
+ /**
+ * The buffer size.
+ */
+ protected int bufferSize;
+
+ /**
+ * Creates a new FragmentIdentifier parser.
+ */
+ public FragmentIdentifierParser() {
+ preserveAspectRatioHandler =
+ DefaultFragmentIdentifierHandler.INSTANCE;
+ }
+
+ /**
* Allows an application to register a fragment identifier handler.
*
* <p>If the application does not register a handler, all
@@ -27,10 +50,358 @@
* handler immediately.</p>
* @param handler The transform list handler.
*/
- void setPointsHandler(FragmentIdentifierHandler handler);
+ public void setFragmentIdentifierHandler(FragmentIdentifierHandler handler) {
+ preserveAspectRatioHandler = handler;
+ }
/**
* Returns the points handler in use.
+ */
+ public FragmentIdentifierHandler getFragmentIdentfierHandler() {
+ return (FragmentIdentifierHandler)preserveAspectRatioHandler;
+ }
+
+ /**
+ * Returns the current handler.
+ */
+ protected FragmentIdentifierHandler getFragmentIdentifierHandler() {
+ return (FragmentIdentifierHandler)preserveAspectRatioHandler;
+ }
+
+ /**
+ * Parses the given reader.
+ */
+ public void parse(Reader r) throws ParseException {
+ initialize(r);
+
+ read();
+
+ getFragmentIdentfierHandler().startFragmentIdentifier();
+
+ ident: {
+ String id = null;
+
+ switch (current) {
+ case 'x':
+ inputBuffer.setMark();
+
+ read();
+ if (current != 'p') {
+ parseIdentifier();
+ break;
+ }
+ read();
+ if (current != 'o') {
+ parseIdentifier();
+ break;
+ }
+ read();
+ if (current != 'i') {
+ parseIdentifier();
+ break;
+ }
+ read();
+ if (current != 'n') {
+ parseIdentifier();
+ break;
+ }
+ read();
+ if (current != 'o') {
+ parseIdentifier();
+ break;
+ }
+ read();
+ if (current != 't') {
+ parseIdentifier();
+ break;
+ }
+ read();
+ if (current != 'e') {
+ parseIdentifier();
+ break;
+ }
+ read();
+ if (current != 'r') {
+ parseIdentifier();
+ break;
+ }
+ read();
+ if (current != '(') {
+ parseIdentifier();
+ break;
+ }
+ read();
+ if (current != 'i') {
+ reportError("character.expected",
+ new Object[] { new Character('i'),
+ new Integer(current) });
+ break ident;
+ }
+ read();
+ if (current != 'd') {
+ reportError("character.expected",
+ new Object[] { new Character('d'),
+ new Integer(current) });
+ break ident;
+ }
+ read();
+ if (current != '(') {
+ reportError("character.expected",
+ new Object[] { new Character('('),
+ new Integer(current) });
+ break ident;
+ }
+ read();
+ inputBuffer.resetMark();
+ parseIdentifier();
+
+ char[] c = new char[inputBuffer.contentSize()];
+ inputBuffer.readContent(c);
+
+ id = new String(c);
+
+ if (current != ')') {
+ reportError("character.expected",
+ new Object[] { new Character(')'),
+ new Integer(current) });
+ break ident;
+ }
+ read();
+ if (current != ')') {
+ reportError("character.expected",
+ new Object[] { new Character(')'),
+ new Integer(current) });
+ break ident;
+ }
+ break;
+ case 's':
+ inputBuffer.setMark();
+
+ read();
+ if (current != 'v') {
+ parseIdentifier();
+ break;
+ }
+ read();
+ if (current != 'g') {
+ parseIdentifier();
+ break;
+ }
+ read();
+ if (current != 'V') {
+ parseIdentifier();
+ break;
+ }
+ read();
+ if (current != 'i') {
+ parseIdentifier();
+ break;
+ }
+ read();
+ if (current != 'e') {
+ parseIdentifier();
+ break;
+ }
+ read();
+ if (current != 'w') {
+ parseIdentifier();
+ break;
+ }
+ read();
+ if (current != '(') {
+ reportError("character.expected",
+ new Object[] { new Character('('),
+ new Integer(current) });
+ break ident;
+ }
+ inputBuffer.unsetMark();
+ read();
+
+ parseViewAttributes();
+
+ if (current != ')') {
+ reportError("character.expected",
+ new Object[] { new Character('('),
+ new Integer(current) });
+ }
+ break ident;
+ default:
+ if (current == -1 ||
+ !XMLUtilities.isXMLNameFirstCharacter((char)current)) {
+ break ident;
+ }
+ inputBuffer.setMark();
+ read();
+ parseIdentifier();
+ c = new char[inputBuffer.contentSize()];
+ inputBuffer.readContent(c);
+
+ id = new String(c);
+ }
+ getFragmentIdentfierHandler().idReference(id);
+ }
+
+ getFragmentIdentfierHandler().endFragmentIdentifier();
+ }
+
+ /**
+ * Parses the svgView attributes.
+ */
+ protected void parseViewAttributes() throws ParseException {
+ loop: for (;;) {
+ switch (current) {
+ case -1:
+ case ')':
+ default:
+ break loop;
+ case 'v':
+ read();
+ if (current != 'i') {
+ reportError("character.expected",
+ new Object[] { new Character('i'),
+ new Integer(current) });
+ break loop;
+ }
+ read();
+ if (current != 'e') {
+ reportError("character.expected",
+ new Object[] { new Character('e'),
+ new Integer(current) });
+ break loop;
+ }
+ read();
+ if (current != 'w') {
+ reportError("character.expected",
+ new Object[] { new Character('w'),
+ new Integer(current) });
+ break loop;
+ }
+ read();
+ if (current != 'B') {
+ reportError("character.expected",
+ new Object[] { new Character('B'),
+ new Integer(current) });
+ break loop;
+ }
+ read();
+ if (current != 'o') {
+ reportError("character.expected",
+ new Object[] { new Character('o'),
+ new Integer(current) });
+ break loop;
+ }
+ read();
+ if (current != 'x') {
+ reportError("character.expected",
+ new Object[] { new Character('x'),
+ new Integer(current) });
+ break loop;
+ }
+ read();
+ if (current != '(') {
+ reportError("character.expected",
+ new Object[] { new Character('('),
+ new Integer(current) });
+ break loop;
+ }
+
+ float x = parseFloat();
+ if (current != ',') {
+ reportError("character.expected",
+ new Object[] { new Character(','),
+ new Integer(current) });
+ break loop;
+ }
+
+ float y = parseFloat();
+ if (current != ',') {
+ reportError("character.expected",
+ new Object[] { new Character(','),
+ new Integer(current) });
+ break loop;
+ }
+
+ float w = parseFloat();
+ if (current != ',') {
+ reportError("character.expected",
+ new Object[] { new Character(','),
+ new Integer(current) });
+ break loop;
+ }
+
+ float h = parseFloat();
+ if (current != ')') {
+ reportError("character.expected",
+ new Object[] { new Character(')'),
+ new Integer(current) });
+ break loop;
+ }
+ read();
+ getFragmentIdentfierHandler().viewBox(x, y, w, h);
+ }
+ }
+ }
+
+ /**
+ * Parses an identifier.
+ */
+ protected void parseIdentifier() throws ParseException {
+ loop: for (;;) {
+ if (current == -1 || !XMLUtilities.isXMLNameCharacter((char)current)) {
+ break;
+ }
+ read();
+ }
+ }
+
+ /**
+ * Parses the content of the buffer and converts it to a float.
+ */
+ protected float parseFloat()
+ throws NumberFormatException,
+ ParseException {
+ readNumber();
+ return Float.parseFloat(getBufferContent());
+ }
+
+ /**
+ * Returns the content of the buffer.
+ */
+ protected String getBufferContent() {
+ return new String(buffer, 0, bufferSize);
+ }
+
+ /**
+ * Adds the current character to the buffer.
+ */
+ 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;
+ }
+
+ /**
+ * Reads a number.
*/
- FragmentIdentifierHandler getPointsHandler();
+ protected void readNumber() throws ParseException {
+ bufferSize = 0;
+ for (;;) {
+ read();
+ switch (current) {
+ case ',':
+ case ')':
+ return;
+ default:
+ if (current == -1) {
+ return;
+ }
+ bufferize();
+ }
+ }
+ }
}
1.2 +15 -15 xml-batik/sources/org/apache/batik/parser/PreserveAspectRatioHandler.java
Index: PreserveAspectRatioHandler.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/parser/PreserveAspectRatioHandler.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- PreserveAspectRatioHandler.java 2000/10/10 18:40:30 1.1
+++ PreserveAspectRatioHandler.java 2001/02/02 08:04:47 1.2
@@ -14,104 +14,104 @@
* be notified of parsing events.
*
* @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
- * @version $Id: PreserveAspectRatioHandler.java,v 1.1 2000/10/10 18:40:30 hillion Exp $
+ * @version $Id: PreserveAspectRatioHandler.java,v 1.2 2001/02/02 08:04:47 hillion Exp $
*/
public interface PreserveAspectRatioHandler {
/**
* Invoked when the PreserveAspectRatio parsing starts.
* @exception ParseException if an error occured while processing
- * the transform
+ * the PreserveAspectRatio
*/
void startPreserveAspectRatio() throws ParseException;
/**
* Invoked when 'none' been parsed.
* @exception ParseException if an error occured while processing
- * the transform
+ * the PreserveAspectRatio
*/
void none() throws ParseException;
/**
* Invoked when 'xMaxYMax' has been parsed.
* @exception ParseException if an error occured while processing
- * the transform
+ * the PreserveAspectRatio
*/
void xMaxYMax() throws ParseException;
/**
* Invoked when 'xMaxYMid' has been parsed.
* @exception ParseException if an error occured while processing
- * the transform
+ * the PreserveAspectRatio
*/
void xMaxYMid() throws ParseException;
/**
* Invoked when 'xMaxYMin' has been parsed.
* @exception ParseException if an error occured while processing
- * the transform
+ * the PreserveAspectRatio
*/
void xMaxYMin() throws ParseException;
/**
* Invoked when 'xMidYMax' has been parsed.
* @exception ParseException if an error occured while processing
- * the transform
+ * the PreserveAspectRatio
*/
void xMidYMax() throws ParseException;
/**
* Invoked when 'xMidYMid' has been parsed.
* @exception ParseException if an error occured while processing
- * the transform
+ * the PreserveAspectRatio
*/
void xMidYMid() throws ParseException;
/**
* Invoked when 'xMidYMin' has been parsed.
* @exception ParseException if an error occured while processing
- * the transform
+ * the PreserveAspectRatio
*/
void xMidYMin() throws ParseException;
/**
* Invoked when 'xMinYMax' has been parsed.
* @exception ParseException if an error occured while processing
- * the transform
+ * the PreserveAspectRatio
*/
void xMinYMax() throws ParseException;
/**
* Invoked when 'xMinYMid' has been parsed.
* @exception ParseException if an error occured while processing
- * the transform
+ * the PreserveAspectRatio
*/
void xMinYMid() throws ParseException;
/**
* Invoked when 'xMinYMin' has been parsed.
* @exception ParseException if an error occured while processing
- * the transform
+ * the PreserveAspectRatio
*/
void xMinYMin() throws ParseException;
/**
* Invoked when 'meet' has been parsed.
* @exception ParseException if an error occured while processing
- * the transform
+ * the PreserveAspectRatio
*/
void meet() throws ParseException;
/**
* Invoked when 'slice' has been parsed.
* @exception ParseException if an error occured while processing
- * the transform
+ * the PreserveAspectRatio
*/
void slice() throws ParseException;
/**
* Invoked when the PreserveAspectRatio parsing ends.
* @exception ParseException if an error occured while processing
- * the transform
+ * the PreserveAspectRatio
*/
void endPreserveAspectRatio() throws ParseException;
}
1.3 +12 -6 xml-batik/sources/org/apache/batik/parser/PreserveAspectRatioParser.java
Index: PreserveAspectRatioParser.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/parser/PreserveAspectRatioParser.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- PreserveAspectRatioParser.java 2001/01/03 14:17:39 1.2
+++ PreserveAspectRatioParser.java 2001/02/02 08:04:47 1.3
@@ -15,7 +15,7 @@
* attribute values.
*
* @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
- * @version $Id: PreserveAspectRatioParser.java,v 1.2 2001/01/03 14:17:39 hillion Exp $
+ * @version $Id: PreserveAspectRatioParser.java,v 1.3 2001/02/02 08:04:47 hillion Exp $
*/
public class PreserveAspectRatioParser extends AbstractParser {
@@ -43,8 +43,7 @@
* handler immediately.</p>
* @param handler The transform list handler.
*/
- public void setPreserveAspectRatioHandler(
- PreserveAspectRatioHandler handler) {
+ public void setPreserveAspectRatioHandler(PreserveAspectRatioHandler handler) {
preserveAspectRatioHandler = handler;
}
@@ -61,11 +60,18 @@
public void parse(Reader r) throws ParseException {
initialize(r);
- preserveAspectRatioHandler.startPreserveAspectRatio();
-
read();
skipSpaces();
+ parsePreserveAspectRatio();
+ }
+
+ /**
+ * Parses a PreserveAspectRatio attribute.
+ */
+ protected void parsePreserveAspectRatio() throws ParseException {
+ preserveAspectRatioHandler.startPreserveAspectRatio();
+
s: if (current == 'n') {
read();
if (current != 'o') {
@@ -292,7 +298,7 @@
}
}
- skipSpaces();
+ skipCommaSpaces();
switch (current) {
case 'm':
1.1 xml-batik/sources/org/apache/batik/parser/DefaultFragmentIdentifierHandler.java
Index: DefaultFragmentIdentifierHandler.java
===================================================================
/*****************************************************************************
* Copyright (C) The Apache Software Foundation. All rights reserved. *
* ------------------------------------------------------------------------- *
* This software is published under the terms of the Apache Software License *
* version 1.1, a copy of which has been included with this distribution in *
* the LICENSE file. *
*****************************************************************************/
package org.apache.batik.parser;
/**
* This class provides an adapter for FragmentIdentifierHandler.
*
* @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
* @version $Id: DefaultFragmentIdentifierHandler.java,v 1.1 2001/02/02 08:04:47 hillion Exp $
*/
public class DefaultFragmentIdentifierHandler
extends DefaultPreserveAspectRatioHandler
implements FragmentIdentifierHandler {
/**
* The only instance of this class.
*/
public final static FragmentIdentifierHandler INSTANCE
= new DefaultFragmentIdentifierHandler();
/**
* This class does not need to be instantiated.
*/
protected DefaultFragmentIdentifierHandler() {
}
/**
* Implements {@link FragmentIdentifierHandler#startFragmentIdentifier()}.
*/
public void startFragmentIdentifier() throws ParseException {
}
/**
* Invoked when an ID has been parsed.
* @param s The string that represents the parsed ID.
* @exception ParseException if an error occured while processing the
* fragment identifier
*/
public void idReference(String s) throws ParseException {
}
/**
* Invoked when 'viewBox(x,y,width,height)' has been parsed.
* @param x y width height the coordinates of the viewbox.
* @exception ParseException if an error occured while processing the
* fragment identifier
*/
public void viewBox(float x, float y, float width, float height)
throws ParseException {
}
/**
* Invoked when 'viewTarget(name)' has been parsed.
* @param name the target name.
* @exception ParseException if an error occured while processing the
* fragment identifier
*/
public void viewTarget(String name) throws ParseException {
}
/**
* Implements {@link FragmentIdentifierHandler#endFragmentIdentifier()}.
*/
public void endFragmentIdentifier() throws ParseException {
}
}
1.7 +45 -2 xml-batik/sources/org/apache/batik/swing/JSVGCanvas.java
Index: JSVGCanvas.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/swing/JSVGCanvas.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- JSVGCanvas.java 2001/02/01 13:45:50 1.6
+++ JSVGCanvas.java 2001/02/02 08:04:47 1.7
@@ -110,7 +110,7 @@
*
* @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
* @author <a href="mailto:cjolif@ilog.fr">Christophe Jolif</a>
- * @version $Id: JSVGCanvas.java,v 1.6 2001/02/01 13:45:50 tkormann Exp $
+ * @version $Id: JSVGCanvas.java,v 1.7 2001/02/02 08:04:47 hillion Exp $
*/
public class JSVGCanvas
extends JComponent
@@ -507,7 +507,6 @@
backgroundBuilderThread.setPriority(Thread.MIN_PRIORITY);
backgroundBuilderThread.start();
}
-
}
/**
@@ -1096,6 +1095,50 @@
*/
public AffineTransform getTransform() {
return transform;
+ }
+
+ /**
+ * Applies the given transform to the canvas.
+ */
+ public void setTransform(AffineTransform at) {
+ documentTransformed = false;
+ computeTransform();
+ rotateAngle = 0;
+ rotateCos = 1;
+ previousRotateTransform = null;
+ rotateTransform = null;
+
+ transform.concatenate(at);
+ documentTransformed = true;
+ updateBaseTransform();
+ if (zoomHandler != null) {
+ zoomHandler.zoomChanged((float)(transform.getScaleX() /
+ rotateCos / initialScale));
+ }
+ bufferNeedsRendering = true;
+ repaint();
+ if (thumbnailCanvas != null) {
+ thumbnailCanvas.repaint();
+ }
+ }
+
+ /**
+ * Specifies a view box.
+ */
+ public void setViewBox(float x, float y, float width, float height) {
+ AffineTransform t;
+ Dimension d = getSize();
+ AffineTransform part = SVGUtilities.getPreserveAspectRatioTransform
+ (document.getRootElement(), d.width, d.height);
+ try {
+ part = part.createInverse();
+ Point2D p2d = part.transform(new Point2D.Double(d.width, d.height), null);
+ t = AffineTransform.getScaleInstance(p2d.getX() / width,
+ p2d.getY() / height);
+ t.translate(-x, -y);
+ setTransform(t);
+ } catch (NoninvertibleTransformException e) {
+ }
}
/**