summaryrefslogtreecommitdiffstats
path: root/lib/template.js
diff options
context:
space:
mode:
authorSamy Pessé <samypesse@gmail.com>2015-01-27 21:21:01 +0100
committerSamy Pessé <samypesse@gmail.com>2015-01-27 21:21:01 +0100
commit8e18adbe4cd64b8d6baf63627cba4109774fc7e5 (patch)
treee757c0449976867a0923d94f429f9cc11c87a817 /lib/template.js
parentf1b5e3de0ce3662385793d197ccb54ef4e9901be (diff)
downloadgitbook-8e18adbe4cd64b8d6baf63627cba4109774fc7e5.zip
gitbook-8e18adbe4cd64b8d6baf63627cba4109774fc7e5.tar.gz
gitbook-8e18adbe4cd64b8d6baf63627cba4109774fc7e5.tar.bz2
Parse correctly list of blocks and args
Diffstat (limited to 'lib/template.js')
-rw-r--r--lib/template.js44
1 files changed, 32 insertions, 12 deletions
diff --git a/lib/template.js b/lib/template.js
index 91cedca..e57ef1b 100644
--- a/lib/template.js
+++ b/lib/template.js
@@ -103,25 +103,45 @@ TemplateEngine.prototype.addBlock = function(name, block) {
this.tags = [name];
this.parse = function(parser, nodes, lexer) {
- console.log("parse", name, block.end);
- var bodies = {};
+ var body = null;
+ var lastBlockName = null;
+ var lastBlockArgs = null;
+ var allBlocks = block.blocks.concat([block.end]);
+ var subbodies = {};
var tok = parser.nextToken();
var args = parser.parseSignature(null, true);
parser.advanceAfterBlockEnd(tok.value);
- // parse the body and possibly the error block, which is optional
- /*var body = parser.parseUntilBlocks('error', 'endtruncate');
- var errorBody = null;
-
- if(parser.skipSymbol('error')) {
- parser.skip(lexer.TOKEN_BLOCK_END);
- errorBody = parser.parseUntilBlocks('endremote');
+ console.log("start parsing", allBlocks);
+ while (1) {
+ var currentBody = parser.parseUntilBlocks.apply(parser, allBlocks);
+
+ // Handle body with previous block name and args
+ if (lastBlockName) {
+ subbodies[lastBlockName] = subbodies[lastBlockName] || [];
+ subbodies[lastBlockName].push({
+ body: currentBody,
+ args: lastBlockArgs
+ });
+ } else {
+ body = currentBody;
+ }
+
+ var tok = parser.peekToken();
+ lastBlockName = tok.value;
+ if (lastBlockName == block.end) {
+ console.log("finish!");
+ break;
+ }
+
+ lastBlockArgs = parser.parseSignature(null, true);
+ parser.advanceAfterBlockEnd(lastBlockName);
+
+ console.log(" -> keep going");
}
- parser.advanceAfterBlockEnd();*/
-
- var body = parser.parseUntilBlocks(block.end);
+ console.log(body, subbodies);
parser.advanceAfterBlockEnd();
return new nodes.CallExtensionAsync(this, 'run', args, [body]);