Add comments

This commit is contained in:
Clément Pons 2025-04-22 11:33:32 +02:00
parent cccfccc299
commit ea9a70b191
1 changed files with 22 additions and 34 deletions

View File

@ -1,10 +1,8 @@
import capitalize from "lodash.capitalize" import capitalize from "lodash.capitalize"
import { visit } from "unist-util-visit" import { visit } from "unist-util-visit"
import { toHast } from "mdast-util-to-hast"
import { toHtml } from "hast-util-to-html"
import { toString } from 'mdast-util-to-string'; import { toString } from 'mdast-util-to-string';
import { FindAndReplaceList, findAndReplace as mdastFindReplace } from "mdast-util-find-and-replace" import { FindAndReplaceList, findAndReplace as mdastFindReplace } from "mdast-util-find-and-replace"
import type { Callout, Root, Tag } from "mdast"; import type { Comment, Root, Tag } from "mdast";
declare module 'mdast' declare module 'mdast'
{ {
@ -25,14 +23,22 @@ declare module 'mdast'
title?: string; title?: string;
fold?: boolean; fold?: boolean;
} }
interface Comment extends Parent
{
type: "comment";
data?: CommentData | undefined;
}
interface CommentData extends Data {}
interface PhrasingContentMap interface PhrasingContentMap
{ {
tag: Tag; tag: Tag;
comment: Comment;
} }
interface RootContentMap interface RootContentMap
{ {
tag: Tag; tag: Tag;
callout: Callout; callout: Callout;
comment: Comment;
} }
} }
@ -112,11 +118,6 @@ const calloutMapping: Record<string, keyof typeof callouts> = {
cite: "quote", cite: "quote",
} }
function mdastToHtml(ast: any) {
const hast = toHast(ast, { allowDangerousHtml: true })!;
return toHtml(hast, { allowDangerousHtml: true });
}
function canonicalizeCallout(calloutName: string): keyof typeof callouts { function canonicalizeCallout(calloutName: string): keyof typeof callouts {
let callout = calloutName.toLowerCase() as keyof typeof calloutMapping let callout = calloutName.toLowerCase() as keyof typeof calloutMapping
return calloutMapping[callout] ?? "note" return calloutMapping[callout] ?? "note"
@ -194,11 +195,19 @@ export default function ofm() {
replacements.push([ replacements.push([
commentRegex, commentRegex,
(_value: string, ...capture: string[]) => { (_value: string, ...capture: string[]) => {
const [inner] = capture const [inner] = capture;
return {
type: "html", const comment: Comment = {
value: `<span class="text-comment">${inner}</span>`, type: 'comment',
} children: [{ type: 'text', value: inner, }],
data: {
hName: 'small',
hChildren: [
{ type: 'text', value: inner },
],
},
};
return comment;
}, },
]); ]);
@ -228,27 +237,6 @@ export default function ofm() {
}, },
]); ]);
/*visit(tree, "html", (node) => {
for (const [regex, replace] of replacements) {
if (typeof replace === "string") {
node.value = node.value.replace(regex, replace)
} else {
node.value = node.value.replaceAll(regex, (substring: string, ...args: any) => {
const replaceValue = replace!(substring, ...args)
if (typeof replaceValue === "string") {
return replaceValue
} else if (Array.isArray(replaceValue)) {
return replaceValue.map(mdastToHtml).join("")
} else if (typeof replaceValue === "object" && replaceValue !== null) {
return mdastToHtml(replaceValue)
} else {
return substring
}
})
}
}
})*/
mdastFindReplace(tree, replacements); mdastFindReplace(tree, replacements);
visit(tree, "blockquote", (node, index, parent) => { visit(tree, "blockquote", (node, index, parent) => {