1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.vectomatic.dom.svg.impl;
19
20 import org.vectomatic.dom.svg.utils.DOMHelper;
21 import org.vectomatic.dom.svg.utils.ParserException;
22 import org.vectomatic.dom.svg.utils.XPathPrefixResolver;
23
24 import com.google.gwt.dom.client.Element;
25 import com.google.gwt.dom.client.Text;
26
27
28
29
30
31 public class SVGParserImplWebkit extends SVGParserImpl {
32
33
34
35
36
37
38
39
40
41 @Override
42 public final SVGSVGElement parse(String rawSvg, boolean enableScripts) throws ParserException {
43 if (isIE()) {
44 return parseIE(rawSvg, enableScripts);
45 }
46 SVGDocument doc = parseFromString(rawSvg, "text/xml").cast();
47 Element elt = doc.getDocumentElement();
48 if ("parsererror".equals(DOMHelper.getLocalName(elt))) {
49 String message = "Parsing error";
50 if (elt.getFirstChild() != null) {
51 message = elt.getFirstChild().<Text>cast().getData();
52 }
53 throw new ParserException(ParserException.Type.NotWellFormed, message);
54 } else if ("html".equals(DOMHelper.getLocalName(elt))) {
55 String message = DOMHelper.evaluateStringXPath(elt, "./x:body/x:parsererror/x:div/text()", new XPathPrefixResolver() {
56 @Override
57 public String resolvePrefix(String prefix) {
58 if ("x".equals(prefix)) {
59 return "http://www.w3.org/1999/xhtml";
60 }
61 return null;
62 }
63 });
64 throw new ParserException(ParserException.Type.NotWellFormed, message);
65 }
66
67
68 SVGSVGElement svg = DOMHelper.importNode(DOMHelper.getCurrentDocument(), elt, true).cast();
69 svg = svg.cloneNode(true).<SVGSVGElement>cast();
70 return enableScripts ? enableScriptElements(svg) : svg;
71 }
72
73 }