Skip to content

Rouge を導入して ruby 以外の言語のシンタックスハイライトに対応する#223

Merged
znz merged 1 commit into
rurema:masterfrom
znz:rouge-highlight
Jul 11, 2026
Merged

Rouge を導入して ruby 以外の言語のシンタックスハイライトに対応する#223
znz merged 1 commit into
rurema:masterfrom
znz:rouge-highlight

Conversation

@znz

@znz znz commented Jul 11, 2026

Copy link
Copy Markdown
Member

解決したい問題

#161 のフォローアップです。コードフェンスの言語指定は ruby だけがハイライトされ、
他の言語(chtmlsh など)は素通しでした。しかもこの経路は
HTML エスケープもされていなかったため、< を含むコードが壊れて表示される
潜在バグがありました(現在 doctree に非 ruby の言語タグ付きブロックが無いため未発現)。

変更内容

  • Rouge(pure-Ruby、200+ 言語対応)を bitclust-core の runtime 依存に追加
  • lang 指定付きコードブロックのハイライトを共通ヘルパ highlight_source に集約
    (rd の //emlist[][lang] と md のコードフェンスの両経路)
  • 言語解決は Rouge::Lexer.find に委任:
    • 解決先が Ruby lexer の場合(rb などの alias を含む)→ 従来どおり
      構文チェックを兼ねる Ripper ベースの SyntaxHighlighter
    • その他の言語 → Rouge::Formatters::HTML でハイライト。
      出力クラス名は Pygments 互換なので既存の syntax-highlight.css がそのまま効きます
      (不足していた cpf / pi の2クラスのみ追記)
    • Rouge が知らない言語 → エスケープのみで出力(従来のエスケープ漏れを修正。
      ruby の構文エラー時フォールバックも同様に修正)

表示の変化

  • ```c / ```sh / ```yaml / ```html などが色付きになります
  • ```rb が ruby として(Ripper 実装で)ハイライトされるようになります
  • ```text は Rouge の PlainText lexer 経由でエスケープのみ(従来どおり無色)
  • doctree 側は現在すべて ruby タグのため、既存ページの表示に変化はありません
    今後 doctree 側でフェンスに言語タグを付けていくと効き始めます

テスト

  • TestMDCompilerRougeHighlight を追加: C のハイライト・rb alias が Ripper 実装に
    委譲されること・未知言語のエスケープ・text の無色・rd/md の等価性の5ケース
  • ruby test/run_test.rb 全件パス

🤖 Generated with Claude Code

コードフェンスの言語指定は ruby だけがハイライトされ、他の言語は
素通し(しかも HTML エスケープなし)だった。

- Rouge を bitclust-core の依存に追加。lang 指定付きコードブロックの
  ハイライトを共通ヘルパ highlight_source に集約(rd の //emlist[][lang] と
  md のコードフェンスの両方)
- 言語の解決は Rouge::Lexer.find に委ね、解決先が Ruby lexer の場合
  (rb などの alias を含む)は従来どおり構文チェックを兼ねる Ripper ベースの
  SyntaxHighlighter を使う
- その他の言語は Rouge::Formatters::HTML でハイライト。出力クラス名は
  Pygments 互換なので既存の syntax-highlight.css がそのまま効く
  (不足していた cpf / pi のみ追記)
- Rouge が知らない言語はエスケープのみで出力。従来この経路と ruby の
  構文エラー時フォールバックはエスケープされずに出力されていたのを修正

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@znz znz merged commit fdf9325 into rurema:master Jul 11, 2026
9 checks passed
@znz znz deleted the rouge-highlight branch July 11, 2026 06:20
znz added a commit to znz/doctree that referenced this pull request Jul 11, 2026
メソッド属性行 {: ...} 対応(rurema/bitclust#224)と Rouge 依存
(rurema/bitclust#223)を含む master に更新する。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant