var renderer = new marked.Renderer();
var toc = []; // Table of contents as a list
var nameCounter = 0;
renderer.heading = function(text, level) {
// Use number to avoid issues with Chinese
var escapedText = 'toc_' + nameCounter++;
var textHtml = escapeHtml(text);
toc.push({
level: level,
anchor: escapedText,
title: textHtml
});
return '
\[TOC\]<\/p>/ig, '
'); } else { return html; } }; var mdHasTocSection = function(markdown) { var n = markdown.search(/(\n|^)\[toc\]/i); return n != -1; }; var updateText = function(text) { if (VAddTOC) { text = "[TOC]\n\n" + text; } startFreshRender(); // There is at least one async job for MathJax. asyncJobsCount = 1; var needToc = mdHasTocSection(text); var html = markdownToHtml(text, needToc); contentDiv.innerHTML = html; handleToc(needToc); insertImageCaption(); setupImageView(); renderMermaid('language-mermaid'); renderFlowchart(['language-flowchart', 'language-flow']); renderPlantUML('language-puml'); renderGraphviz('language-dot'); addClassToCodeBlock(); renderCodeBlockLineNumber(); // If you add new logics after handling MathJax, please pay attention to // finishLoading logic. if (VEnableMathjax) { try { MathJax.Hub.Queue(["resetEquationNumbers",MathJax.InputJax.TeX], ["Typeset", MathJax.Hub, contentDiv, postProcessMathJax]); } catch (err) { content.setLog("err: " + err); finishOneAsyncJob(); } } else { finishOneAsyncJob(); } }; var highlightText = function(text, id, timeStamp) { highlightSpecialBlocks = true; var html = marked(text); highlightSpecialBlocks = false; content.highlightTextCB(html, id, timeStamp); } var textToHtml = function(identifier, id, timeStamp, text, inlineStyle) { var html = marked(text); if (inlineStyle) { var container = textHtmlDiv; container.innerHTML = html; html = getHtmlWithInlineStyles(container); container.innerHTML = ""; } content.textToHtmlCB(identifier, id, timeStamp, html); }