diff options
author | Samy Pessé <samypesse@gmail.com> | 2015-01-27 21:21:01 +0100 |
---|---|---|
committer | Samy Pessé <samypesse@gmail.com> | 2015-01-27 21:21:01 +0100 |
commit | 8e18adbe4cd64b8d6baf63627cba4109774fc7e5 (patch) | |
tree | e757c0449976867a0923d94f429f9cc11c87a817 /lib | |
parent | f1b5e3de0ce3662385793d197ccb54ef4e9901be (diff) | |
download | gitbook-8e18adbe4cd64b8d6baf63627cba4109774fc7e5.zip gitbook-8e18adbe4cd64b8d6baf63627cba4109774fc7e5.tar.gz gitbook-8e18adbe4cd64b8d6baf63627cba4109774fc7e5.tar.bz2 |
Parse correctly list of blocks and args
Diffstat (limited to 'lib')
-rw-r--r-- | lib/template.js | 44 |
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]); |