htmlrubyhamlmarkdownmaruku

Maruku incorrectly parsing second line of code blocks?


I'm using Maruku (Ruby) to parse some Markdown formatted text. I have a problem when trying to format a block of code like such:

This is a normal line
# pretend this line is empty
    printf("First line of code is OK");
    printf("Second line of code (or any line thereafter) appears indented by an extra level, which is incorrect!");

So my first line of code (which I've indented in my md file by 4 spaces (or a tab), renders just as I'd expect. However, my second line of code (indented by exactly the same number of spaces) ends up being indented by an extra 4 spaces when the HTML is generated.

The output looks like this:

This is a normal line
<pre><code>printf("First line of code is OK");
      printf("Second line of code (or any line thereafter) appears indented by an extra level, which is incorrect!");</code></pre>

I've tested my Markdown input with Gruber's "Dingus", and it renders as I'd expect (that is, both lines of code in a single block, both indented at the same level). But with Maruku, it's bunk.

I've also tried with RDiscount, but I get the same effect. I'm using Maruku because I need definition lists.

How SO formats it:

This is a normal line

printf("First line of code is OK\n");
printf("Second line of code (or any line thereafter) appears indented by an extra level, which is incorrect!");

Solution

  • It turns out this was not a Maruku problem but a HAML problem.

    HAML is fussy when it comes to whitespace and preserving it. The solution was needing to use = preserve @my_html_string when rendering it.

    For example, given layout.haml:

    !!! 5
    %html
        %body
            = yield
    

    and index.haml

    %article
        = preserve @my_html_fragment_with_pre_and_code
    

    Then it would render correctly for me.