You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Kramdown为纯文本代码块添加<div class="highlight">包裹

让Kramdown为纯文本代码块生成highlight包裹结构的方法

问题说明

我想让Kramdown处理纯文本代码块时,像处理Ruby这类语言的代码块一样,用<div class="highlight">元素包裹。例如:
输入的Markdown代码:

puts 'This is Ruby.'
This is text.

当前生成的HTML中,Ruby代码块会被嵌套在完整的高亮容器里,而纯文本代码块仅输出<pre><code>结构,需要让纯文本代码块也生成一致的外层div嵌套。

解决方案

方法一:自定义Kramdown HTML转换器

继承Kramdown的默认HTML转换器,重写代码块的转换逻辑,强制所有代码块使用统一的外层结构:

require 'kramdown'
require 'kramdown/parser/github_flavored'

class CustomHighlighter < Kramdown::Converter::Html
  def convert_codeblock(el, indent)
    # 提取代码块的语言标识,默认设为text
    lang = el.attr['class']&.sub(/^language-/, '') || 'text'
    # 生成和语法高亮代码块一致的嵌套结构
    <<~HTML
      <div class="language-#{lang} highlighter-rouge">
        <div class="highlight">
          <pre class="highlight"><code>#{escape_html(el.value)}</code></pre>
        </div>
      </div>
    HTML
  end
end

# 使用自定义转换器渲染Markdown
markdown_content = <<~MD
```ruby
puts 'This is Ruby.'
This is text.

MD

html_output = CustomHighlighter.convert(markdown_content, input: 'GFM')
puts html_output

### 方法二:配置Kramdown强制为text语言启用高亮
如果是在Jekyll环境中使用Kramdown,可在`_config.yml`中添加以下配置,让Rouge高亮器处理text语言,生成统一结构:
```yaml
kramdown:
  syntax_highlighter: rouge
  syntax_highlighter_opts:
    default_lang: text
    block:
      wrap: true

内容的提问来源于stack exchange,提问作者tscheingeld

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 15:55:07