提交 9e017425 编写于 作者: M Matt Bierner

Replace markdown-named-headers with custom version

Fixes #47537

Use our own version of markdown named headers. This fixes some bugs around handling duplicate headers
上级 7d95e3e5
......@@ -308,7 +308,6 @@
"dependencies": {
"highlight.js": "9.12.0",
"markdown-it": "^8.4.1",
"markdown-it-named-headers": "0.0.4",
"vscode-extension-telemetry": "0.0.22",
"vscode-nls": "^4.0.0"
},
......
......@@ -17,8 +17,8 @@ export class MarkdownEngine {
private md?: MarkdownIt;
private firstLine?: number;
private currentDocument?: vscode.Uri;
private _slugCount = new Map<string, number>();
public constructor(
private readonly extensionPreviewResourceProvider: MarkdownContributions,
......@@ -36,7 +36,6 @@ export class MarkdownEngine {
private async getEngine(resource: vscode.Uri): Promise<MarkdownIt> {
if (!this.md) {
const hljs = await import('highlight.js');
const mdnh = await import('markdown-it-named-headers');
this.md = (await import('markdown-it'))({
html: true,
highlight: (str: string, lang?: string) => {
......@@ -54,8 +53,6 @@ export class MarkdownEngine {
}
return `<code><div>${this.md!.utils.escapeHtml(str)}</div></code>`;
}
}).use(mdnh, {
slugify: (header: string) => this.slugifier.fromHeading(header).value
});
for (const plugin of this.extensionPreviewResourceProvider.markdownItPlugins) {
......@@ -71,6 +68,7 @@ export class MarkdownEngine {
this.addLinkNormalizer(this.md);
this.addLinkValidator(this.md);
this.addNamedHeaders(this.md);
}
const config = vscode.workspace.getConfiguration('markdown', resource);
......@@ -101,6 +99,8 @@ export class MarkdownEngine {
}
this.currentDocument = document;
this.firstLine = offset;
this._slugCount = new Map<string, number>();
const engine = await this.getEngine(document);
return engine.render(text);
}
......@@ -108,6 +108,8 @@ export class MarkdownEngine {
public async parse(document: vscode.Uri, source: string): Promise<Token[]> {
const { text, offset } = this.stripFrontmatter(source);
this.currentDocument = document;
this._slugCount = new Map<string, number>();
const engine = await this.getEngine(document);
return engine.parse(text, {}).map(token => {
......@@ -219,4 +221,29 @@ export class MarkdownEngine {
return validateLink(link) || link.indexOf('file:') === 0;
};
}
private addNamedHeaders(md: any): void {
const original = md.renderer.rules.heading_open;
md.renderer.rules.heading_open = (tokens: any, idx: number, options: any, env: any, self: any) => {
const title = tokens[idx + 1].children.reduce((acc: string, t: any) => acc + t.content, '');
let slug = this.slugifier.fromHeading(title);
if (this._slugCount.has(slug.value)) {
const count = this._slugCount.get(slug.value)!;
this._slugCount.set(slug.value, count + 1);
slug = this.slugifier.fromHeading(slug.value + '-' + (count + 1));
} else {
this._slugCount.set(slug.value, 0);
}
tokens[idx].attrs = tokens[idx].attrs || [];
tokens[idx].attrs.push(['id', slug.value]);
if (original) {
return original(tokens, idx, options, env, self);
} else {
return self.renderToken(tokens, idx, options, env, self);
}
};
}
}
\ No newline at end of file
......@@ -3895,13 +3895,6 @@ map-visit@^1.0.0:
dependencies:
object-visit "^1.0.0"
markdown-it-named-headers@0.0.4:
version "0.0.4"
resolved "https://registry.yarnpkg.com/markdown-it-named-headers/-/markdown-it-named-headers-0.0.4.tgz#82efc28324240a6b1e77b9aae501771d5f351c1f"
integrity sha1-gu/CgyQkCmsed7mq5QF3HV81HB8=
dependencies:
string "^3.0.1"
markdown-it@^8.4.1:
version "8.4.1"
resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-8.4.1.tgz#206fe59b0e4e1b78a7c73250af9b34a4ad0aaf44"
......@@ -5711,11 +5704,6 @@ string-width@^2.0.0, string-width@^2.1.0:
is-fullwidth-code-point "^2.0.0"
strip-ansi "^4.0.0"
string@^3.0.1:
version "3.3.1"
resolved "https://registry.yarnpkg.com/string/-/string-3.3.1.tgz#8d2757ec1c0e6c526796fbb6b14036a4098398b7"
integrity sha1-jSdX7BwObFJnlvu2sUA2pAmDmLc=
string_decoder@^1.0.0, string_decoder@~1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册