diff --git a/src/markdown/columns.ts b/src/markdown/columns.ts new file mode 100644 index 0000000..d170a43 --- /dev/null +++ b/src/markdown/columns.ts @@ -0,0 +1,64 @@ +import {TokenizerAndRendererExtension} from "marked"; + +export default function markedColumns(): TokenizerAndRendererExtension[] { + return [{ + name: 'col-divider', + level: 'block', + start(src: string) { + return src.match(/^-\|-+ *\n/)?.index; + }, + tokenizer(src){ + const match = src.match(/^-\|(-+) *\n/); + if(!match) return; + return { + type: 'col-divider', + raw: match[0], + tokens: [] + }; + }, + renderer(token){ + const extra = token.raw.match(/^-\|(-+) *\n/)?.[1].length || 0; + const sfx = extra > 1 ? '-' + (extra) : ''; + return `
`; + } + },{ + name: 'col-start', + level: 'block', + start(src: string) { + return src.match(/^\|--+ *\n/)?.index; + }, + tokenizer(src){ + const match = src.match(/^\|-(-+) *\n/); + if(!match) return; + return { + type: 'col-start', + raw: match[0], + tokens: [] + }; + }, + renderer(token){ + const extra = token.raw.match(/^\|-(-+) *\n/)?.[1].length || 0; + const sfx = extra > 1 ? '-' + (extra) : ''; + return `
`; + } + },{ + name: 'col-end', + level: 'block', + start(src: string) { + return src.match(/^--\| *\n/)?.index; + }, + tokenizer(src){ + const match = src.match(/^--\| *\n/); + if(!match) return; + return { + type: 'col-end', + raw: match[0], + tokens: [] + }; + }, + renderer(token){ + return `
`; + } + } + ]; +} \ No newline at end of file diff --git a/src/markdown/index.ts b/src/markdown/index.ts index af78697..0ea0ddc 100644 --- a/src/markdown/index.ts +++ b/src/markdown/index.ts @@ -5,6 +5,7 @@ import markedAlert from "marked-alert"; import markedMermaid from "./mermaid"; import markedTable from "./table"; import {gfmHeadingId} from "marked-gfm-heading-id"; +import markedColumns from "./columns"; let globalIconPrefix: string | undefined = undefined; function overrideIconPrefix(path?: string){ @@ -45,8 +46,10 @@ const marked = new Marked() } }, ]), { + extensions: [ + ...markedColumns(), + { // 自定义代码块渲染器,支持 yaml/tag 格式 - extensions: [{ name: 'code-block-yaml-tag', level: 'block', start(src: string) {