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 1Line 2在實際的畫面中並沒有被換行。

若要讓Line 1Line 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

https://crates.io/crates/html-auto-p

Cargo.toml

html-auto-p = "*"

使用方法

參考以下程式碼:

extern crate 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)));