Skip to content

Commit 1d1eedc

Browse files
committed
Improve syntax highlighting performance by moving it to finish view
1 parent 521f76f commit 1d1eedc

2 files changed

Lines changed: 32 additions & 15 deletions

File tree

public/js/extra.js

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,33 @@ function finishView(view) {
435435
height: '400px'
436436
});
437437
});
438+
//syntax highlighting
439+
view.find("pre.raw").removeClass("raw")
440+
.each(function (key, value) {
441+
var langDiv = $(value).find('code.hljs');
442+
if (langDiv.length > 0) {
443+
var reallang = langDiv[0].className.replace('hljs', '').trim();
444+
var codeDiv = $(value).find('.code');
445+
var code = "";
446+
if (codeDiv.length > 0) code = codeDiv.html();
447+
else code = langDiv.html();
448+
code = md.utils.unescapeAll(code);
449+
if (reallang == "tiddlywiki" || reallang == "mediawiki") {
450+
var result = {
451+
value: Prism.highlight(code, Prism.languages.wiki)
452+
};
453+
} else {
454+
var languages = hljs.listLanguages();
455+
if (languages.indexOf(reallang) == -1) {
456+
var result = hljs.highlightAuto(code);
457+
} else {
458+
var result = hljs.highlight(reallang, code);
459+
}
460+
}
461+
if (codeDiv.length > 0) codeDiv.html(result.value);
462+
else langDiv.html(result.value);
463+
}
464+
});
438465
//render title
439466
document.title = renderTitle(view);
440467
}
@@ -772,19 +799,9 @@ function highlightRender(code, lang) {
772799
} else if (lang == 'mermaid') {
773800
return '<div class="mermaid raw">' + code + '</div>';
774801
}
775-
var reallang = lang.replace(/\=$|\=\d+$|\=\+$/, '');
776-
if (reallang == "tiddlywiki" || reallang == "mediawiki") {
777-
var result = {
778-
value: Prism.highlight(code, Prism.languages.wiki)
779-
};
780-
} else {
781-
var languages = hljs.listLanguages();
782-
if (languages.indexOf(reallang) == -1) {
783-
var result = hljs.highlightAuto(code);
784-
} else {
785-
var result = hljs.highlight(reallang, code);
786-
}
787-
}
802+
var result = {
803+
value: code
804+
};
788805
var showlinenumbers = /\=$|\=\d+$|\=\+$/.test(lang);
789806
if (showlinenumbers) {
790807
var startnumber = 1;
@@ -878,7 +895,7 @@ md.renderer.rules.fence = function (tokens, idx, options, env, self) {
878895
return highlighted + '\n';
879896
}
880897

881-
return '<pre><code' + self.renderAttrs(token) + '>'
898+
return '<pre class="raw"><code' + self.renderAttrs(token) + '>'
882899
+ highlighted
883900
+ '</code></pre>\n';
884901
};

public/js/syncscroll.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ md.renderer.rules.fence = function (tokens, idx, options, env, self) {
7575
if (tokens[idx].map && tokens[idx].level === 0) {
7676
var startline = tokens[idx].map[0] + 1;
7777
var endline = tokens[idx].map[1];
78-
return '<pre class="part" data-startline="' + startline + '" data-endline="' + endline + '"><code' + self.renderAttrs(token) + '>'
78+
return '<pre class="part raw" data-startline="' + startline + '" data-endline="' + endline + '"><code' + self.renderAttrs(token) + '>'
7979
+ highlighted
8080
+ '</code></pre>\n';
8181
}

0 commit comments

Comments
 (0)