@Test public void testMultipleTemplates() { String fragment = "<template><foo/><bar/><baz/></template><template><qux/></template>"; StringReader reader = new StringReader(fragment); VueLexer lexer = new VueLexer(); List<Node> nodeList = lexer.parse(reader); assertEquals(3, nodeList.size()); }
@Override public List<Node> parse(Reader reader) { List<Node> nodes = super.parse(reader); boolean firstTemplateTag = true; List<Node> templateNodes = new LinkedList<>(); Deque<Object> templateLevels = new LinkedList<>(); for (Node node : nodes) { if (node.getNodeType() == NodeType.TAG) { TagNode tagNode = (TagNode) node; if (tagNode.equalsElementName(TEMPLATE)) { if (tagNode.isEndElement()) { if (!templateLevels.isEmpty()) { templateLevels.pop(); if (templateLevels.isEmpty()) { break; } } } else if (!tagNode.hasEnd()) { templateLevels.push(TEMPLATE_LEVEL); } } } if (!templateLevels.isEmpty()) { if (firstTemplateTag) { firstTemplateTag = false; } else { templateNodes.add(node); } } } return templateNodes; }
VueLexer extends PageLexer { @Override public List<Node> parse(Reader reader) { List<Node> nodes = super.parse(reader); boolean firstTemplateTag = true; List<Node> templateNodes = new LinkedList<>(); Deque<Object> templateLevels = new LinkedList<>(); for (Node node : nodes) { if (node.getNodeType() == NodeType.TAG) { TagNode tagNode = (TagNode) node; if (tagNode.equalsElementName(TEMPLATE)) { if (tagNode.isEndElement()) { if (!templateLevels.isEmpty()) { templateLevels.pop(); if (templateLevels.isEmpty()) { break; } } } else if (!tagNode.hasEnd()) { templateLevels.push(TEMPLATE_LEVEL); } } } if (!templateLevels.isEmpty()) { if (firstTemplateTag) { firstTemplateTag = false; } else { templateNodes.add(node); } } } return templateNodes; } }
VueLexer extends PageLexer { @Override public List<Node> parse(Reader reader) { List<Node> nodes = super.parse(reader); boolean firstTemplateTag = true; List<Node> templateNodes = new LinkedList<>(); Deque<Object> templateLevels = new LinkedList<>(); for (Node node : nodes) { if (node.getNodeType() == NodeType.TAG) { TagNode tagNode = (TagNode) node; if (tagNode.equalsElementName(TEMPLATE)) { if (tagNode.isEndElement()) { if (!templateLevels.isEmpty()) { templateLevels.pop(); if (templateLevels.isEmpty()) { break; } } } else if (!tagNode.hasEnd()) { templateLevels.push(TEMPLATE_LEVEL); } } } if (!templateLevels.isEmpty()) { if (firstTemplateTag) { firstTemplateTag = false; } else { templateNodes.add(node); } } } return templateNodes; }  }
VueLexer extends PageLexer { @Override public List<Node> parse(Reader reader) { List<Node> nodes = super.parse(reader); boolean firstTemplateTag = true; List<Node> templateNodes = new LinkedList<>(); Deque<Object> templateLevels = new LinkedList<>(); for (Node node : nodes) { if (node.getNodeType() == NodeType.TAG) { TagNode tagNode = (TagNode) node; if (tagNode.equalsElementName(TEMPLATE)) { if (tagNode.isEndElement()) { if (!templateLevels.isEmpty()) { templateLevels.pop(); if (templateLevels.isEmpty()) { break; } } } else if (!tagNode.hasEnd()) { templateLevels.push(TEMPLATE_LEVEL); } } } if (!templateLevels.isEmpty()) { if (firstTemplateTag) { firstTemplateTag = false; } else { templateNodes.add(node); } } } return templateNodes; }  @Override List<Node> parse(Reader reader); }
VueLexer extends PageLexer { @Override public List<Node> parse(Reader reader) { List<Node> nodes = super.parse(reader); boolean firstTemplateTag = true; List<Node> templateNodes = new LinkedList<>(); Deque<Object> templateLevels = new LinkedList<>(); for (Node node : nodes) { if (node.getNodeType() == NodeType.TAG) { TagNode tagNode = (TagNode) node; if (tagNode.equalsElementName(TEMPLATE)) { if (tagNode.isEndElement()) { if (!templateLevels.isEmpty()) { templateLevels.pop(); if (templateLevels.isEmpty()) { break; } } } else if (!tagNode.hasEnd()) { templateLevels.push(TEMPLATE_LEVEL); } } } if (!templateLevels.isEmpty()) { if (firstTemplateTag) { firstTemplateTag = false; } else { templateNodes.add(node); } } } return templateNodes; }  @Override List<Node> parse(Reader reader);  }