| Crates.io | markex |
| lib.rs | markex |
| version | 0.1.0 |
| created_at | 2025-12-05 19:21:22.667691+00 |
| updated_at | 2026-01-04 23:03:31.048543+00 |
| description | Fast, non-validating markup element extractor (Tag Element, MdRef, MdCodeBlock, MDSection) |
| homepage | https://github.com/jeremychone/rust-markex |
| repository | https://github.com/jeremychone/rust-markex |
| max_upload_size | |
| id | 1969019 |
| size | 66,653 |
Fast, non-validating markup element extractor for Tag elements (XML-like), and later Markdown elements.
Parts) and zero-copy reference (PartsRef) extraction.TagIter and TagRefIter.use markex::tag::{self, Part};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let input = "Text before <DATA id=123>some content</DATA> and after.";
// 1. Owned Extraction
let parts = tag::extract(input, &["DATA"], true);
for part in parts {
match part {
Part::Text(t) => println!("Text: {t:?}"),
Part::TagElem(e) => println!("Tag: {} | Content: {}", e.tag, e.content),
}
}
// 2. Extrude content (concatenate text, keep elements)
let (elems, text) = parts.into_with_extrude_content();
Ok(())
}
For high-performance scenarios, use extract_refs to get PartRef which contains slices of the original input.
use markex::tag;
let input = "<FILE path='a.txt'>content</FILE>";
let parts_ref = tag::extract_refs(input, &["FILE"], true);
for part in parts_ref {
// Zero-copy slices
}
tag::extract(...) -> Parts: Returns owned data.tag::extract_refs(...) -> PartsRef: Returns references (zero-copy).Parts / PartsRef: Collection-like structures with tag_elems(), texts(), and iteration support.TagIter / TagRefIter: Lower-level iterators for streaming processing.