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 java.util.ArrayList;
21 import java.util.Iterator;
22 import java.util.List;
23
24 import org.vectomatic.dom.svg.utils.DOMHelper;
25 import org.vectomatic.dom.svg.utils.ParserException;
26 import org.vectomatic.dom.svg.utils.SVGPrefixResolver;
27
28 import com.google.gwt.core.client.JavaScriptException;
29 import com.google.gwt.dom.client.Element;
30 import com.google.gwt.dom.client.Text;
31
32
33
34
35
36 public class SVGParserImplIE extends SVGParserImpl {
37
38
39
40
41
42
43
44 public final SVGSVGElement parse(String rawSvg) throws ParserException {
45 SVGDocument doc = null;
46 try {
47 doc = parseFromString(rawSvg, "text/xml").cast();
48
49 } catch(JavaScriptException e) {
50 throw new ParserException(ParserException.Type.NotWellFormed, e.getMessage());
51 }
52 Element elt = doc.getDocumentElement();
53 if ("parsererror".equals(DOMHelper.getLocalName(elt))) {
54 String message = "Parsing error";
55 if (elt.getFirstChild() != null) {
56 message = elt.getFirstChild().<Text>cast().getData();
57 }
58 throw new ParserException(ParserException.Type.NotWellFormed, message);
59 }
60 SVGSVGElement svg = DOMHelper.importNode(DOMHelper.getCurrentDocument(), elt, true).cast();
61
62
63
64 Iterator<Text> iterator = DOMHelper.evaluateNodeListXPath(svg, ".//svg:style/text()", SVGPrefixResolver.INSTANCE);
65 List<Text> styleTexts = new ArrayList<Text>();
66 while(iterator.hasNext()) {
67 Text styleText = iterator.next();
68 styleTexts.add(styleText);
69 }
70 for (Text styleText : styleTexts) {
71 styleText.<Text>cast().setData(styleText.<Text>cast().getData() + " ");
72 }
73
74 return svg;
75 }
76
77 }