Escapar de chaves duplas dentro de um bloco de código de marcação em Jekyll

86

Estou usando Jekyll para criar um site de documentação em que estou tentando documentar algum código que contém sintaxe semelhante a um guiador. Por exemplo {{foo}}. O problema é que Jekyll usa etiquetas líquidas e não importa o que eu faça, meus cachos duplos estão sendo arrancados pelo processador de líquidos.

A propósito, estou usando kramdown como processador de redução.

Aqui está algo que tentei:

{% highlight html linenos %}
  Hello, my name is {{name}}.
{% endhighlight %}

Este remove a seção {{name}} completamente porque pensa que é uma referência a uma variável líquida.

Eu também tentei isso:

{% highlight html linenos %}
  Hello, my name is \{\{name\}\}.
{% endhighlight %}

Neste caso, estou tentando escapar das chaves, mas o resultado é que as barras são renderizadas na página.

Eu até tentei isso:

{% highlight html linenos %}
  Hello, my name is <span>{</span>{name}}.
{% endhighlight %}

É certo que este era muito burro. Nesse caso, como especifiquei a sintaxe como html (o que precisa ser), a tag span é renderizada na página.

Então, como posso resolver isso?

resgatador criativo
fonte

Respostas:

181

Você está procurando a {% raw %}etiqueta.

{% raw %}
Hello, my name is {{name}}.
{% endraw %}
SLaks
fonte
6
Ah HAH! Você é meu novo melhor amigo.
resgatador criativo
Obrigado, isso é exatamente o que eu quero.
wukong
Obrigado ... isso estava me deixando louco.
learningMachine
E se o código que você deseja escapar for o {% raw %} {{...}} {% endraw %}que você pode encontrar em uma postagem de blog discutindo esse mesmo assunto?
starfry
3
@starfry: Engraçado você perguntar ... blog.slaks.net/2013-06-10/jekyll-endraw-in-code
SLaks
33

Você pode usar {% raw %}para garantir que o conteúdo não seja modificado por Jekyll:

{% raw %}
This is inserted literally: {{foo}}
{% endraw %}

No entanto, observe que este não é um bloco de código . Você precisará de formatação de código adicional para fazer seu conteúdo renderizar como código:

{% raw %}
    I'm a code block, because I'm indented by 4 spaces
{% endraw %}
{% raw %}
```handlebars
I'm a code block that contains {{handlebars}}
with highlighting.
```
{% endraw %}
Wilfred Hughes
fonte
Obrigado por essa adição. Acabei fazendo algo um pouco mais feio do que isso {% raw %}{{ foo }}{% endraw %}para cada ocorrência, então vou dar uma olhada no que você fez aqui.
criativa de resgate de
Esta é uma solução mais flexível, pois permite manter o bloco de código e sua sintaxe.
Kiddo
19

Com jekyll, o código é:

{% highlight html%}
{% raw %}
     <h2> {{ user.name.first | uppercase }}</h2>
     <p> {{ user.email }}</p>
{% endraw %}
{% endhighlight %}
Nicolas Molina
fonte
Esta é a solução exata. Obrigado!
Jerad Rutnam
vale a pena notar: O acima funciona, também com o marcador Rouge. No entanto, o raw não funciona se estiver usando sintaxe restrita para código de destaque (três crases principais como `` `html…)
Frank Nocke,
5

Para referências futuras: usar simples {% raw %}e {% endraw %}é apenas a segunda melhor solução, pois essas são mostradas se você procurar o Markdown em github.com normal.

A melhor maneira é colocar {% raw %}e {% endraw %}em comentários HTML:

<!-- {% raw %} -->
something with curlky brackets like { this } and { that }
<!-- {% endraw %} -->

Devido aos comentários em HTML, ele é visto pelo Github como um comentário. Nas páginas do Github, as tags brutas evitarão a análise das chaves entre as tags.

liquidat
fonte
2

Isso funciona em jekyll :

{%raw%}{{thing}}{%endraw%}
Lisa Sinclair
fonte
Para sua informação, incluí a citação tripla para demonstrar que um bloco de código dentro de Jekyll funcionaria. A intenção não era criar um bloco de código na resposta :)
Lisa Sinclair