private static void scanElementTag(DefaultNodeVisitor visitor, TagNode node) { if (!node.isEndElement()) { visitor.startElement(node); } if (node.isEndElement() || node.hasEnd()) { visitor.endElement(node); } }
/** * Scan a single element and send appropriate event: start element, end element, characters, * comment, expression or directive. */ private void scanElement(DefaultNodeVisitor visitor, Node node) { switch (node.getNodeType()) { case TAG: scanElementTag(visitor, (TagNode) node); break; case TEXT: visitor.characters((TextNode) node); break; case COMMENT: visitor.comment((CommentNode) node); break; case EXPRESSION: visitor.expression((ExpressionNode) node); break; case DIRECTIVE: visitor.directive((DirectiveNode) node); break; default: break; } }
private void scan( List<Node> nodeList, WebSourceCode webSourceCode, Charset charset, List<DefaultNodeVisitor> visitors) { // prepare the visitors for (DefaultNodeVisitor visitor : visitors) { visitor.setSourceCode(webSourceCode); if (visitor instanceof CharsetAwareVisitor) { ((CharsetAwareVisitor) visitor).setCharset(charset); } } // notify visitors for a new document for (DefaultNodeVisitor visitor : visitors) { visitor.startDocument(nodeList); } // notify the visitors for start and end of element for (Node node : nodeList) { for (DefaultNodeVisitor visitor : visitors) { scanElement(visitor, node); } } // notify visitors for end of document for (DefaultNodeVisitor visitor : visitors) { visitor.endDocument(); } }
/** Add a visitor to the list of visitors. */ public void addVisitor(DefaultNodeVisitor visitor) { checkVisitors.add(visitor); visitor.init(); }