9 unstable releases (4 breaking)
0.5.0 | Oct 3, 2024 |
---|---|
0.4.0 | Apr 20, 2024 |
0.3.0 | Oct 19, 2022 |
0.2.1 | Aug 18, 2022 |
0.1.1 | Aug 13, 2022 |
#372 in Parser implementations
Used in 2 crates
67KB
1.5K
SLoC
tui markup
This crate provides a markup language to quickly write colorful and styled terminal text in plain text.
Usage
use ansi_term::{ANSIStrings, Color, Style};
use tui_markup::{compile, compile_with, generator::ANSIStringsGenerator};
// Parse markup into some final result for showing
let result = compile::<ANSIStringsGenerator>("You got a <yellow Coin>").unwrap();
// Show it
println!("{}", ANSIStrings(&result));
// With custom tag
let gen = ANSIStringsGenerator::new(|tag: &str| match tag {
"keyboard" => Some(Style::default().fg(Color::Blue).on(Color::Black).bold()),
_ => None,
});
let result = compile_with("Press <keyboard Space> to jump", gen).unwrap();
println!("{}", ANSIStrings(&result));
Result:
Notice the result type and how to show it is vary depends on what Generator
you use.
Current available built-in generators:
ansi
:ANSIStringsGenerator
for directly print result in any ASNI compliant terminal.ratatui
:RatatuiTextGenerator
for createText
struct ofratatui
crate to show the result.crossterm
:CrosstermCommandsGenerator
for create a series of Command ofcrossterm
crate to print the result.
There is also a macro(tui-markup-ansi-macro
crate) to compile markup source into ANSI sequence at compile time, check it if you need.
You can add this markup support for other terminal/library/application easily by create you own generator.
Examples
The example is shown in Windows Terminal, using the following command:
cargo run --example ratatui --features ratatui,crossterm -- examples/help.txt
The source markup text of this article can be found in examples/help.txt.
you can change the last argument to your file to render other article, for example examples/indexed.txt
for a full xterm256 color chart:
Those two screenshot are using built-in ratatui
generator.
Markup syntax
Only one syntax <taglist content>
to add style to content.
taglist
is a tag
list sep by ,
.
tag
has format of mode:value
, available mode
are:
fg:
for foreground color.bg:
for background color.mod:
for modifiers.
Mode and :
is optional except for bg:
, so 66ccff
= fg:66ccf
, and b
= mod:b
.
Some examples:
<green text>
for a green color text,<66ccff text>
for a #66ccff color text.<bg:blue text>
for a blue background text,<bg:66ccff text>
for a #66ccff background text.<b text>
for a bold text,<i text>
for a italic/slant text.<bg:blue one<green two>>
, is a blue background one followed by a blue background and green foreground two.<bg:blue,green,b,i text>
is a blue background, green foreground, bold, italic text.
And you can define your own tag, like example code above.
The formal syntax spec can be found in docs/syntax.ebnf.
Color and modifier supports vary by generator you want to use, see their document for details.
TODO
- Generator for
termion
- Generator for
ncurses
LICENSE
BSD-3-Clause-Clear, See LICENSE.
Dependencies
~0.9–10MB
~118K SLoC