我正在尝试让rainbow语法高亮显示库与marked标记渲染引擎一起工作。marked文档指出,通过以下配置选项支持语法高亮显示:
marked.setOptions({
highlight: function(code, lang) {
return highlighter.javascript(code);
}
});rainbow source code指示通过以下语法支持传入要突出显示的字符串:
Rainbow.color(code, lang, success);我有点不知所措,不知道如何把两者放在一起。具体地说,success是一个将被异步调用的回调,我不能简单地从highlight回调中的Rainbow.color代码返回值。如何做到这一点?
发布于 2013-02-28 10:34:04
marked here的作者。我之前在问题跟踪器上解决了这个问题:https://github.com/chjj/marked/issues/47
使用带有标记的异步高亮笔的可能性更大。您只需迭代lexer输出的标记即可。
示例:https://github.com/chjj/marked/issues/47#issuecomment-5297067 (请记住,这只是一个示例。您必须对其进行一些修改。)
我可能只是使用上面链接中的方法在本地实现这一点。这将对使用异步荧光笔的人的性能造成影响,但如果你需要一个异步高亮笔,这意味着高亮笔正在做某种IO,而你已经受到了性能的影响。
发布于 2013-02-26 08:05:05
您可以尝试使用另一个突出显示库,如highlight.js -它具有同步突出显示方法(hljs.highlight(lang, code).value和hljs.highlightAuto(code).value),您可以在浏览器中使用这些方法,如下所示:
marked.setOptions({
highlight: function(code) {
return hljs.highlightAuto(code).value;
}
});Here's a working JsFiddle example.
发布于 2013-02-18 06:24:50
不幸的是,没有办法解决这个问题。
marked似乎需要一个同步语法加亮器,而rainbow是一个异步语法加亮器。
在Javascript中,没有办法将后者转换为前者。
例如,这就是为什么在node.js中许多库函数都有同步和异步版本的原因。在Javascript中,没有办法在只给定异步循环的情况下构建同步循环,因为您不能创建“嵌套事件循环”(在某些情况下,相反的转换可以使用web workers来完成)。
可能将同步版本添加到rainbow并不困难(例如,通过预先提供它可能异步加载的外部资源)。
https://stackoverflow.com/questions/14926564
复制相似问题