многострочный блок кода в уценке добавляет нежелательные вкладки

сегодня я реализую свою страницу в nanoc (шаблоны haml) и хотел написать несколько сообщений в уценке, но когда дело доходит до многострочных блоков кода, происходит что-то странное - вторая строка в блоке кода имеет дополнительные вкладки. Я пробовал несколько синтаксисов уценки, например:

//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

Проверка элементов через браузер показывает, что дополнительных отступов нет — этот пробел точно сделан табуляцией.
Может ли кто-нибудь помочь мне с этим? Может я что-то не так делаю?


person lukaszkups    schedule 17.05.2013    source источник


Ответы (1)


Когда вы используете = в 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 (я предполагаю, что вы используете макеты Haml с = yield для включения Markdown), он получает отступ, и при просмотре страницы появляется пробел. Обратите внимание, что первая строка находится сразу после открывающих тегов, поэтому лишних пробелов нет.

Есть несколько способов исправить это. Если вы установите параметр :ugly, Haml не будет повторно такие блоки с отступом (извините, я не знаю, как вы устанавливаете параметры Haml в Nanoc).

Вы также можете использовать find_and_preserve вспомогательный метод. Это заменяет все новые строки в тегах, чувствительных к пробелам, на объект HTML &#x000A;, чтобы на них не влияли дополнительные пробелы при отступе:

= find_and_preserve(yield)

Haml предоставляет простой способ использования find_and_preserve; ~ работает так же, как =, за исключением того, что для результата выполняется find_and_preserve , так что вы можете сделать:

~ yield
person matt    schedule 18.05.2013
comment
Если я не ошибаюсь, вы можете использовать ~ yield вместо = find_and_preserve(yield). - person Denis Defreyne; 22.05.2013
comment
@ddfreyne. Да, вы правы, ~ работает так же, как = find_and_preserve. Добавлю к ответу. - person matt; 22.05.2013