pub trait Generator<'a> {
type Convertor: TagConvertor<'a>;
type Output;
type Err: LocatedError + Display + Debug + Into<Error<'a, Self::Err>>;
// Required methods
fn convertor(&mut self) -> &mut Self::Convertor;
fn generate(
&mut self,
ir: Vec<Vec<ItemG<'a, Self>>>,
) -> Result<Self::Output, Self::Err>;
}Expand description
Generator generates final output to show tui markup in some backend.
§How to add support for new backend
Some concepts:
- Markup text/Source: the text you write in tui markup language.
- Parser: parse markup text into a series of Item, which usually be called as AST.
- Tag Convertor: Convert raw tag string like
green,bg:66ccff,mod:binto Tag. - Generator: generator final output from
Item<Tag>.
So the whole pipeline is:
Source --- Parser --> Item --- Tag Convertor --> Item<Tag> --- Generator --> Output --> Show it in some backendThe source, parser, Item, Tag, is already defined, so just write a Tag Convertor and a Generator, a new backend will be supported.
§Generic implementation using flatten
Your tag convertor will parse color/modifiers string to some Color/Modifier type, and will support custom tag
by a Style type, which can be converted from Color and Modifier too.
In this case, a Tag of this convertor can be convert to the Style type easily.
If this Style can be patched by other, then you can use the flatten
help method to do almost all the convert staff from AST to your final result.
Read document of flatten to learn more, or just checkout a builtin implementation.
Required Associated Types§
Sourcetype Convertor: TagConvertor<'a>
type Convertor: TagConvertor<'a>
Tag convertor type.
Sourcetype Err: LocatedError + Display + Debug + Into<Error<'a, Self::Err>>
type Err: LocatedError + Display + Debug + Into<Error<'a, Self::Err>>
Error type.
If the generator can’t fall, please use GeneratorInfallible.
Required Methods§
Implementations on Foreign Types§
Implementors§
Source§impl<'a, P> Generator<'a> for ANSIStringsGenerator<P>where
P: CustomTagParser<Output = Style>,
Available on crate feature ansi only.
impl<'a, P> Generator<'a> for ANSIStringsGenerator<P>where
P: CustomTagParser<Output = Style>,
ansi only.type Convertor = ANSITermTagConvertor<P>
type Output = Vec<ANSIGenericString<'a, str>>
type Err = GeneratorInfallible
Source§impl<'a, P> Generator<'a> for CrosstermCommandsGenerator<P>where
P: CustomTagParser<Output = ContentStyle>,
Available on crate feature crossterm only.
impl<'a, P> Generator<'a> for CrosstermCommandsGenerator<P>where
P: CustomTagParser<Output = ContentStyle>,
crossterm only.Source§impl<'a, P> Generator<'a> for RatatuiTextGenerator<P>where
P: CustomTagParser<Output = Style>,
Available on crate feature ratatui only.
impl<'a, P> Generator<'a> for RatatuiTextGenerator<P>where
P: CustomTagParser<Output = Style>,
ratatui only.