blockNode = block(); } else { blockNode = new BlockNode(); blockNode.setLineNumber(block.getLineNumber()); blockNode.setFileName(filename); LiteralNode node = new LiteralNode(); node.setValue(""); blockNode.push(node); blockNode.setName(name); blockNode.setLineNumber(line()); prev = new BlockNode(); else prev = this.blocks.get(name); if ("replace".equals(prev.getMode())) { this.blocks.put(name, prev); return prev; allNodes.addAll(prev.getPrepended()); allNodes.addAll(blockNode.getNodes()); allNodes.addAll(prev.getAppended()); if(prev.getParser() == this){ appendedNodes.addAll(prev.getAppended()); appendedNodes.addAll(blockNode.getNodes()); }else{ appendedNodes.addAll(blockNode.getNodes());
public BlockNode getIncludeBlock() { BlockNode ret = this; for (Node node : getNodes()) { if (node instanceof BlockNode && ((BlockNode) node).isYield()) { return (BlockNode) node; } else if (node instanceof TagNode && ((TagNode) node).isTextOnly()) { continue; } else if (node instanceof BlockNode && ((BlockNode) node).getIncludeBlock() != null) { ret = ((BlockNode) node).getIncludeBlock(); } else if (node.hasBlock()) { ret = ((BlockNode) node.getBlock()).getIncludeBlock(); } if(ret instanceof BlockNode && ((BlockNode) ret).isYield()){ return ret; } } return ret; }
private BlockNode parseYield() { advance(); BlockNode block = new BlockNode(); block.setLineNumber(lexer.getLineno()); block.setFileName(filename); block.setYield(true); return block; } private Node parseInterpolation() {
private Node parseText() { Token tok = expect(Text.class); Node[] tokens = this.parseInlineTagsInText(tok.getValue()); if (tokens.length == 1) return tokens[0]; BlockNode node = new BlockNode(); for (int i = 0; i < tokens.length; i++) { node.push(tokens[i]); } node.setValue(tok.getValue()); node.setLineNumber(tok.getLineNumber()); node.setFileName(filename); return node; }
private Node parseTextBlock() { BlockNode blockNode = new BlockNode(); blockNode.setLineNumber(line()); blockNode.setFileName(filename); Token body = peek(); if(!(body instanceof PipelessText)){ return null; } this.advance(); ArrayList<String> values = body.getValues(); Node[] textNodes = {}; for (String value : values) { textNodes = ArrayUtils.addAll(textNodes,parseInlineTagsInText(value)); } blockNode.setNodes(new LinkedList<Node>(Arrays.asList(textNodes))); return blockNode; }
TextNode text = new TextNode(); text.setValue(IOUtils.toString(reader)); BlockNode block = new BlockNode(); LinkedList<Node> nodes = new LinkedList<Node>(); nodes.add(text); block.setNodes(nodes); if (block != null) node.setTextBlock(block); else { node.setTextBlock(new BlockNode()); ast.setFileName(path); if (peek() instanceof Indent && ast != null) { ((BlockNode) ast).getIncludeBlock().push(block());
public TagNode() { this.block = new BlockNode(); }
public void execute(IndentWriter writer, JadeModel model, JadeTemplate template) throws JadeCompilerException { // Pretty print multi-line text if (writer.isPp() && getNodes().size() > 1 && !writer.isEscape() && getNodes().get(0) instanceof TextNode && getNodes().get(1) instanceof TextNode) writer.prettyIndent(1, true); for (int i = 0; i < getNodes().size(); ++i) { // Pretty print text if (writer.isPp() && i > 0 && !writer.isEscape() && getNodes().get(i) instanceof TextNode && getNodes().get(i - 1) instanceof TextNode) writer.prettyIndent(1, false); getNodes().get(i).execute(writer, model, template); // Multiple text nodes are separated by newlines Node nextNode = null; if(i+1 < getNodes().size()) nextNode = getNodes().get(i + 1); if (nextNode !=null && getNodes().get(i) instanceof TextNode && nextNode instanceof TextNode) writer.append("\n"); } }
private Node blockExpansion() { if (peek() instanceof Colon) { Token token = expect(Colon.class); Colon colon = (Colon) token; BlockNode block = new BlockNode(); block.setLineNumber(colon.getLineNumber()); block.setFileName(filename); block.getNodes().add(parseExpr()); return block; } return block(); }
private BlockNode parseYield() { advance(); BlockNode block = new BlockNode(); block.setLineNumber(lexer.getLineno()); block.setFileName(filename); block.setYield(true); return block; } private Node parseInterpolation() {
private Node parseTextBlock() { BlockNode blockNode = new BlockNode(); blockNode.setLineNumber(line()); blockNode.setFileName(filename); Token body = peek(); if(!(body instanceof PipelessText)){ return null; } this.advance(); ArrayList<String> values = body.getValues(); Node[] textNodes = {}; for (String value : values) { textNodes = ArrayUtils.addAll(textNodes,parseInlineTagsInText(value)); } blockNode.setNodes(new LinkedList<Node>(Arrays.asList(textNodes))); return blockNode; }
TextNode text = new TextNode(); text.setValue(IOUtils.toString(reader)); BlockNode block = new BlockNode(); LinkedList<Node> nodes = new LinkedList<Node>(); nodes.add(text); block.setNodes(nodes); if (block != null) node.setTextBlock(block); else { node.setTextBlock(new BlockNode()); ast.setFileName(path); if (peek() instanceof Indent && ast != null) { ((BlockNode) ast).getIncludeBlock().push(block());
public TagNode() { this.block = new BlockNode(); }
public void execute(IndentWriter writer, JadeModel model, JadeTemplate template) throws JadeCompilerException { // Pretty print multi-line text if (writer.isPp() && getNodes().size() > 1 && !writer.isEscape() && getNodes().get(0) instanceof TextNode && getNodes().get(1) instanceof TextNode) writer.prettyIndent(1, true); for (int i = 0; i < getNodes().size(); ++i) { // Pretty print text if (writer.isPp() && i > 0 && !writer.isEscape() && getNodes().get(i) instanceof TextNode && getNodes().get(i - 1) instanceof TextNode) writer.prettyIndent(1, false); getNodes().get(i).execute(writer, model, template); // Multiple text nodes are separated by newlines Node nextNode = null; if(i+1 < getNodes().size()) nextNode = getNodes().get(i + 1); if (nextNode !=null && getNodes().get(i) instanceof TextNode && nextNode instanceof TextNode) writer.append("\n"); } }
blockNode = block(); } else { blockNode = new BlockNode(); blockNode.setLineNumber(block.getLineNumber()); blockNode.setFileName(filename); LiteralNode node = new LiteralNode(); node.setValue(""); blockNode.push(node); blockNode.setName(name); blockNode.setLineNumber(line()); prev = new BlockNode(); else prev = this.blocks.get(name); if ("replace".equals(prev.getMode())) { this.blocks.put(name, prev); return prev; allNodes.addAll(prev.getPrepended()); allNodes.addAll(blockNode.getNodes()); allNodes.addAll(prev.getAppended()); if(prev.getParser() == this){ appendedNodes.addAll(prev.getAppended()); appendedNodes.addAll(blockNode.getNodes()); }else{ appendedNodes.addAll(blockNode.getNodes());
private BlockNode block() { BlockNode block = new BlockNode(); block.setLineNumber(lexer.getLineno()); block.setFileName(filename); expect(Indent.class); while (!(peek() instanceof Outdent)) { if (peek() instanceof Newline) { advance(); } else { Node parseExpr = this.parseExpr(); parseExpr.setFileName(filename); if (parseExpr != null) { block.push(parseExpr); } } } expect(Outdent.class); return block; }
public BlockNode getIncludeBlock() { BlockNode ret = this; for (Node node : getNodes()) { if (node instanceof BlockNode && ((BlockNode) node).isYield()) { return (BlockNode) node; } else if (node instanceof TagNode && ((TagNode) node).isTextOnly()) { continue; } else if (node instanceof BlockNode && ((BlockNode) node).getIncludeBlock() != null) { ret = ((BlockNode) node).getIncludeBlock(); } else if (node.hasBlock()) { ret = ((BlockNode) node.getBlock()).getIncludeBlock(); } if(ret instanceof BlockNode && ((BlockNode) ret).isYield()){ return ret; } } return ret; }
private Node parseWhile() { Token token = expect(While.class); While whileToken = (While) token; WhileNode node = new WhileNode(); node.setValue(whileToken.getValue()); node.setLineNumber(whileToken.getLineNumber()); node.setFileName(filename); BlockNode block = block(); if(block!=null) node.setBlock(block); else node.setBlock(new BlockNode()); return node; }