Rustextile is a parser of a popular Textile markup language written in pure Rust. It is a port of two libraries: the python-textile library and the "canonical" PHP Textile implementation (on which the python-textile library is based too).
This port passes the same automated tests as the original libraries do, and supports the same full set of functionality, including
- Decorated text spans
- Images
- Tables
- Ordered/unordered lists
- Definition lists
- Complex quotations
- Code blocks
- CSS styles, classes and ID attributes
- Raw HTML inserts
- Footnotes and references
- "Restricted" parsing for untrusted user input and other safety perks
- Rendering in either XHTML or HTML5
- and more...
There is another similar Rust library called textile-rs, which was written from scratch, but sadly supports only basic capabilities of Textile and is not fully compatible with documents created for more advanced canonical parser.
This implementation is a direct port of the canonical PHP parser. It uses a similar code structure, the same regular expressions, mostly the same variable names and the same tests fixtures. This makes it not only more compatible, but also allows to back-port new features and fixes from still actively developing PHP version.
For me this was also a good demonstration that one can rewrite a PHP or Python code in Rust without sacrificing brevity and readability typical for such high-level interpreted languages.