2013-05-17 34 views
5

hôm nay tôi đang triển khai trang của mình ở dạng nanoc (haml templates) và tôi muốn viết một số bài viết trong markdown, nhưng khi nó đi đến khối mã nhiều thứ gì đó kỳ lạ đang xảy ra - dòng thứ hai trong khối mã có các tab bổ sung. Tôi đã thử nhiều cú pháp markdown, chẳng hạn như:khối multiline trong markdown thêm các tab không mong muốn

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

Và cả hai giải pháp mang lại cho tôi một cái gì đó kết quả như thế này:

line 1 is fine 
    line 2 is wrapping 

yếu tố Kiểm tra thông qua trình duyệt cho thấy không có phần đệm bổ sung - khoảng trống này được tạo bằng các tab chắc chắn.
Ai đó có thể giúp tôi với điều này không? Có lẽ tôi đang làm gì đó sai?

Trả lời

5

Khi bạn sử dụng = trong Haml để bao gồm kết quả của tập lệnh, Haml sẽ thụt lại văn bản được chèn để nó khớp với thụt lề của vị trí được bao gồm. Ví dụ, nếu bạn có Haml mà trông giống như sau:

%html 
    %body 
    .foo 
     = insert_something 

insert_something trả về một số HTML như thế này:

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

sau đó kết quả HTML sẽ trông như thế này:

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

Lưu ý cách phần tử p được thụt vào để khớp với vị trí của nó trong tài liệu. Thông thường điều này không quan trọng, vì cách khoảng trắng trong HTML bị thu gọn. Tuy nhiên, có các phần tử HTML trong đó khoảng trắng là quan trọng, cụ thể là pre.

gì nó trông giống như đang xảy ra ở đây là Markdown bạn đang tạo ra một cái gì đó giống như

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

và khi nó được bao gồm trong tập tin Haml của bạn (tôi đoán bạn đang sử dụng bố trí Haml với = yield để bao gồm Markdown) nó đang được thụt lề và khoảng trắng hiển thị khi bạn xem trang. Lưu ý cách dòng đầu tiên ngay sau thẻ mở vì vậy không có khoảng trống thừa nào.

Có một số cách để khắc phục sự cố này. Nếu bạn đặt :ugly option thì Haml sẽ không thụt lại các khối như thế này (xin lỗi tôi không biết cách bạn đặt tùy chọn Haml ở Nanoc).

Bạn cũng có thể sử dụng find_and_preserve helper method. Này thay thế tất cả các dòng mới trong các thẻ nhạy cảm khoảng trắng với HTML thực thể &#x000A;, do đó họ sẽ không bị ảnh hưởng bởi khoảng trắng thêm khi thụt:

= find_and_preserve(yield) 

Haml cung cấp một cách dễ dàng để sử dụng find_and_preserve; ~ works the same as =, except that it runs find_and_preserve on the result, vì vậy bạn có thể làm:

~ yield 
+0

cảm ơn! Phương thức 'find_and_preserve' hoạt động như một nét duyên dáng! :) – mrmnmly

+1

Nếu tôi không nhầm, bạn có thể sử dụng '~ yield' thay vì' = find_and_preserve (yield) '. – ddfreyne

+0

@ddfreyne - Đúng vậy, ['~' hoạt động giống như '= find_and_preserve'] (http://haml.info/docs/yardoc/file.REFERENCE.html#tilde). Tôi sẽ thêm nó vào câu trả lời. – matt