Ruby Kramdown调用to_kramdown后代码块分隔符变更的修复咨询
问题:Kramdown的to_kramdown方法将代码块分隔符从```转为`,如何恢复?
复现代码
require 'kramdown' code = <<END ```rb num = 0 while num < 2 do print("num = ", num) end print("End")
END
puts code #1
doc = Kramdown::Document.new(code)
puts doc.to_kramdown #2
### 执行输出 ```text ```rb num = 0 while num < 2 do print("num = ", num) end print("End")
rb num = 0 while num < 2 do print("num = ", num) end print("End")
### 用户疑问 - 如何恢复使用```作为代码块的分隔符? - 查看Kramdown::Document对象时发现包含`:codespan_delimiter=>"```"`属性,是否可以利用该属性实现恢复? - 尝试了Kramdown GFM Parser,但它将代码块转换为以下格式,不符合需求: ```text num = 0 while num < 2 do print("num = ", num) end print("End") {: .language-rb}
解决方案
1. 调用to_kramdown时指定code_block_fence参数
Kramdown的to_kramdown方法支持传入配置选项,其中code_block_fence可以指定代码块的分隔符。只需在输出时设置该参数为"```",就能恢复围栏代码块格式:
require 'kramdown' code = <<END ```rb num = 0 while num < 2 do print("num = ", num) end print("End")
END
doc = Kramdown::Document.new(code)
指定代码块分隔符为```
puts doc.to_kramdown(code_block_fence: "```")
执行后输出会保持原始的```代码块格式。 ### 2. 关于`:codespan_delimiter`属性的说明 这个属性是用来控制**行内代码片段**(比如`print("hello")`这种行内代码)的分隔符,和多行代码块的分隔符无关,因此无法用它来恢复围栏代码块的格式,不要混淆两者的作用。 ### 3. GFM Parser的替代方案 GFM Parser默认会将围栏代码块转换为缩进式代码块加属性标注,这是GFM规范的另一种写法,但如果需要保留```格式,就不适合使用该解析器,还是使用默认解析器加上述配置更直接。 --- 内容的提问来源于stack exchange,提问作者masaino
相关产品推荐
相关产品推荐

