@Override public AttrsNode clone() throws CloneNotSupportedException { AttrsNode clone = (AttrsNode) super.clone(); // shallow copy if (this.attributes != null) { clone.attributes = new LinkedList<Attr>(this.attributes); } if (this.attributes != null) { clone.attributeBlocks = new LinkedList<String>(this.attributeBlocks); } return clone; } public void addAttributes(String src){
@Override public void execute(IndentWriter writer, JadeModel model, JadeTemplate template) throws JadeCompilerException { try { boolean skip = false; for (Node when : block.getNodes()) { if (skip || "default".equals(when.getValue()) || checkCondition(model, when,template.getExpressionHandler())) { skip = false; if(when.getBlock()!=null) { when.execute(writer, model, template); break; }else { skip = true; } } } } catch (ExpressionException e) { throw new JadeCompilerException(this, template.getTemplateLoader(), e); } }
public JadeCompilerException(Node node, TemplateLoader templateLoader, String message) { super(message, node.getFileName(), node.getLineNumber(), templateLoader, null); }
private List<MixinBlockNode> getInjectionPoints(Node block) { List<MixinBlockNode> result = new ArrayList<MixinBlockNode>(); for (Node node : block.getNodes()) { if (node instanceof MixinBlockNode && !node.hasNodes()) { result.add((MixinBlockNode) node); } else if(node instanceof ConditionalNode){ for (IfConditionNode condition : ((ConditionalNode) node).getConditions()) { result.addAll(getInjectionPoints(condition.getBlock())); } // } else if(node instanceof CaseNode.When){ // for (CaseConditionNode condition : ((CaseNode) node).getCaseConditionNodes()) { // result.addAll(getInjectionPoints(condition.getBlock())); // } } else if (node.hasBlock()) { result.addAll(getInjectionPoints(node.getBlock())); } } return result; }
@Override public void execute(IndentWriter writer, JadeModel model, JadeTemplate template) throws JadeCompilerException { block.execute(writer, model, template); } }
@Override public void execute(IndentWriter writer, JadeModel model, JadeTemplate template) throws JadeCompilerException { Filter filter = model.getFilter(getValue()); ArrayList<String> values = new ArrayList<String>(); LinkedList<Node> nodes = textBlock.getNodes(); for (Node node : nodes) { values.add(node.getValue()); } String result = StringUtils.join(values, "\n"); if (filter != null) { result = filter.convert(result, attributes, model); } try { result = Utils.interpolate(result, model, false,template.getExpressionHandler()); } catch (ExpressionException e) { throw new JadeCompilerException(this, template.getTemplateLoader(), e); } writer.append(result); }
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 parseCall() { Token token = expect(Call.class); Call callToken = (Call) token; MixinNode mixin = new MixinNode(); mixin.setBlock(new BlockNode()); mixin.setName(callToken.getValue()); mixin.setLineNumber(callToken.getLineNumber()); mixin.setFileName(filename); mixin.setCall(true); if (StringUtils.isNotBlank(callToken.getArguments())) { mixin.setArguments(callToken.getArguments()); } this.tag(mixin); if(mixin.hasCodeNode()) { mixin.getBlock().push(mixin.getCodeNode()); mixin.setCodeNode(null); } if(mixin.hasBlock() && mixin.getBlock().getNodes().isEmpty()) mixin.setBlock(null); return mixin; }
private Boolean checkCondition(JadeModel model, Node caseConditionNode, ExpressionHandler expressionHandler) throws ExpressionException { return expressionHandler.evaluateBooleanExpression(value + " == " + caseConditionNode.getValue(), model); }
public boolean canInline (){ Node block = this.getBlock(); if(block==null) return true; LinkedList<Node> nodes = block.getNodes(); // Empty tag if (nodes.size()==0) return true; // Text-only or inline-only tag if (1 == nodes.size()) return isInline(nodes.get(0)); // Multi-line inline-only tag if (everyIsInline(nodes)) { for (int i = 1, len = nodes.size(); i < len; ++i) { if (nodes.get(i-1) instanceof TextNode && nodes.get(i) instanceof TextNode) return false; } return true; } // Mixed tag return false; }; @Override
private List<MixinBlockNode> getInjectionPoints(Node block) { List<MixinBlockNode> result = new ArrayList<MixinBlockNode>(); for (Node node : block.getNodes()) { if (node instanceof MixinBlockNode && !node.hasNodes()) { result.add((MixinBlockNode) node); } else if(node instanceof ConditionalNode){ for (IfConditionNode condition : ((ConditionalNode) node).getConditions()) { result.addAll(getInjectionPoints(condition.getBlock())); } // } else if(node instanceof CaseNode.When){ // for (CaseConditionNode condition : ((CaseNode) node).getCaseConditionNodes()) { // result.addAll(getInjectionPoints(condition.getBlock())); // } } else if (node.hasBlock()) { result.addAll(getInjectionPoints(node.getBlock())); } } return result; }
private void executeElseNode(JadeModel model, IndentWriter writer, JadeTemplate template) { if (elseNode != null) { elseNode.execute(writer, model, template); } }
@Override public void execute(IndentWriter writer, JadeModel model, JadeTemplate template) throws JadeCompilerException { Filter filter = model.getFilter(getValue()); ArrayList<String> values = new ArrayList<String>(); LinkedList<Node> nodes = textBlock.getNodes(); for (Node node : nodes) { values.add(node.getValue()); } String result = StringUtils.join(values, "\n"); if (filter != null) { result = filter.convert(result, attributes, model); } try { result = Utils.interpolate(result, model, false,template.getExpressionHandler()); } catch (ExpressionException e) { throw new JadeCompilerException(this, template.getTemplateLoader(), e); } writer.append(result); }
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 parseCall() { Token token = expect(Call.class); Call callToken = (Call) token; MixinNode mixin = new MixinNode(); mixin.setBlock(new BlockNode()); mixin.setName(callToken.getValue()); mixin.setLineNumber(callToken.getLineNumber()); mixin.setFileName(filename); mixin.setCall(true); if (StringUtils.isNotBlank(callToken.getArguments())) { mixin.setArguments(callToken.getArguments()); } this.tag(mixin); if(mixin.hasCodeNode()) { mixin.getBlock().push(mixin.getCodeNode()); mixin.setCodeNode(null); } if(mixin.hasBlock() && mixin.getBlock().getNodes().isEmpty()) mixin.setBlock(null); return mixin; }
Node[] rest = this.parseInlineTagsInText(matcher.group(2)); if (rest[0] instanceof TextNode) { text.setValue(text.getValue() + rest[0].getValue()); rest = ArrayUtils.remove(rest,0);
public Node parse() { BlockNode block = new BlockNode(); block.setLineNumber(lexer.getLineno()); block.setFileName(filename); while (!(peek() instanceof Eos)) { if (peek() instanceof Newline) { advance(); } else { Node expr = parseExpr(); if (expr != null) { block.push(expr); } } } if (extending != null) { getContexts().push(extending); Node rootNode = extending.parse(); getContexts().pop(); // hoist mixins Set<String> keySet = this.mixins.keySet(); for (String name : keySet) { rootNode.getNodes().push(this.mixins.get(name)); } return rootNode; } return block; }
@Override public void execute(IndentWriter writer, JadeModel model, JadeTemplate template) throws JadeCompilerException { try { boolean skip = false; for (Node when : block.getNodes()) { if (skip || "default".equals(when.getValue()) || checkCondition(model, when,template.getExpressionHandler())) { skip = false; if(when.getBlock()!=null) { when.execute(writer, model, template); break; }else { skip = true; } } } } catch (ExpressionException e) { throw new JadeCompilerException(this, template.getTemplateLoader(), e); } }