Как вызвать рендерер уценки VSCode - PullRequest
0 голосов
/ 17 июня 2019

Для предварительного просмотра разметки VS Code используется markdown-it, который поддерживает экосистему плагинов.

Расширение этого конвейера рендеринга задокументировано, но это не учитывает возможности клиентов, кроме панели предварительного просмотра уценки.

Кто-нибудь может предложить руководство по использованию встроенного рендеринга уценки?

Мой вариант использования, если он помогает, это печать. Я написал расширение для печати vs-code и естественным усовершенствованием этого было рендеринг уценки при печати. На данный момент я фактически воссоздаю конвейер рендеринга. Помимо очевидной избыточности, я хотел бы использовать встроенную визуализацию для наследования любых настроенных расширений, чтобы распечатка соответствовала возможности предварительного просмотра.

Представляется разумным ожидать, что панель предварительного просмотра уценки будет реализована в виде виртуального документа , который является клиентом конвейера рендеринга. Кто-нибудь знает, какие репозитории и файлы содержат реализацию панели предварительного просмотра уценки?

1 Ответ

0 голосов
/ 17 июня 2019

Похоже, что существует класс MarkdownEngine, который управляет загрузкой плагинов в соответствии с конфигурацией, и, хотя кажется, что нет способа обратиться к экземпляру MarkdownIt, здесь определен метод рендеринга

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

Итак, на первый взгляд все, что вам нужно сделать, это импортировать MarkdownEngine и использовать этот метод. Однако в настоящее время это не поддерживается. Я зарегистрировал запрос функции .

Авторы не хотят показывать MarkdownEngine, но предлагают предоставить метод рендеринга.


Это окончательный ответ, но сейчас это не поможет. Тем временем можно получить ссылку на экземпляр markdownIt кода VS.

Измените ваше расширение на маскарад в качестве плагина уценки. Обратите внимание, что в документации для добавления плагинов написано

Затем в основной функции активации расширения верните объект с функцией extendedMarkdownIt. Эта функция принимает текущий экземпляр 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'));
    }
  };
}

Это ваш шанс захватить рендерер уценки. Измените ваше расширение для представления в качестве плагина уценки

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

Дайте ему свойство private для хранения ссылки на экземпляр markdownIt. Не пытайтесь набирать его строго, так как это потребует от вас комплектации библиотеки MarkdownIt.

var md: any;

Затем захватите ссылку, поставив ее в конце вашего метода активации.

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

Когда конвейер инициализируется, он вызывает предоставленный вами обратный вызов, передающий ссылку на себя. Остальная часть вашего кода может получить его из собственности.

Этот прием зависит от ранней загрузки конвейера рендеринга, независимо от того, используете ли вы панель предварительного просмотра уценки. К счастью, это так.

...