5

今天我在 nanoc(haml 模板)中实现我的页面,我想在 markdown 中写一些帖子,但是当它进入多行代码块时,发生了一些奇怪的事情 - 代码块中的第二行有额外的选项卡。我尝试了多种降价语法,例如:

//double tab wrapping
    line 1 is fine
    line 2 is wrapping (don't know why!)

~~~
//tilde code wrapping
line 1 is fine
line 2 is wrapping
~~~

这两种解决方案都给了我这样的结果:

line 1 is fine
    line 2 is wrapping

通过浏览器检查元素表明没有额外的填充 - 这个空白肯定是用制表符组成的。
有人可以帮我弄这个吗?也许我做错了什么?

4

1 回答 1

5

当您=在 Haml 中使用包含脚本的结果时,Haml 将重新缩进插入的文本,以便它与包含它的位置的缩进匹配。例如,如果您的 Haml 看起来像这样:

%html
  %body
    .foo
      = insert_something

insert_something返回一些这样的 HTML:

<p>
This is possily generated from Markdown.
</p>

那么生成的 HTML 将如下所示:

<html>
  <body>
    <div class='foo'>
      <p>
      This is possily generated from Markdown.
      </p>
    </div>
  </body>
</html>

请注意p元素如何缩进以匹配其在文档中的位置。通常这无关紧要,因为 HTML 中的空格是折叠的。但是,有些 HTML 元素的空格很重要,尤其是pre.

这里发生的情况是您的 Markdown 正在生成类似

<pre><code>line 1 is fine
line 2 is wrapping
</code></pre>

并且当它包含在您的 Haml 文件中时(我猜您正在使用= yield包含 Markdown 的 Haml 布局)它正在缩进并且当您查看页面时会显示空白。请注意第一行是如何紧跟在开始标签之后的,因此没有多余的空格。

有几种方法可以解决这个问题。如果您设置该:ugly选项,那么 Haml 将不会像这样重新缩进块(抱歉,我不知道您如何在 Nanoc 中设置 Haml 选项)。

您也可以使用find_and_preserve辅助方法。这会将空格敏感标签中的所有换行符替换为 HTML entity &#x000A;,这样它们在缩进时不会受到额外空格的影响:

= find_and_preserve(yield)

Haml 提供了一种简单的使用方法find_and_preserve~工作方式与 相同=,只是它find_and_preserve在 result 上运行,因此您可以执行以下操作:

~ yield
于 2013-05-18T20:49:37.423 回答