synaptic-splitters 0.4.0

Text splitters: Character, Recursive, Markdown, HTML, Language, Token
Documentation
/// Programming language for language-aware text splitting.
#[derive(Debug, Clone, Copy)]
pub enum Language {
    Python,
    JavaScript,
    TypeScript,
    Rust,
    Go,
    Java,
    Cpp,
    Ruby,
    Markdown,
    Latex,
    Html,
}

impl Language {
    /// Get the hierarchical separators for this language.
    pub fn separators(&self) -> Vec<String> {
        match self {
            Language::Python => vec![
                "\nclass ".to_string(),
                "\ndef ".to_string(),
                "\n\tdef ".to_string(),
                "\n\n".to_string(),
                "\n".to_string(),
                " ".to_string(),
                String::new(),
            ],
            Language::JavaScript => vec![
                "\nfunction ".to_string(),
                "\nconst ".to_string(),
                "\nlet ".to_string(),
                "\nvar ".to_string(),
                "\nclass ".to_string(),
                "\n\n".to_string(),
                "\n".to_string(),
                " ".to_string(),
                String::new(),
            ],
            Language::TypeScript => vec![
                "\nfunction ".to_string(),
                "\nconst ".to_string(),
                "\nlet ".to_string(),
                "\nvar ".to_string(),
                "\nclass ".to_string(),
                "\ninterface ".to_string(),
                "\ntype ".to_string(),
                "\nenum ".to_string(),
                "\n\n".to_string(),
                "\n".to_string(),
                " ".to_string(),
                String::new(),
            ],
            Language::Rust => vec![
                "\nfn ".to_string(),
                "\nstruct ".to_string(),
                "\nimpl ".to_string(),
                "\nenum ".to_string(),
                "\nmod ".to_string(),
                "\ntrait ".to_string(),
                "\n\n".to_string(),
                "\n".to_string(),
                " ".to_string(),
                String::new(),
            ],
            Language::Go => vec![
                "\nfunc ".to_string(),
                "\ntype ".to_string(),
                "\n\n".to_string(),
                "\n".to_string(),
                " ".to_string(),
                String::new(),
            ],
            Language::Java => vec![
                "\nclass ".to_string(),
                "\npublic ".to_string(),
                "\nprotected ".to_string(),
                "\nprivate ".to_string(),
                "\nstatic ".to_string(),
                "\n\n".to_string(),
                "\n".to_string(),
                " ".to_string(),
                String::new(),
            ],
            Language::Cpp => vec![
                "\nclass ".to_string(),
                "\nvoid ".to_string(),
                "\nint ".to_string(),
                "\nfloat ".to_string(),
                "\n\n".to_string(),
                "\n".to_string(),
                " ".to_string(),
                String::new(),
            ],
            Language::Ruby => vec![
                "\ndef ".to_string(),
                "\nclass ".to_string(),
                "\nmodule ".to_string(),
                "\n\n".to_string(),
                "\n".to_string(),
                " ".to_string(),
                String::new(),
            ],
            Language::Markdown => vec![
                "\n## ".to_string(),
                "\n### ".to_string(),
                "\n#### ".to_string(),
                "\n\n".to_string(),
                "\n".to_string(),
                " ".to_string(),
                String::new(),
            ],
            Language::Latex => vec![
                "\n\\chapter{".to_string(),
                "\n\\section{".to_string(),
                "\n\\subsection{".to_string(),
                "\n\n".to_string(),
                "\n".to_string(),
                " ".to_string(),
                String::new(),
            ],
            Language::Html => vec![
                "<div".to_string(),
                "<p".to_string(),
                "<br".to_string(),
                "<li".to_string(),
                "<h1".to_string(),
                "<h2".to_string(),
                "<h3".to_string(),
                "<table".to_string(),
                "<tr".to_string(),
                "\n\n".to_string(),
                "\n".to_string(),
                " ".to_string(),
                String::new(),
            ],
        }
    }
}