diff --git a/resources/template.html b/resources/template.html
index 2e169414..3f496cb4 100644
--- a/resources/template.html
+++ b/resources/template.html
@@ -12,9 +12,101 @@
'use strict';
var placeholder = document.getElementById('placeholder');
+ var renderer = new marked.Renderer();
+ var toc = []; // Table of contents as a list
+
+ renderer.heading = function (text, level) {
+ var escapedText = text.toLowerCase().replace(/[^\w]+/g, '-');
+ toc.push({
+ level: level,
+ anchor: escapedText,
+ title: text
+ });
+ return '' +
+ text + '';
+ };
+
+ var markdownToHtml = function (markdown) {
+ return marked(markdown, { renderer: renderer });
+ }
+
+ var toPerfectToc = function (toc) {
+ var i;
+ var curLevel = 1;
+ var perfToc = [];
+ for (i in toc) {
+ var item = toc[i];
+ while (item.level > curLevel + 1) {
+ curLevel += 1;
+ var tmp = { level: curLevel,
+ anchor: item.anchor,
+ title: '[EMPTY]'
+ };
+ perfToc.push(tmp);
+ }
+ perfToc.push(item);
+ curLevel = item.level;
+ }
+ return perfToc;
+ }
+
+ var itemToHtml = function (item) {
+ return '' + item.title + '';
+ }
+
+ var tocToTree = function (toc) {
+ var i;
+ var front = '
';
+ var ending = [''];
+ var curLevel = 1;
+ for (i in toc) {
+ var item = toc[i];
+ if (item.level == curLevel) {
+ front += '';
+ front += '';
+ front += itemToHtml(item);
+ } else if (item.level > curLevel) {
+ // assert(item.level - curLevel == 1)
+ front += '');
+ front += '';
+ front += itemToHtml(item);
+ ending.push('');
+ curLevel = item.level;
+ } else {
+ while (item.level < curLevel) {
+ var ele = ending.pop();
+ front += ele;
+ if (ele == '') {
+ curLevel--;
+ }
+ }
+ front += '';
+ front += '';
+ front += itemToHtml(item);
+ }
+ }
+ while (ending.length > 0) {
+ front += ending.pop();
+ }
+ front = front.replace("", "");
+ front = '';
+ return front;
+ }
+
+ var addToc = function(html) {
+ var tocTree = tocToTree(toPerfectToc(toc));
+ html = html.replace(/\[TOC\]<\/p>/ig, tocTree);
+ return html;
+ }
var updateText = function(text) {
- placeholder.innerHTML = marked(text);
+ var html = markdownToHtml(text);
+ placeholder.innerHTML = addToc(html);
}
new QWebChannel(qt.webChannelTransport,