Skip to content

Commit

Permalink
supporting blocks from included templates
Browse files Browse the repository at this point in the history
  • Loading branch information
naltatis committed Nov 8, 2012
1 parent 115dd22 commit f94d6cf
Show file tree
Hide file tree
Showing 7 changed files with 31 additions and 6 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Expand Up @@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>de.neuland</groupId>
<artifactId>jade4j</artifactId>
<version>0.2.19</version>
<version>0.2.20</version>
<name>jade templating engine for Java VM</name>
<issueManagement>
<url>https://github.com/neuland/jade4j/issues</url>
Expand Down
21 changes: 16 additions & 5 deletions src/main/java/de/neuland/jade4j/parser/Parser.java
Expand Up @@ -71,11 +71,13 @@ public class Parser {
private final TemplateLoader templateLoader;
private Parser extending;
private final String filename;
private LinkedList<Parser> contexts = new LinkedList<Parser>();

public Parser(String filename, TemplateLoader templateLoader) throws IOException {
this.filename = filename;
this.templateLoader = templateLoader;
lexer = new Lexer(filename, templateLoader);
getContexts().push(this);
}

public Node parse() {
Expand All @@ -93,11 +95,9 @@ public Node parse() {
}
}
if (extending != null) {
// TODO check this:
// this.context(parser) ???
getContexts().push(extending);
Node rootNode = extending.parse();
// TODO check this too:
// this.context()
getContexts().pop();
return rootNode;
}

Expand Down Expand Up @@ -281,7 +281,10 @@ private Node parseInclude() {
String templateName = includeToken.getValue().trim();

Parser parser = createParser(templateName);
parser.setBlocks(blocks);
contexts.push(parser);
Node ast = parser.parse();
contexts.pop();

if (peek() instanceof Indent && ast instanceof BlockNode) {
((BlockNode) ast).getIncludeBlock().push(block());
Expand All @@ -298,7 +301,7 @@ private Node parseExtends() {
Parser parser = createParser(templateName);

parser.setBlocks(blocks);
// TODO: contexts ??
parser.setContexts(contexts);
extending = parser;

LiteralNode node = new LiteralNode();
Expand Down Expand Up @@ -738,4 +741,12 @@ public Map<String, Node> getBlocks() {
public void setBlocks(Map<String, Node> blocks) {
this.blocks = blocks;
}

public LinkedList<Parser> getContexts() {
return contexts;
}

public void setContexts(LinkedList<Parser> contexts) {
this.contexts = contexts;
}
}
5 changes: 5 additions & 0 deletions src/test/java/de/neuland/jade4j/compiler/CompilerTest.java
Expand Up @@ -247,6 +247,11 @@ public void include2() {
public void extendsLayout() {
run("extends");
}

@Test
public void extendsLayoutWithInclude() {
run("extends_layout_include");
}

@Test
public void largeBodyTextWithPipes() {
Expand Down
1 change: 1 addition & 0 deletions src/test/resources/compiler/extends_layout_include.html
@@ -0,0 +1 @@
<h1>layout</h1><p>special bar</p>
4 changes: 4 additions & 0 deletions src/test/resources/compiler/extends_layout_include.jade
@@ -0,0 +1,4 @@
extends layout_include

block bar
p special bar
2 changes: 2 additions & 0 deletions src/test/resources/compiler/includes/bar.jade
@@ -0,0 +1,2 @@
block bar
p default bar
2 changes: 2 additions & 0 deletions src/test/resources/compiler/layout_include.jade
@@ -0,0 +1,2 @@
h1 layout
include includes/bar

0 comments on commit f94d6cf

Please sign in to comment.