Skip to content

Commit cd498d9

Browse files
committed
Make markdownItLoader work with TypeDoc-overriden rules
Resolves #3055
1 parent 0aff3ba commit cd498d9

File tree

2 files changed

+28
-6
lines changed

2 files changed

+28
-6
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ title: Changelog
1111
- Improved vertical positioning of text icons, #3056.
1212
- TypeDoc no longer includes source location information for type literal reflections. This could sometimes
1313
cause TypeDoc to infer the wrong path when resolving base paths for display.
14+
- Adjusted markdown rendering to allow `markdownItLoader` to override more rendering #3055.
1415

1516
### Features
1617

src/lib/output/themes/MarkedPlugin.tsx

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -341,8 +341,19 @@ export class MarkedPlugin extends ContextAwareRendererComponent {
341341
const loader = this.application.options.getValue("markdownItLoader");
342342
loader(this.parser);
343343

344+
function defaultRender(
345+
tokens: md.Token[],
346+
idx: number,
347+
options: md.Options,
348+
_env: any,
349+
self: md.Renderer,
350+
): string {
351+
return self.renderToken(tokens, idx, options);
352+
}
353+
344354
// Add anchor links for headings in readme, and add them to the "On this page" section
345-
this.parser.renderer.rules["heading_open"] = (tokens, idx) => {
355+
const headingOpenRenderer = this.parser.renderer.rules["heading_open"] || defaultRender;
356+
this.parser.renderer.rules["heading_open"] = (tokens, idx, options, env, self) => {
346357
const token = tokens[idx];
347358
const content = getTokenTextContent(tokens[idx + 1]);
348359
const level = token.markup.length;
@@ -356,13 +367,21 @@ export class MarkedPlugin extends ContextAwareRendererComponent {
356367
level,
357368
});
358369

359-
return `<${token.tag} id="${slug}" class="tsd-anchor-link">`;
370+
token.attrSet("id", slug);
371+
token.attrSet("class", "tsd-anchor-link");
372+
373+
return headingOpenRenderer(tokens, idx, options, env, self);
360374
};
361-
this.parser.renderer.rules["heading_close"] = (tokens, idx) => {
362-
return `${JSX.renderElement(anchorIcon(this.renderContext, this.lastHeaderSlug))}</${tokens[idx].tag}>`;
375+
376+
const headingCloseRenderer = this.parser.renderer.rules["heading_close"] || defaultRender;
377+
this.parser.renderer.rules["heading_close"] = (...args) => {
378+
return `${JSX.renderElement(anchorIcon(this.renderContext, this.lastHeaderSlug))}${
379+
headingCloseRenderer(...args)
380+
}`;
363381
};
364382

365-
this.parser.renderer.rules["link_open"] = (tokens, idx, options, _env, self) => {
383+
const linkOpenRenderer = this.parser.renderer.rules["link_open"] || defaultRender;
384+
this.parser.renderer.rules["link_open"] = (tokens, idx, options, env, self) => {
366385
const token = tokens[idx];
367386
const href = token.attrGet("href");
368387
if (href) {
@@ -383,9 +402,11 @@ export class MarkedPlugin extends ContextAwareRendererComponent {
383402

384403
token.attrSet("href", href);
385404
}
386-
return self.renderToken(tokens, idx, options);
405+
406+
return linkOpenRenderer(tokens, idx, options, env, self);
387407
};
388408

409+
// Don't need custom rendering here as this is a TypeDoc-provided rule name
389410
this.parser.renderer.rules["alert_open"] = (tokens, idx) => {
390411
const icon = this.renderContext.icons[tokens[idx].attrGet("icon") as AlertIconName];
391412
const iconHtml = JSX.renderElement(icon());

0 commit comments

Comments
 (0)