我想使用pandoc将HTML的这段代码转换为Markdown。
public class BaseController : Controller
{
public BaseController()
{
//Set CurrentCulture and CurrentUICulture of the thread
}
}
我想要的输出是这样的。
public class HomeController: BaseController
{
[HttpGet]
public ActionResult Index()
{
//..............................................
}
}
但是我的输出我从未在markdown文件中分别包含<code class="code_block"># chown root:root /boot/grub/grub.cfg<br/># chmod og-rwx /boot/grub/grub.cfg
</code>
和一个换行符。
```
# chown root:root /boot/grub/grub.cfg
# chmod og-rwx /boot/grub/grub.cfg
```
我已经尝试了不同的命令和扩展名。
<br>
我想念什么吗?
答案 0 :(得分:0)
这是由于pandoc在内部表示内联代码的方式所致:该代码存储为一串逐字文本以及一组属性。作为布局命令的换行符不适合此表示形式,因此将被忽略。
还要注意,以上是编写多行代码的一种相当不常见的方法。参见例如MDN docs on the <code>
element:
要表示多行代码,请将
<code>
元素包装在<pre>
元素内。<code>
元素本身仅表示一个代码短语或一行代码。
答案 1 :(得分:0)
问题是您的代码块未正确格式化为代码块。您(至少)需要以下内容:
<pre><code># chown root:root /boot/grub/grub.cfg
# chmod og-rwx /boot/grub/grub.cfg
</code></pre>
@tarleb的答案中除了HTML spec之外,Markdown规则还仅根据代码来区分代码 block 和代码 span <pre>
标签的存在(或不存在)。
请注意,原始的Markdown规则演示了code block生成此HTML:
<pre><code>This is a code block. </code></pre>
包裹在<code>
标记中的<pre>
标记。相反,相同的规则演示了code span生成此HTML:
<p>Use the <code>printf()</code> function.</p>
请注意,仅使用<code>
标记,但这仅是一个内联跨度(包装在<p>
中,而不是块级元素。
当Pandoc从HTML转换回Markdown时,它遵循相反的约定。是的,您在class="code_block"
标签上设置了<code>
,但是Pandoc不知道这意味着什么,也不应该知道。是的,您的<code>
元素没有包装在<p>
中,但是只是格式不正确的HTML(根据HTML规范,<code>
不是块级元素,而是{ {3}};也就是说,内容被包装在块级元素(例如<p>
或<pre>
元素中)。
然后是您的<br>
标签的问题。 Pandoc如何知道这是代码还是样式钩子的一部分?实际上,事实并非如此。这就是为什么我们将<pre>
标签用于多行代码块的原因。使用<pre>
标签,保留空白。因此,您只需要没有<br>
标签的换行符。
为完整起见,我意识到原始的Markdown规则不包括受防护的代码块,因此我还将指向GitHub Flavored Markdown规范,该规范还演示了phrasing content产生了<pre><code>
包装的块。自然,要反向进行操作,您需要以<pre><code>
包装的块开始,以带有围栏的代码块结束。