summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--js/index.html13
-rw-r--r--js/lib/blocks.js37
-rwxr-xr-xjs/lib/index.js7
3 files changed, 46 insertions, 11 deletions
diff --git a/js/index.html b/js/index.html
index 05fc216..fdd6a76 100644
--- a/js/index.html
+++ b/js/index.html
@@ -28,6 +28,7 @@ $(document).ready(function() {
// $("#html").text(result);
$("#preview").html(result);
$("#html").text(result);
+ $("#ast").text(stmd.ASTRenderer(parsed));
$("#rendertime").text(renderTime);
};
var parseAndRender = function () {
@@ -78,15 +79,16 @@ $(document).ready(function() {
<div class="col-md-6">
<h1>stmd.js dingus</h1>
</div>
- <div class="col-md-3">
+ <div class="col-md-4">
<ul class="nav nav-tabs" role="tablist">
<li class="active"><a href="#preview" role="tab" data-toggle="tab">Preview</a></li>
<li><a href="#result" role="tab" data-toggle="tab">HTML</a></li>
+ <li><a href="#result-ast" role="tab" data-toggle="tab">AST</a></li>
</ul>
</div>
- <div class="col-md-3">
- <p class="timing">Parsed in <span class="timing" id="parsetime"></span> milliseconds.<br/>
- Rendered in <span class="timing" id="rendertime"></span> milliseconds.</p>
+ <div class="col-md-2">
+ <p class="timing">Parsed in <span class="timing" id="parsetime"></span> ms.<br>
+ Rendered in <span class="timing" id="rendertime"></span> ms.</p>
</div>
</div>
<div class="row">
@@ -101,6 +103,9 @@ $(document).ready(function() {
<div id="result" class="tab-pane">
<pre id="htmlpre"><code id="html"></code></pre>
</div>
+ <div id="result-ast" class="tab-pane">
+ <pre id="astpre"><code id="ast"></code></pre>
+ </div>
</div>
</div>
</div>
diff --git a/js/lib/blocks.js b/js/lib/blocks.js
index 6cedb37..109661f 100644
--- a/js/lib/blocks.js
+++ b/js/lib/blocks.js
@@ -542,6 +542,7 @@ var finalize = function(block, line_number) {
switch (block.t) {
case 'Paragraph':
block.string_content = block.strings.join('\n').replace(/^ */m,'');
+ // delete block.strings;
// try parsing the beginning as link reference definitions:
while (block.string_content.charCodeAt(0) === C_OPEN_BRACKET &&
@@ -613,26 +614,49 @@ var finalize = function(block, line_number) {
};
// Walk through a block & children recursively, parsing string content
-// into inline content where appropriate.
+// into inline content where appropriate. Returns new object.
var processInlines = function(block) {
+ var newblock = {};
+ newblock.t = block.t;
+ newblock.start_line = block.start_line;
+ newblock.start_column = block.start_column;
+ newblock.end_line = block.end_line;
+
switch(block.t) {
case 'Paragraph':
+ newblock.inline_content =
+ this.inlineParser.parse(block.string_content.trim(), this.refmap);
+ break;
case 'SetextHeader':
case 'ATXHeader':
- block.inline_content =
+ newblock.inline_content =
this.inlineParser.parse(block.string_content.trim(), this.refmap);
- block.string_content = "";
+ newblock.level = block.level;
+ break;
+ case 'List':
+ newblock.list_data = block.list_data;
+ newblock.tight = block.tight;
+ break;
+ case 'FencedCode':
+ newblock.string_content = block.string_content;
+ newblock.info = block.info;
+ break;
+ case 'IndentedCode':
+ case 'HtmlBlock':
+ newblock.string_content = block.string_content;
break;
default:
break;
}
if (block.children) {
+ var newchildren = [];
for (var i = 0; i < block.children.length; i++) {
- this.processInlines(block.children[i]);
+ newchildren.push(this.processInlines(block.children[i]));
}
+ newblock.children = newchildren;
}
-
+ return newblock;
};
// The main parsing function. Returns a parsed document AST.
@@ -648,8 +672,7 @@ var parse = function(input) {
while (this.tip) {
this.finalize(this.tip, len - 1);
}
- this.processInlines(this.doc);
- return this.doc;
+ return this.processInlines(this.doc);
};
diff --git a/js/lib/index.js b/js/lib/index.js
index a8bf009..cfb8bf9 100755
--- a/js/lib/index.js
+++ b/js/lib/index.js
@@ -9,5 +9,12 @@
// var renderer = new stmd.HtmlRenderer();
// console.log(renderer.render(parser.parse('Hello *world*')));
+var util = require('util');
+
+var renderAST = function(tree) {
+ return util.inspect(tree, {depth: null});
+}
+
module.exports.DocParser = require('./blocks');
module.exports.HtmlRenderer = require('./html-renderer');
+module.exports.ASTRenderer = renderAST;