tui-lipan 0.1.0

Opinionated, component-based TUI framework for Rust - declarative components, reconciliation, layout engine, focus, overlays, and rich widgets on top of ratatui.
Documentation
use super::MermaidParseError;

pub(crate) fn significant_lines(src: &str) -> Vec<(usize, String)> {
    src.lines()
        .enumerate()
        .filter_map(|(idx, line)| {
            let cleaned = clean_line(line);
            (!cleaned.is_empty()).then_some((idx + 1, cleaned))
        })
        .collect()
}

pub(crate) fn clean_line(line: &str) -> String {
    let trimmed = line.trim();
    if trimmed.starts_with("%%") {
        return String::new();
    }
    trimmed.to_string()
}

pub(crate) fn strip_quotes(value: &str) -> &str {
    value
        .trim()
        .strip_prefix('"')
        .and_then(|s| s.strip_suffix('"'))
        .unwrap_or_else(|| value.trim())
}

pub(crate) fn parse_labelled_pair<'a>(
    line: &'a str,
    sep: &str,
    line_no: usize,
) -> Result<(&'a str, &'a str), MermaidParseError> {
    line.split_once(sep)
        .map(|(left, right)| (left.trim(), right.trim()))
        .filter(|(left, right)| !left.is_empty() && !right.is_empty())
        .ok_or_else(|| MermaidParseError::new(format!("expected `{sep}`"), Some(line_no)))
}