| import type { MarkdownTableMode } from "../config/types.base.js"; |
| import { markdownToIRWithMeta } from "./ir.js"; |
| import { renderMarkdownWithMarkers } from "./render.js"; |
|
|
| const MARKDOWN_STYLE_MARKERS = { |
| bold: { open: "**", close: "**" }, |
| italic: { open: "_", close: "_" }, |
| strikethrough: { open: "~~", close: "~~" }, |
| code: { open: "`", close: "`" }, |
| code_block: { open: "```\n", close: "```" }, |
| } as const; |
|
|
| export function convertMarkdownTables(markdown: string, mode: MarkdownTableMode): string { |
| if (!markdown || mode === "off") { |
| return markdown; |
| } |
| const { ir, hasTables } = markdownToIRWithMeta(markdown, { |
| linkify: false, |
| autolink: false, |
| headingStyle: "none", |
| blockquotePrefix: "", |
| tableMode: mode, |
| }); |
| if (!hasTables) { |
| return markdown; |
| } |
| return renderMarkdownWithMarkers(ir, { |
| styleMarkers: MARKDOWN_STYLE_MARKERS, |
| escapeText: (text) => text, |
| buildLink: (link, text) => { |
| const href = link.href.trim(); |
| if (!href) { |
| return null; |
| } |
| const label = text.slice(link.start, link.end); |
| if (!label) { |
| return null; |
| } |
| return { start: link.start, end: link.end, open: "[", close: `](${href})` }; |
| }, |
| }); |
| } |
|
|