public Node parse(Node xml, String s) { s = s.trim(); int i; T context = createContext(); xml.name("document"); Node child = new Node(); while ((i = context.parse(s.toCharArray(), child) + 1) < s.length()) { if (child.name == null && child.children.size() == 1) child = child.children.get(0); xml.add(child); child = new Node(); context = createContext(); context.i = i; } if (child.name == null && child.children.size() == 1) child = child.children.get(0); xml.add(child); return xml; }
public boolean checkTagLib(final Node n, RenderableList l, String dir, String offset, Set<String> imports) { if (n.name().equals("g:render")) { String model = n.attr("model"); if (model == null) if (TagLib.hasTag(n.name())) { Tag t = TagLib.createTag(n.name()); if (t != null) { t.setImports(imports);
return; if (n.name() == null) { l.append(offset); prepare(n.textOwn(), l, imports); l.append("<").append(n.name()); for (Map.Entry<String, String> attr : n.attributes().entrySet()) { l.append(" "); l.append("</").append(n.name()).append(">"); } else if (n.name().equalsIgnoreCase("div")) l.append("></").append(n.name()).append(">"); else if (n.name().equalsIgnoreCase("!DOCTYPE")) l.append(">"); else
@Test public void gsp_comment_2() throws IOException { String s = "" + "<div %{--foo=\"${bar}\"--}%>\n" + " \n" + "</div>\n"; Node root = new GspParser().parse(s); Node div = root.children().get(0); Assert.assertEquals("div", div.name()); Assert.assertEquals(0, div.children().size()); Assert.assertEquals(0, div.attributes().size()); }
@Test public void gsp_page2() throws IOException { String s = "<%@ page contentType=\"text/html;charset=UTF-8\" %>\n" + "<!DOCTYPE html>\n" + "<html>\n" + "<head>\n" + " <title>title</title>\n" + "</head>" + "</html>"; Node doc = new GspParser().parse(s); Assert.assertEquals(3, doc.children().size()); Assert.assertEquals("%@", doc.get(0).name()); Assert.assertEquals("!DOCTYPE", doc.get(1).name()); Assert.assertEquals("html", doc.get(2).name()); } }
@Test public void gsp_page() throws IOException { String s = "<%@ page contentType=\"text/html;charset=UTF-8\" %>\n" + "<!DOCTYPE html>\n" + "<html>\n" + "<head>\n" + " <title>title</title>\n" + " %{-- comment! --}%\n" + "</head>" + "</html>"; Node doc = new GspParser().parse(s); Assert.assertEquals(3, doc.children().size()); Assert.assertEquals("%@", doc.get(0).name()); Assert.assertEquals("!DOCTYPE", doc.get(1).name()); Assert.assertEquals("html", doc.get(2).name()); }
@Test public void gsp_1() throws IOException { String s = "<div><g:textField name=\"${it.key}\" placeholder=\"${[].collect({it})}\"/></div>"; Node root = new GspParser().parse(s); Node div = root.children().get(0); Assert.assertEquals("div", div.name()); Assert.assertEquals(1, div.children().size()); Node textField = div.children().get(0); Assert.assertEquals("g:textField", textField.name()); Assert.assertEquals(0, textField.children().size()); Assert.assertEquals(2, textField.attributes().size()); Assert.assertEquals("${it.key}", textField.attr("name")); Assert.assertEquals("${[].collect({it})}", textField.attr("placeholder")); }
@Test public void gsp_2() throws IOException { String s = "<div><g:textField name=\"${it.key}\" placeholder=\"${String.valueOf(it.getValue()).replace(\"\\\"\", \"\")}\"/></div>"; Node root = new GspParser().parse(s); Node div = root.children().get(0); Assert.assertEquals("div", div.name()); Assert.assertEquals(1, div.children().size()); Node textField = div.children().get(0); Assert.assertEquals("g:textField", textField.name()); Assert.assertEquals(0, textField.children().size()); Assert.assertEquals(2, textField.attributes().size()); Assert.assertEquals("${it.key}", textField.attr("name")); Assert.assertEquals("${String.valueOf(it.getValue()).replace(\"\\\"\", \"\")}", textField.attr("placeholder")); }
@Test public void gsp_comment_1() throws IOException { String s = "" + "<div>\n" + " %{--<p>$test</p>--}%\n" + "</div>\n"; Node root = new GspParser().parse(s); Node div = root.children().get(0); Assert.assertEquals("div", div.name()); Assert.assertEquals(1, div.children().size()); Assert.assertEquals(0, div.attributes().size()); Assert.assertEquals("%{--<p>$test</p>--}%", div.children().get(0).textOwn()); }
@Test public void gsp_comment_3() throws IOException { String s = "" + "<div foo=\"bar%{--_$id--}%_0\">\n" + " \n" + "</div>\n"; Node root = new GspParser().parse(s); Node div = root.children().get(0); Assert.assertEquals("div", div.name()); Assert.assertEquals(0, div.children().size()); Assert.assertEquals(1, div.attributes().size()); Assert.assertEquals("bar_0", div.attr("foo")); }
@Test public void gsp_3() throws IOException { String s = "<div id=\"${id}\"><span>foo:</span>${foo}</div>"; Node root = new GspParser().parse(s); Node div = root.children().get(0); Assert.assertEquals("div", div.name()); Assert.assertEquals(2, div.children().size()); Assert.assertEquals(1, div.attributes().size()); Assert.assertEquals("${id}", div.attr("id")); Node span = div.children().get(0); Assert.assertEquals("span", span.name()); Assert.assertEquals(1, span.children().size()); Assert.assertEquals("foo:", span.text()); Node foo = div.children().get(1); Assert.assertEquals("${foo}", foo.text()); }
@Test public void html_doctype() throws IOException { String s = "<!DOCTYPE html>"; Node doc = new HtmlParser().parse(s); Assert.assertEquals(1, doc.children().size()); Assert.assertEquals("!DOCTYPE", doc.get(0).name()); Assert.assertEquals(1, doc.get(0).attributes().size()); Assert.assertEquals(true, doc.get(0).attributes().containsKey("html")); Assert.assertEquals(null, doc.get(0).attributes().get("html")); }
@Test public void html_doctype2() throws IOException { String s = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n"; Node doc = new HtmlParser().parse(s); Assert.assertEquals(1, doc.children().size()); Assert.assertEquals("!DOCTYPE", doc.get(0).name()); Assert.assertEquals(4, doc.get(0).attributes().size()); Assert.assertEquals(true, doc.get(0).attributes().containsKey("HTML")); Assert.assertEquals(null, doc.get(0).attributes().get("HTML")); Assert.assertEquals(true, doc.get(0).attributes().containsKey("PUBLIC")); Assert.assertEquals(null, doc.get(0).attributes().get("PUBLIC")); Assert.assertEquals(true, doc.get(0).attributes().containsKey("\"-//W3C//DTD HTML 4.01//EN\"")); Assert.assertEquals(null, doc.get(0).attributes().get("\"-//W3C//DTD HTML 4.01//EN\"")); Assert.assertEquals(true, doc.get(0).attributes().containsKey("\"http://www.w3.org/TR/html4/strict.dtd\"")); Assert.assertEquals(null, doc.get(0).attributes().get("\"http://www.w3.org/TR/html4/strict.dtd\"")); }
@Test public void gsp_comment_4() throws IOException { String s = "<div>\n" + " before\n" + " %{--<p>text</p>--}%\n" + " after\n" + "</div>"; Node root = new GspParser().parse(s); Node div = root.children().get(0); Assert.assertEquals("div", div.name()); Assert.assertEquals(3, div.children().size()); Assert.assertEquals("before", div.get(0).text()); Assert.assertEquals("%{--<p>text</p>--}%", div.get(1).text()); Assert.assertEquals("after", div.get(2).text()); }
@Test public void gsp_html_comment() throws IOException { String s = "<div>\n" + " before\n" + " <!--<p>text</p>-->\n" + " after\n" + "</div>"; Node root = new GspParser().parse(s); Node div = root.children().get(0); Assert.assertEquals("div", div.name()); Assert.assertEquals(3, div.children().size()); Assert.assertEquals("before", div.get(0).text()); Assert.assertEquals("<!--<p>text</p>-->", div.get(1).text()); Assert.assertEquals("after", div.get(2).text()); }