diff --git a/fine-xmlgraphics/xmlgraphics-batik/README.md b/fine-xmlgraphics/xmlgraphics-batik/README.md
index e96552704..d7301f037 100644
--- a/fine-xmlgraphics/xmlgraphics-batik/README.md
+++ b/fine-xmlgraphics/xmlgraphics-batik/README.md
@@ -1,2 +1,2 @@
源码地址:https://github.com/apache/xmlgraphics-batik
-版本:1.14
\ No newline at end of file
+版本:1.16
\ No newline at end of file
diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/com/sun/xml/stream/xerces/impl/msg/DOMMessages.properties b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/com/sun/xml/stream/xerces/impl/msg/DOMMessages.properties
index 95ea285e2..2a7e6b5d1 100644
--- a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/com/sun/xml/stream/xerces/impl/msg/DOMMessages.properties
+++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/com/sun/xml/stream/xerces/impl/msg/DOMMessages.properties
@@ -13,7 +13,7 @@
# exception codes
DOMSTRING_SIZE_ERR = The specified range of text does not fit into a DOMString.
HIERARCHY_REQUEST_ERR = An attempt was made to insert a node where it is not permitted.
-INDEX_SIZE_ERR = The index or size is negative, or greater than the allowed value.
+INDEX_SIZE_ERR = The indexs or size is negative, or greater than the allowed value.
INUSE_ATTRIBUTE_ERR = An attempt is made to add an attribute that is already in use elsewhere.
INVALID_ACCESS_ERR = A parameter or an operation is not supported by the underlying object.
INVALID_CHARACTER_ERR = An invalid or illegal XML character is specified.
diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/apache/batik/apps/rasterizer/Main.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/apache/batik/apps/rasterizer/Main.java
index a4248b527..a42f3e3cd 100644
--- a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/apache/batik/apps/rasterizer/Main.java
+++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/apache/batik/apps/rasterizer/Main.java
@@ -934,8 +934,10 @@ public class Main implements SVGConverterController {
ApplicationSecurityEnforcer securityEnforcer =
new ApplicationSecurityEnforcer(this.getClass(),
RASTERIZER_SECURITY_POLICY);
-
- securityEnforcer.enforceSecurity(!c.getSecurityOff());
+ try {
+ securityEnforcer.enforceSecurity(!c.getSecurityOff());
+ } catch (UnsupportedOperationException e) {
+ }
String[] expandedSources = expandSources(sources);
diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/apache/batik/bridge/DefaultExternalResourceSecurity.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/apache/batik/bridge/DefaultExternalResourceSecurity.java
index a9e5d8828..8279a9a98 100644
--- a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/apache/batik/bridge/DefaultExternalResourceSecurity.java
+++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/apache/batik/bridge/DefaultExternalResourceSecurity.java
@@ -20,6 +20,9 @@ package org.apache.batik.bridge;
import org.apache.batik.util.ParsedURL;
+import java.net.URI;
+import java.net.URISyntaxException;
+
/**
* Default implementation for the ExternalResourceSecurity
interface.
* It allows all types of external resources to be loaded, but only if they
@@ -81,6 +84,13 @@ public class DefaultExternalResourceSecurity implements ExternalResourceSecurity
} else {
String docHost = docURL.getHost();
String externalResourceHost = externalResourceURL.getHost();
+ if (externalResourceHost == null && !DATA_PROTOCOL.equals(externalResourceURL.getProtocol())) {
+ try {
+ externalResourceHost = new URI(externalResourceURL.getPath()).getHost();
+ } catch (URISyntaxException e) {
+ throw new RuntimeException(e);
+ }
+ }
if ((docHost != externalResourceHost) &&
((docHost == null) || (!docHost.equals(externalResourceHost)))){
diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/apache/batik/bridge/DefaultScriptSecurity.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/apache/batik/bridge/DefaultScriptSecurity.java
index e64c29c9c..bf30c08bb 100644
--- a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/apache/batik/bridge/DefaultScriptSecurity.java
+++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/apache/batik/bridge/DefaultScriptSecurity.java
@@ -20,6 +20,8 @@ package org.apache.batik.bridge;
import org.apache.batik.util.ParsedURL;
+import static org.apache.batik.util.SVGConstants.SVG_SCRIPT_TYPE_JAVA;
+
/**
* Default implementation for the ScriptSecurity
interface.
* It allows all types of scripts to be loaded, but only if they
@@ -76,13 +78,17 @@ public class DefaultScriptSecurity implements ScriptSecurity {
ParsedURL docURL){
// Make sure that the archives comes from the same host
// as the document itself
- if (docURL == null) {
+ if (docURL == null || SVG_SCRIPT_TYPE_JAVA.equals(scriptType)) {
se = new SecurityException
(Messages.formatMessage(ERROR_CANNOT_ACCESS_DOCUMENT_URL,
new Object[]{scriptURL}));
} else {
String docHost = docURL.getHost();
String scriptHost = scriptURL.getHost();
+
+ if (scriptHost == null && scriptURL.getPath() != null) {
+ scriptHost = new ParsedURL(scriptURL.getPath()).getHost();
+ }
if ((docHost != scriptHost) &&
((docHost == null) || (!docHost.equals(scriptHost)))) {
diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/apache/batik/bridge/SVGImageElementBridge.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/apache/batik/bridge/SVGImageElementBridge.java
index a4f76534e..ee25c23b7 100644
--- a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/apache/batik/bridge/SVGImageElementBridge.java
+++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/apache/batik/bridge/SVGImageElementBridge.java
@@ -175,33 +175,33 @@ public class SVGImageElementBridge extends AbstractGraphicsNodeBridge {
} else {
purl = new ParsedURL(baseURI, uriStr);
}
-
+ checkLoadExternalResource(ctx, e, purl);
return createImageGraphicsNode(ctx, e, purl);
}
- protected GraphicsNode createImageGraphicsNode(BridgeContext ctx,
- Element e,
- ParsedURL purl) {
- Rectangle2D bounds = getImageBounds(ctx, e);
- if ((bounds.getWidth() == 0) || (bounds.getHeight() == 0)) {
- ShapeNode sn = new ShapeNode();
- sn.setShape(bounds);
- return sn;
- }
-
+ private void checkLoadExternalResource(BridgeContext ctx, Element e, ParsedURL purl) {
SVGDocument svgDoc = (SVGDocument)e.getOwnerDocument();
String docURL = svgDoc.getURL();
ParsedURL pDocURL = null;
- if (docURL != null)
+ if (docURL != null) {
pDocURL = new ParsedURL(docURL);
-
+ }
UserAgent userAgent = ctx.getUserAgent();
-
try {
userAgent.checkLoadExternalResource(purl, pDocURL);
} catch (SecurityException secEx ) {
- throw new BridgeException(ctx, e, secEx, ERR_URI_UNSECURE,
- new Object[] {purl});
+ throw new BridgeException(ctx, e, secEx, ERR_URI_UNSECURE, new Object[] {purl});
+ }
+ }
+
+ protected GraphicsNode createImageGraphicsNode(BridgeContext ctx,
+ Element e,
+ ParsedURL purl) {
+ Rectangle2D bounds = getImageBounds(ctx, e);
+ if ((bounds.getWidth() == 0) || (bounds.getHeight() == 0)) {
+ ShapeNode sn = new ShapeNode();
+ sn.setShape(bounds);
+ return sn;
}
DocumentLoader loader = ctx.getDocumentLoader();
diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/apache/batik/bridge/svg12/XPathPatternContentSelector.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/apache/batik/bridge/svg12/XPathPatternContentSelector.java
index b72f723a4..4e76ca879 100644
--- a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/apache/batik/bridge/svg12/XPathPatternContentSelector.java
+++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/apache/batik/bridge/svg12/XPathPatternContentSelector.java
@@ -18,20 +18,22 @@
*/
package org.apache.batik.bridge.svg12;
-import java.util.ArrayList;
-
-import org.apache.xml.utils.PrefixResolver;
-import org.apache.xpath.XPath;
-import org.apache.xpath.XPathContext;
-
import org.apache.batik.anim.dom.XBLOMContentElement;
import org.apache.batik.dom.AbstractDocument;
-
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.xpath.XPathException;
+import javax.xml.namespace.NamespaceContext;
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpression;
+import javax.xml.xpath.XPathExpressionException;
+import javax.xml.xpath.XPathFactory;
+import java.util.ArrayList;
+import java.util.Iterator;
+
/**
* A class to handle the XPath Pattern syntax for XBL content elements.
*
@@ -48,12 +50,7 @@ public class XPathPatternContentSelector extends AbstractContentSelector {
/**
* The XPath expression.
*/
- protected XPath xpath;
-
- /**
- * The XPath context.
- */
- protected XPathContext context;
+ protected XPathExpression xpath;
/**
* The selected nodes.
@@ -81,10 +78,11 @@ public class XPathPatternContentSelector extends AbstractContentSelector {
* Parses the XPath selector.
*/
protected void parse() {
- context = new XPathContext();
try {
- xpath = new XPath(expression, null, prefixResolver, XPath.MATCH);
- } catch (javax.xml.transform.TransformerException te) {
+ XPath xPathAPI = XPathFactory.newInstance().newXPath();
+ xPathAPI.setNamespaceContext(prefixResolver);
+ xpath = xPathAPI.compile(expression);
+ } catch (XPathExpressionException te) {
AbstractDocument doc
= (AbstractDocument) contentElement.getOwnerDocument();
throw doc.createXPathException
@@ -173,9 +171,8 @@ public class XPathPatternContentSelector extends AbstractContentSelector {
protected void update(Node n) {
if (!isSelected(n)) {
try {
- double matchScore
- = xpath.execute(context, n, prefixResolver).num();
- if (matchScore != XPath.MATCH_SCORE_NONE) {
+ Double matchScore = (Double) xpath.evaluate(n, XPathConstants.NUMBER);
+ if (matchScore != null) {
if (!descendantSelected(n)) {
nodes.add(n);
}
@@ -186,7 +183,7 @@ public class XPathPatternContentSelector extends AbstractContentSelector {
n = n.getNextSibling();
}
}
- } catch (javax.xml.transform.TransformerException te) {
+ } catch (XPathExpressionException te) {
AbstractDocument doc
= (AbstractDocument) contentElement.getOwnerDocument();
throw doc.createXPathException
@@ -217,36 +214,20 @@ public class XPathPatternContentSelector extends AbstractContentSelector {
/**
* Xalan prefix resolver.
*/
- protected class NSPrefixResolver implements PrefixResolver {
-
- /**
- * Get the base URI for this resolver. Since this resolver isn't
- * associated with a particular node, returns null.
- */
- public String getBaseIdentifier() {
- return null;
- }
-
+ protected class NSPrefixResolver implements NamespaceContext {
/**
* Resolves the given namespace prefix.
*/
- public String getNamespaceForPrefix(String prefix) {
+ public String getNamespaceURI(String prefix) {
return contentElement.lookupNamespaceURI(prefix);
}
- /**
- * Resolves the given namespace prefix.
- */
- public String getNamespaceForPrefix(String prefix, Node context) {
- // ignore the context node
- return contentElement.lookupNamespaceURI(prefix);
+ public String getPrefix(String namespaceURI) {
+ return null;
}
- /**
- * Returns whether this PrefixResolver handles a null prefix.
- */
- public boolean handlesNullPrefixes() {
- return false;
+ public Iterator getPrefixes(String namespaceURI) {
+ return null;
}
}
}
diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/apache/batik/dom/AbstractDocument.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/apache/batik/dom/AbstractDocument.java
index 35d586836..31319eb83 100644
--- a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/apache/batik/dom/AbstractDocument.java
+++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/apache/batik/dom/AbstractDocument.java
@@ -45,12 +45,6 @@ import org.apache.batik.util.DOMConstants;
import org.apache.batik.util.SoftDoublyIndexedTable;
import org.apache.batik.constants.XMLConstants;
-import org.apache.xml.utils.PrefixResolver;
-
-import org.apache.xpath.XPath;
-import org.apache.xpath.XPathContext;
-import org.apache.xpath.objects.XObject;
-
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.DocumentType;
@@ -79,6 +73,13 @@ import org.w3c.dom.xpath.XPathExpression;
import org.w3c.dom.xpath.XPathNSResolver;
import org.w3c.dom.xpath.XPathResult;
+import javax.xml.namespace.NamespaceContext;
+import javax.xml.transform.TransformerException;
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpressionException;
+import javax.xml.xpath.XPathFactory;
+
/**
* This class implements the {@link org.w3c.dom.Document} interface.
*
@@ -2177,7 +2178,7 @@ public abstract class AbstractDocument
/**
* The compiled XPath expression.
*/
- protected XPath xpath;
+ protected javax.xml.xpath.XPathExpression xpath;
/**
* The namespace resolver.
@@ -2189,11 +2190,6 @@ public abstract class AbstractDocument
*/
protected NSPrefixResolver prefixResolver;
- /**
- * The XPathContext object.
- */
- protected XPathContext context;
-
/**
* Creates a new XPathExpr object.
*/
@@ -2202,9 +2198,10 @@ public abstract class AbstractDocument
resolver = res;
prefixResolver = new NSPrefixResolver();
try {
- xpath = new XPath(expr, null, prefixResolver, XPath.SELECT);
- context = new XPathContext();
- } catch (javax.xml.transform.TransformerException te) {
+ XPath xPathAPI = XPathFactory.newInstance().newXPath();
+ xPathAPI.setNamespaceContext(prefixResolver);
+ xpath = xPathAPI.compile(expr);
+ } catch (XPathExpressionException te) {
throw createXPathException
(XPathException.INVALID_EXPRESSION_ERR,
"xpath.invalid.expression",
@@ -2245,48 +2242,25 @@ public abstract class AbstractDocument
new Object[] {(int) contextNode.getNodeType(),
contextNode.getNodeName() });
}
- context.reset();
- XObject result = null;
- try {
- result = xpath.execute(context, contextNode, prefixResolver);
- } catch (javax.xml.transform.TransformerException te) {
- throw createXPathException
- (XPathException.INVALID_EXPRESSION_ERR,
- "xpath.error",
- new Object[] { xpath.getPatternString(),
- te.getMessage() });
- }
+
try {
switch (type) {
case XPathResult.ANY_UNORDERED_NODE_TYPE:
case XPathResult.FIRST_ORDERED_NODE_TYPE:
- return convertSingleNode(result, type);
+ return new Result((Node) xpath.evaluate(contextNode, XPathConstants.NODE), type);
case XPathResult.BOOLEAN_TYPE:
- return convertBoolean(result);
+ return new Result((Boolean) xpath.evaluate(contextNode, XPathConstants.BOOLEAN));
case XPathResult.NUMBER_TYPE:
- return convertNumber(result);
+ return new Result((Double) xpath.evaluate(contextNode, XPathConstants.NUMBER));
case XPathResult.ORDERED_NODE_ITERATOR_TYPE:
case XPathResult.UNORDERED_NODE_ITERATOR_TYPE:
case XPathResult.ORDERED_NODE_SNAPSHOT_TYPE:
case XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE:
- return convertNodeIterator(result, type);
+ return new Result((Node) xpath.evaluate(contextNode, XPathConstants.NODE), type);
case XPathResult.STRING_TYPE:
- return convertString(result);
- case XPathResult.ANY_TYPE:
- switch (result.getType()) {
- case XObject.CLASS_BOOLEAN:
- return convertBoolean(result);
- case XObject.CLASS_NUMBER:
- return convertNumber(result);
- case XObject.CLASS_STRING:
- return convertString(result);
- case XObject.CLASS_NODESET:
- return convertNodeIterator
- (result,
- XPathResult.UNORDERED_NODE_ITERATOR_TYPE);
- }
+ return new Result((String) xpath.evaluate(contextNode, XPathConstants.STRING));
}
- } catch (javax.xml.transform.TransformerException te) {
+ } catch (XPathExpressionException | TransformerException te) {
throw createXPathException
(XPathException.TYPE_ERR,
"xpath.cannot.convert.result",
@@ -2296,45 +2270,6 @@ public abstract class AbstractDocument
return null;
}
- /**
- * Converts an XObject to a single node XPathResult.
- */
- protected Result convertSingleNode(XObject xo, short type)
- throws javax.xml.transform.TransformerException {
- return new Result(xo.nodelist().item(0), type);
- }
-
- /**
- * Converts an XObject to a boolean XPathResult.
- */
- protected Result convertBoolean(XObject xo)
- throws javax.xml.transform.TransformerException {
- return new Result(xo.bool());
- }
-
- /**
- * Converts an XObject to a number XPathResult.
- */
- protected Result convertNumber(XObject xo)
- throws javax.xml.transform.TransformerException {
- return new Result(xo.num());
- }
-
- /**
- * Converts an XObject to a string XPathResult.
- */
- protected Result convertString(XObject xo) {
- return new Result(xo.str());
- }
-
- /**
- * Converts an XObject to a node iterator XPathResult.
- */
- protected Result convertNodeIterator(XObject xo, short type)
- throws javax.xml.transform.TransformerException {
- return new Result(xo.nodelist(), type);
- }
-
/**
* XPathResult implementation.
* XXX Namespace nodes are not handled correctly, since Xalan returns
@@ -2537,42 +2472,23 @@ public abstract class AbstractDocument
/**
* Xalan prefix resolver.
*/
- protected class NSPrefixResolver implements PrefixResolver {
-
- /**
- * Get the base URI for this resolver. Since this resolver isn't
- * associated with a particular node, returns null.
- */
- public String getBaseIdentifier() {
- return null;
- }
-
+ protected class NSPrefixResolver implements NamespaceContext {
/**
* Resolves the given namespace prefix.
*/
- public String getNamespaceForPrefix(String prefix) {
+ public String getNamespaceURI(String prefix) {
if (resolver == null) {
return null;
}
return resolver.lookupNamespaceURI(prefix);
}
- /**
- * Resolves the given namespace prefix.
- */
- public String getNamespaceForPrefix(String prefix, Node context) {
- // ignore the context node
- if (resolver == null) {
- return null;
- }
- return resolver.lookupNamespaceURI(prefix);
+ public String getPrefix(String namespaceURI) {
+ return null;
}
- /**
- * Returns whether this PrefixResolver handles a null prefix.
- */
- public boolean handlesNullPrefixes() {
- return false;
+ public Iterator getPrefixes(String namespaceURI) {
+ return null;
}
}
}
diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/apache/batik/script/rhino/RhinoClassShutter.java b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/apache/batik/script/rhino/RhinoClassShutter.java
index f6524f6c0..307affae6 100644
--- a/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/apache/batik/script/rhino/RhinoClassShutter.java
+++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/java/org/apache/batik/script/rhino/RhinoClassShutter.java
@@ -20,6 +20,9 @@ package org.apache.batik.script.rhino;
import org.mozilla.javascript.ClassShutter;
+import java.util.Arrays;
+import java.util.List;
+
/**
* Class shutter that restricts access to Batik internals from script.
*
@@ -27,6 +30,7 @@ import org.mozilla.javascript.ClassShutter;
* @version $Id$
*/
public class RhinoClassShutter implements ClassShutter {
+ private static final List WHITELIST = Arrays.asList("java.io.PrintStream", "java.lang.System", "java.net.URL");
/*
public RhinoClassShutter() {
@@ -55,6 +59,10 @@ public class RhinoClassShutter implements ClassShutter {
* Returns whether the given class is visible to scripts.
*/
public boolean visibleToScripts(String fullClassName) {
+ if (!WHITELIST.contains(fullClassName) && !fullClassName.endsWith("Permission") && !fullClassName.startsWith("org.")) {
+ return false;
+ }
+
// Don't let them mess with script engine's internals.
if (fullClassName.startsWith("org.mozilla.javascript"))
return false;
diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/resources/NOTICE b/fine-xmlgraphics/xmlgraphics-batik/src/main/resources/NOTICE
index 146dcd046..d794a759a 100644
--- a/fine-xmlgraphics/xmlgraphics-batik/src/main/resources/NOTICE
+++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/resources/NOTICE
@@ -1,5 +1,5 @@
Apache Batik
-Copyright 1999-2020 The Apache Software Foundation
+Copyright 1999-2022 The Apache Software Foundation
This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).
diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/resources/org/org/apache/batik/bridge/resources/Messages.properties b/fine-xmlgraphics/xmlgraphics-batik/src/main/resources/org/org/apache/batik/bridge/resources/Messages.properties
new file mode 100644
index 000000000..5e8b22de4
--- /dev/null
+++ b/fine-xmlgraphics/xmlgraphics-batik/src/main/resources/org/org/apache/batik/bridge/resources/Messages.properties
@@ -0,0 +1,140 @@
+# -----------------------------------------------------------------------------
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# $Id$
+# -----------------------------------------------------------------------------
+
+attribute.missing = \
+{0}:{1}\n\
+The attribute "{3}" of the element <{2}> is required
+
+attribute.malformed = \
+{0}:{1}\n\
+The attribute "{3}" of the element <{2}> is invalid
+
+attribute.not.animatable = \
+{0}:{1}\n\
+The attribute "{4}" of the element <{3}> is not animatable
+
+type.not.animatable = \
+{0}:{1}\n\
+The attribute "{4}" of the element <{3}> cannot be animated with the \
+<{5}> element
+
+length.negative = \
+{0}:{1}\n\
+The attribute "{3}" of the element <{2}> cannot be negative
+
+css.length.negative = \
+{0}:{1}\n\
+The CSS property "{3}" found on the element <{2}> cannot be negative
+
+css.uri.badTarget = \
+{0}:{1}\n\
+The URI "{3}"\n\
+for a CSS property found on the element <{2}> is invalid
+
+xlink.href.circularDependencies = \
+{0}:{1}\n\
+A circular dependency has been detected on the element <{2}> for the URI:\n\
+"{3}"
+
+uri.malformed = \
+{0}:{1}\n\
+The URI "{3}"\n\
+specified on the element <{2}> is invalid
+
+uri.badTarget = \
+{0}:{1}\n\
+Cannot find the referenced element:\n\
+"{3}"\n\
+specified on the element <{2}> - may be a problem of ''id''
+
+uri.io = \
+{0}:{1}\n\
+An I/O error occured while processing the URI:\n\
+"{3}"\n\
+specified on the element <{2}>
+
+uri.unsecure = \
+{0}:{1}\n\
+A security exception occured while processing the URI:\n\
+"{3}"\n\
+specified on the element <{2}>
+
+uri.referenceDocument = \
+{0}:{1}\n\
+The URI "{3}"\n\
+specified on the element <{2}> references an entire document. \n\
+This is illegal: The element <{2}> must reference an element\n\
+inside a document.
+
+uri.image.invalid = \
+{0}:{1}\n\
+The URI "{3}"\n\
+specified on the element <{2}> is invalid
+
+uri.image.broken = \
+{0}:{1}\n\
+The URI "{3}"\n\
+on element <{2}> can''t be opened because:\n\
+{4}
+
+uri.image.error = \
+The URI can''t be opened:\n\
+{0}
+
+##########################################################################
+# Messages for DefaultScriptSecurity
+##########################################################################
+
+DefaultScriptSecurity.error.cannot.access.document.url = \
+Could not access the current document URL when trying to load script file {0}. Script will not be loaded as it is not possible to verify it comes from the same location as the document.
+
+DefaultScriptSecurity.error.script.from.different.url = \
+The document references a script file ({0}) which comes from different location than the document itself. This is not allowed with the current security settings and that script will not be loaded.
+
+EmbededScriptSecurity.error.script.not.embeded = \
+The document references a script file ({0}) which is not embeded in the document. This is not allowed with the current security settings and that script will not be loaded.
+
+EmbededExternalResourceSecurity.error.external.resource.not.embeded = \
+The document references a resource ({0}) which is not embeded in the document. This is not allowed with the current security settings and that resource cannot be loaded.
+
+NoLoadScriptSecurity.error.no.script.of.type.allowed = \
+Scripts of type ({0}) cannot be loaded and executed with the current security settings.
+
+DefaultExternalResourceSecurity.error.cannot.access.document.url = \
+Could not access the current document URL when trying to load an external resource {0}. The external resource will not be loaded as it is not possible to verify it comes from the same location as the document.
+
+DefaultExternalResourceSecurity.error.external.resource.from.different.url = \
+The document references a external resource ({0}) which comes from different location than the document itself. This is not allowed for security reasons and that resource will not be loaded.
+
+NoLoadExternalResourceSecurity.error.no.external.resource.allowed = \
+The security settings do not allow any external resources to be referenced from the document
+
+##########################################################################
+# Messages for BaseScriptingEnvironment
+##########################################################################
+
+BaseScriptingEnvironment.constant.inline.script.description = \
+Inline {1} {0}:{2}
+
+BaseScriptingEnvironment.constant.event.script.description = \
+Event attribute {0}:{2} {1}
+
+SVG12ScriptingEnvironment.constant.handler.script.description = \
+Handler {0}:{3} {1} {2}
diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/resources/org/org/apache/batik/bridge/resources/help.gif b/fine-xmlgraphics/xmlgraphics-batik/src/main/resources/org/org/apache/batik/bridge/resources/help.gif
new file mode 100644
index 000000000..6a5de8cb8
Binary files /dev/null and b/fine-xmlgraphics/xmlgraphics-batik/src/main/resources/org/org/apache/batik/bridge/resources/help.gif differ
diff --git a/fine-xmlgraphics/xmlgraphics-batik/src/main/resources/org/org/apache/batik/bridge/resources/move.gif b/fine-xmlgraphics/xmlgraphics-batik/src/main/resources/org/org/apache/batik/bridge/resources/move.gif
new file mode 100644
index 000000000..90bb091bc
Binary files /dev/null and b/fine-xmlgraphics/xmlgraphics-batik/src/main/resources/org/org/apache/batik/bridge/resources/move.gif differ