Files
baoyu-skills/skills/baoyu-markdown-to-html/scripts/vendor/baoyu-md/src/renderer.test.ts
T
shixy 38fc733b99 fix(markdown-to-html): preserve inline code inside bold/emphasis
The `extractText()` helper in `preprocessCjkEmphasis()` only handled
`text` nodes and nodes with `children`. `inlineCode` AST nodes (which
have a `value` but no `children`) fell through to the default empty-
string return, silently dropping their content.

For example `**算出 \`logits\`**` rendered as `<strong>算出 </strong>`
with the code span completely lost.

Add an `inlineCode` branch that wraps the node value in backticks so
the downstream `marked` pass can turn it into a proper `<code>` element.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 16:13:02 +08:00

37 lines
1.1 KiB
TypeScript

import assert from "node:assert/strict";
import test from "node:test";
import { initRenderer, renderMarkdown } from "./renderer.ts";
const render = (md: string) => {
const r = initRenderer();
return renderMarkdown(md, r).html;
};
test("bold with inline code (no underscore)", () => {
const html = render("**算出 `logits`,算出 `loss`。**");
assert.match(html, /<code[^>]*>logits<\/code>/);
assert.match(html, /<code[^>]*>loss<\/code>/);
});
test("bold with inline code (contains underscore)", () => {
const html = render("**变成 `input_ids`。**");
assert.match(html, /<code[^>]*>input_ids<\/code>/);
});
test("emphasis with inline code", () => {
const html = render("*查看 `hidden_states`*");
assert.match(html, /<code[^>]*>hidden_states<\/code>/);
});
test("plain inline code (regression)", () => {
const html = render("`lm_head`");
assert.match(html, /<code[^>]*>lm_head<\/code>/);
});
test("bold without code (regression)", () => {
const html = render("**纯粗体文本**");
assert.match(html, /<strong[^>]*>纯粗体文本<\/strong>/);
assert.doesNotMatch(html, /<code/);
});