BBCode-style tag parser for terminal styling.
This crate provides a parser for [tag]content[/tag] style markup,
designed for terminal output styling. It handles nested tags correctly
and supports multiple output modes.
Example
use ;
use Style;
use HashMap;
let mut styles = new;
styles.insert;
styles.insert;
// Apply ANSI codes
let parser = new;
let output = parser.parse;
// output contains ANSI escape codes for bold
// Strip tags (plain text)
let parser = new;
let output = parser.parse;
assert_eq!;
// Keep tags visible (debug mode)
let parser = new;
let output = parser.parse;
assert_eq!;
Unknown Tag Handling
Tags not found in the styles map can be handled in two ways:
- [
UnknownTagBehavior::Passthrough]: Keep tags with a?marker:[foo]→[foo?] - [
UnknownTagBehavior::Strip]: Remove tags entirely, keep content:[foo]text[/foo]→text
For validation, use [BBParser::validate] to check for unknown tags before parsing.
Tag Name Syntax
Tag names follow CSS identifier rules:
- Start with a letter (
a-z) or underscore (_) - Followed by letters, digits (
0-9), underscores, or hyphens (-) - Cannot start with a digit or hyphen followed by digit
- Case-sensitive (lowercase recommended)
Pattern: [a-z_][a-z0-9_-]*