tui-markup 0.2.0-alpha

markup langauge for terminal styled text
Documentation
use std::error::Error;

use crossterm::{
    event::{Event, KeyCode},
    terminal::{EnterAlternateScreen, LeaveAlternateScreen},
    ExecutableCommand,
};
use tui::{backend::CrosstermBackend, widgets::Paragraph, Terminal};

use tui_markup::{compile, generator::TuiTextGenerator};

static HELP_TEXTS: &str = include_str!("help.txt");

fn main() -> Result<(), Box<dyn Error>> {
    crossterm::terminal::enable_raw_mode()?;
    let mut stdout = std::io::stdout();
    stdout.execute(EnterAlternateScreen)?;
    let backend = CrosstermBackend::new(stdout);
    let mut terminal = Terminal::new(backend)?;
    terminal.hide_cursor()?;

    loop {
        terminal.draw(|frame| {
            frame.render_widget(
                Paragraph::new(compile::<TuiTextGenerator>(HELP_TEXTS).unwrap()),
                frame.size(),
            );
        })?;

        if let Event::Key(key) = crossterm::event::read()? {
            if let KeyCode::Char('q') = key.code {
                break;
            }
        };
    }

    terminal.backend_mut().execute(LeaveAlternateScreen)?;
    crossterm::terminal::disable_raw_mode()?;
    terminal.show_cursor()?;
    Ok(())
}

#[cfg(test)]
mod test {
    use tui_markup::generator::TuiTextGenerator;

    #[test]
    fn test_help_text() {
        assert!(tui_markup::compile::<TuiTextGenerator>(super::HELP_TEXTS).is_ok());
    }
}