Wordpress有提供一個便利的函數─wpautop
,它能夠利用換行字元來對HTML內容加上<p>
或是<br>
標籤,讓我們在後台直接用HTML語法撰寫文章的時候,不必手動加上<p>
或是<br>
標籤,這也讓HTML變得比較容易閱讀,不過這個函數還是有它的問題(用了一堆正規表示式、會產生大量字串、可能在錯誤的位置插入標籤)就是了。在Rust程式語言中,如果也想要用這樣的功能,要怎麼做呢?
先看看以下HTML吧!
<body>
Line 1
Line 2
</body>
若我們直接在HTML中的body
元素中撰寫以上內容,經過瀏覽器渲染(render)之後,會呈現為:
Line 1 Line 2
也就是說,Line 1
和Line 2
在實際的畫面中並沒有被換行。
若要讓Line 1
和Line 2
能正確換行,HTML就要寫成:
<body>
Line 1<br>
Line 2
</body>
但是若我們在Wordpress後台使用HTML編輯器編輯文章的話,不需要加上<br>
標籤就可以換行,正是因為Wordpress預設有啟用wpautop
函數的關係。
有了wpautop
函數,像以下這樣的寫法:
Paragraph 1 Paragraph 2
就會被自動轉成:
<p>Paragraph 1</p>
<p>Paragraph 2</p>
HTML Auto <p>
「HTML Auto <p>
」是筆者開發的套件,參考了Wordpress的wpautop
函數的作法,提供auto_p
函數,能夠做到和wpautop
函數類似的事情。
Crates.io
Cargo.toml
html-auto-p = "*"
使用方法
參考以下程式碼:
use html_auto_p::*;
assert_eq!("<p>Hello world!</p>", auto_p("Hello world!", Options::new()));
assert_eq!("<p>Line 1<br>\nLine 2</p>", auto_p("Line 1\nLine 2", Options::new().br(true)));
assert_eq!("<p>Line 1<br>\nLine 2</p>", auto_p("Line 1<br>\nLine 2", Options::new().br(true)));
assert_eq!("<p>Paragraph 1</p>\n<p>Paragraph 2</p>", auto_p("Paragraph 1\n\nParagraph 2", Options::new()));
assert_eq!("<pre>Line 1<br>\nLine 2</pre>", auto_p("<pre>Line 1<br>\nLine 2</pre>", Options::new().br(true)));
assert_eq!("<pre>Line 1<br>\nLine 2</pre>", auto_p("<pre>Line 1<br>\nLine 2</pre>", Options::new().br(true).esc_pre(true)));
assert_eq!("<pre>Line 1\nLine 2</pre>", auto_p("<pre>\nLine 1\nLine 2\n</pre>", Options::new().remove_useless_newlines_in_pre(true)));