Пример #1
0
 @Test
 public void testThatTagNodeIsSelfClosing() {
   for (int i = 0; i < selfClosing.length; i++) {
     tagNode.setName(selfClosing[i]);
     assertTrue(tagNode.isSelfClosing(template));
   }
 }
Пример #2
0
 @Test
 public void testThatTagNodeIsNotSelfClosingIfNotSelfClosingtag() {
   for (int i = 0; i < notSelfClosing.length; i++) {
     tagNode.setName(notSelfClosing[i]);
     assertFalse(tagNode.isSelfClosing(template));
   }
 }
Пример #3
0
 @Test
 public void testThatTagNodeIsNotSelfClosingIfXmlDoctype() {
   template.setMode(Jade4J.Mode.XML);
   for (int i = 0; i < selfClosing.length; i++) {
     tagNode.setName(selfClosing[i]);
     assertFalse(tagNode.isSelfClosing(template));
   }
 }
Пример #4
0
 @Test
 public void testThatTagNodeIsNotTerseIfTempalteSettingIsNotTerse() {
   template.setMode(Jade4J.Mode.XHTML);
   for (int i = 0; i < selfClosing.length; i++) {
     tagNode.setName(selfClosing[i]);
     assertFalse(tagNode.isTerse(template));
   }
 }
Пример #5
0
 @Test
 public void testThatTagNodeIsNotSelfclosingIfTheTagIsNotSelfclosing() {
   template.setMode(Jade4J.Mode.HTML);
   for (int i = 0; i < notSelfClosing.length; i++) {
     tagNode.setName(notSelfClosing[i]);
     assertFalse(tagNode.isTerse(template));
   }
 }
Пример #6
0
 @Test
 public void testThatTagNodeIsTerse() {
   template.setMode(Jade4J.Mode.HTML);
   for (int i = 0; i < selfClosing.length; i++) {
     tagNode.setName(selfClosing[i]);
     assertTrue(tagNode.isTerse(template));
   }
 }
Пример #7
0
  private Node parseTag() {
    // ast-filter look-ahead
    int i = 2;
    if (lookahead(i) instanceof Attribute) {
      i++;
    }
    if (lookahead(i) instanceof Colon) {
      i++;
      if (lookahead(i) instanceof Indent) {
        return this.parseASTFilter();
      }
    }
    Token token = nextToken();
    String name = token.getValue();
    TagNode tagNode = new TagNode();
    tagNode.setLineNumber(lexer.getLineno());
    tagNode.setFileName(filename);
    tagNode.setName(name);
    tagNode.setValue(name);

    while (true) {
      Token incomingToken = peek();
      if (incomingToken instanceof CssId) {
        Token tok = nextToken();
        tagNode.addAttribute("id", tok.getValue());
        continue;
      } else if (incomingToken instanceof CssClass) {
        Token tok = nextToken();
        tagNode.addAttribute("class", tok.getValue());
        continue;
      } else if (incomingToken instanceof Attribute) {
        Attribute tok = (Attribute) nextToken();
        tagNode.addAttributes(tok.getAttributes());
        continue;
      } else {
        break;
      }
    }

    // check immediate '.'
    boolean dot = false;
    if (peek() instanceof Dot) {
      dot = true;
      tagNode.setTextOnly(true);
      nextToken();
    }

    // (text | code | ':')?
    if (peek() instanceof Text) {
      tagNode.setTextNode(parseText());
    } else if (peek() instanceof Expression) {
      tagNode.setCodeNode(parseCode());
    } else if (peek() instanceof Colon) {
      Token next = nextToken();
      BlockNode block = new BlockNode();
      block.setLineNumber(next.getLineNumber());
      block.setFileName(filename);
      tagNode.setBlock(block);
      block.push(parseExpr());
    }

    // newline*
    while (peek() instanceof Newline) {
      nextToken();
    }

    if (!tagNode.isTextOnly()) {
      if (Arrays.asList(textOnlyTags).contains(tagNode.getName())) {
        tagNode.setTextOnly(true);
      }
    }

    // script special-case
    if ("script".equals(tagNode.getName())) {
      String type = tagNode.getAttribute("type");
      if (!dot && StringUtils.isNotBlank(type)) {
        String cleanType = type.replaceAll("^['\"]|['\"]$", "");
        if (!"text/javascript".equals(cleanType)) {
          tagNode.setTextOnly(false);
        }
      }
    }

    if (peek() instanceof Indent) {
      if (tagNode.isTextOnly()) {
        lexer.setPipeless(true);
        tagNode.setTextNode(parseTextBlock());
        lexer.setPipeless(false);
      } else {
        Node blockNode = block();
        if (tagNode.hasBlock()) {
          tagNode.getBlock().getNodes().addAll(blockNode.getNodes());
        } else {
          tagNode.setBlock(blockNode);
        }
      }
    }

    return tagNode;
  }