如何调用VSCode markdown渲染器

时间:2019-06-17 01:25:04

标签: visual-studio-code markdown vscode-extensions

VS Code markdown预览使用markdown-it,它支持插件生态系统。

Extension of this rendering pipeline已记录在案,但这并未考虑降价预览窗格以外的客户端的可能性。

任何人都可以提供有关使用内置Markdown渲染的指南吗?

如果有用,我的用例是打印。我为vs代码写了一个打印扩展程序,它的自然增强是在打印时渲染markdown。目前,我正在有效地重新创建渲染管道。除了明显的冗余之外,我想使用内置渲染的原因是继承任何已配置的扩展名,以便打印输出与预览功能匹配。

期望将markdown预览窗格实现为virtual document,这是呈现管道的客户端,这似乎是合理的。有人知道降价预览窗格的实现包含哪些存储库和文件吗?

1 个答案:

答案 0 :(得分:0)

似乎有一个MarkdownEngine类根据配置来管理插件的加载,虽然似乎没有引用MarkdownIt实例的方法,但这里定义了一个render方法

https://github.com/Microsoft/vscode/blob/fa5306d67bb934c42d206fb3c7e028dff00d530f/extensions/markdown-language-features/src/markdownEngine.ts#L96

因此,表面上,您需要做的就是导入MarkdownEngine并使用此方法。但是,当前不支持此功能。我有logged a feature request

作者不想公开MarkdownEngine,但建议提供一个render方法。


这是最终的答案,但现在无济于事。在此期间,可以获取对VS Code的markdownIt实例的引用。

将扩展名伪装为markdown插件。请注意,在添加插件的文档中,它显示为

  

然后,在扩展程序的主要激活函数中,返回一个具有名为extendMarkdownIt的函数的对象。此函数采用当前的markdown-it实例,并且必须返回一个新的markdown-it实例:

import * as vscode from 'vscode';

export function activate(context: vscode.ExtensionContext) {
  return {
    extendMarkdownIt(md: any) {
      return md.use(require('markdown-it-emoji'));
    }
  };
}

这是捕获Markdown渲染器的机会。修改您的扩展程序以作为markdown插件

"contributes": {
    "markdown.markdownItPlugins": true,

使用私有属性为其提供对markdownIt实例的引用。不要打扰它的强类型,这将要求您捆绑MarkdownIt库。

var md: any;

然后将其放在您的activate方法的末尾来获取参考。

return { extendMarkdownIt(mdparam: any) { return md = mdparam; } };

当管道初始化时,它将调用您提供的回调,并传递对自身的引用。您的其余代码可以从属性中获取。

此技巧取决于提早载入渲染管线,而不管是否使用降价预览窗格。幸运的是。