Thanks to visit codestin.com
Credit goes to lib.rs

#html-parser #markdown #html #parser

mark-html

A simple and efficient Markdown to HTML parser written in Rust

2 unstable releases

Uses new Rust 2024

0.2.0 Aug 20, 2025
0.1.0 Aug 20, 2025

#2311 in Text processing

MIT license

25KB
576 lines

Markdown to HTML Parser in Rust

A simple, lightweight library for converting Markdown to HTML, written in pure, safe Rust. This project aims to provide a straightforward and easy-to-use package for your Rust applications

✨ Features

Currently, the following Markdown syntax is supported:

  • Headings (#, ##, ###, etc.)
  • Bold text (**text**)
  • Italic text (*text*)
  • Links ([display text](url))
  • Unordered Lists (- list item)
  • Code Blocks (- codeblock item)

📦 Installation

To use mark-html in your project, you can add it to your Cargo.toml file:

[dependencies]
mark-html = "0.2.0"

Alternatively, you can use the cargo add command:

cargo add mark-html

🚀 Usage

Once the crate is added to your project, you can use the to_html function in your code:

// main.rs
extern crate mark-html;

fn main() {
    let markdown = "## Hello, World!\n\nThis is a **test** of our *new* parser.\n\n- Item 1\n- Item 2";
    let html = mark-html::to_html(markdown);
    println!("{}", html);
}

🏛️ Architecture

The conversion process happens in three main stages:

  1. Lexing: The input Markdown string is scanned and broken down into a sequence of "tokens". For example, **hello** becomes [BoldStart, Text("hello"), BoldEnd].
  2. Parsing: The sequence of tokens is converted into a hierarchical structure called an Abstract Syntax Tree (AST). This tree represents the document's structure (e.g., a paragraph containing bold text).
  3. Rendering: The AST is traversed, and for each node in the tree, the corresponding HTML is generated.

What's New in 0.2.0

  • Added support for code blocks.

Examples

Here are a few examples of the conversion in action.

Input:

# Main Title

This is a paragraph with **bold** and *italic* text. Here is a [link to GitHub](https://github.com/Shivrajsoni).

- First list item
- Second list item

Output:

<h1>Main Title</h1>
<p>This is a paragraph with <strong>bold</strong> and <em>italic</em> text. Here is a <a href="https://github.com">link to GitHub</a>.</p>
<ul>
<li>First list item</li>
<li>Second list item</li>
</ul>

🤝 Contributing

This project is under active development. Contributions, issues, and feature requests are welcome!

No runtime deps