2013-05-17 21 views
5

oggi sto implementando la mia pagina in nanoc (template haml) e volevo scrivere alcuni post in markdown, ma quando si passa a blocchi di codice multilinea qualcosa di strano sta accadendo - seconda linea in il blocco di codice ha schede aggiuntive. Ho provato diverse sintassi Markdown, come ad esempio:blocco di codice multilinea in markdown aggiunge schede indesiderate

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

e

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

E entrambe le soluzioni mi dà il risultato qualcosa di simile:

line 1 is fine 
    line 2 is wrapping 

elementi Ispezione attraverso il browser mostra che non c'è imbottitura aggiuntiva - questo spazio bianco è fatto con le schede di sicuro.
Qualcuno può aiutarmi con questo? Forse sto facendo qualcosa di sbagliato?

risposta

5

Quando si utilizza = in Haml per includere i risultati di uno script, Haml reindividerà il testo inserito in modo che corrisponda al rientro di dove è incluso. Ad esempio, se si dispone di Haml che sembra qualcosa di simile:

%html 
    %body 
    .foo 
     = insert_something 

e insert_something restituisce un po 'di HTML come questo:

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

poi il codice HTML risultante sarà simile a questa:

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

Nota come l'elemento p è rientrato per corrispondere alla sua posizione nel documento. Normalmente questo non importa, a causa del modo in cui lo spazio bianco in HTML viene compresso. Tuttavia ci sono elementi HTML in cui lo spazio bianco è importante, in particolare pre.

Come appare sta accadendo qui è che il vostro Markdown sta generando qualcosa come

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

e quando è incluso nel file Haml (sto cercando di indovinare che si sta utilizzando layout Haml con = yield per includere il Markdown) viene indentato e lo spazio bianco viene visualizzato quando si visualizza la pagina. Nota come la prima riga è immediatamente dopo i tag di apertura quindi non ci sono spazi bianchi extra.

Ci sono un paio di modi per risolvere questo problema. Se imposti lo :ugly option, Haml non reinditerà blocchi come questo (mi dispiace non so come hai impostato le opzioni Haml in Nanoc).

È inoltre possibile utilizzare find_and_preserve helper method. Questo sostituisce tutte le nuove righe nei tag sensibili spazi bianchi con entità HTML &#x000A;, in modo che essi non saranno interessati dal spazi bianchi extra quando rientrato:

= find_and_preserve(yield) 

Haml fornisce un modo semplice per usare find_and_preserve; ~ works the same as =, except that it runs find_and_preserve on the result, quindi puoi fare:

~ yield 
+0

grazie! Il metodo 'find_and_preserve' funziona come un incantesimo! :) – mrmnmly

+1

Se non sbaglio, puoi usare '~ yield' invece di' = find_and_preserve (yield) '. – ddfreyne

+0

@ddfreyne - Sì hai ragione, ['~' funziona come '= find_and_preserve'] (http://haml.info/docs/yardoc/file.REFERENCE.html#tilde). Lo aggiungerò alla risposta. – matt

Problemi correlati