Skip to content

Commit 5654015

Browse files
myakuraclaude
andcommitted
fix: marked v17 でコードレンダラーがトークンオブジェクトを受け取るよう修正
marked v17 ではカスタムレンダラーの `code` 関数がトークンオブジェクト ({type, raw, lang, text})で呼ばれる。 以前の `(code, lang, escaped)` シグネチャではタイトル分離ロジックが 動作せず、コードブロックタイトルが `class="language-js#タイトル"` と して出力されていた。 トークンオブジェクトを受け取り、lang フィールドを書き換えて origCodeRender に渡す形式に変更した。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 73f0d5c commit 5654015

1 file changed

Lines changed: 9 additions & 9 deletions

File tree

lib/renderer/md/code.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,30 +31,30 @@ const renderLivecodeSection = (title, codeHtml) => `
3131
* ```html#たいとる 言語指定とタイトル指定 ```
3232
* みたいにすると、拡張したやつでレンダリングして返す
3333
*
34-
* @param {string} code
35-
* コード文字列
36-
* @param {string} lang
37-
* 言語指定文字列(`lang#タイトル` の形式を取る場合もある)
38-
* @param {boolean} escaped
34+
* @param {object} token
35+
* marked v17 のトークンオブジェクト({type, raw, lang, text})
36+
* lang は `lang#タイトル` の形式を取る場合もある
3937
* @return {string}
4038
* HTML文字列
4139
*
4240
*/
43-
export default function(code, lang, escaped) {
41+
export default function(token) {
42+
const { lang } = token;
43+
4444
// そもそも言語指定ないやつ
4545
if (!lang) {
46-
return origCodeRender.call(this, code, lang, escaped);
46+
return origCodeRender.call(this, token);
4747
}
4848

4949
const langArr = lang.split('#').map((t) => t.trim());
5050
// 言語の指定はあったが、タイトルがない = 今まで通り
5151
if (langArr.length === 1 || langArr[1].length === 0) {
52-
return origCodeRender.call(this, code, langArr[0], escaped);
52+
return origCodeRender.call(this, { ...token, lang: langArr[0] });
5353
}
5454

5555
// 言語の指定もタイトル指定もちゃんとあるやつ
5656
return renderLivecodeSection(
5757
langArr[1], // タイトル
58-
origCodeRender.call(this, code, langArr[0], escaped) // コード本体
58+
origCodeRender.call(this, { ...token, lang: langArr[0] }) // コード本体
5959
);
6060
}

0 commit comments

Comments
 (0)