pub const WORDS_PER_TOKEN: f64 = 0.75;
pub const CJK_CHARS_PER_TOKEN: f64 = 1.5;
pub const TEXT_EXTENSIONS: &[&str] = &["txt", "text", "md", "markdown", "rst", "adoc", "asciidoc"];
pub const HTML_EXTENSIONS: &[&str] = &["html", "htm", "xhtml"];
pub const ANYDOC_EXTENSIONS: &[&str] = &[
"doc", "docx", "docm", "odt", "ppt", "pps", "pot", "pptx", "pptm", "ppsx", "ppsm", "rtf",
"epub", "xls", "xlsx", "xlsm", "xlsb", "ods", "odp", "csv",
];
pub const CALIBRE_EXTENSIONS: &[&str] = &["mobi", "azw", "azw3"];
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Route {
Text,
Html,
Pdf,
Anydoc,
Calibre,
}
impl Route {
pub fn for_extension(ext: &str) -> Option<Route> {
let ext = ext.to_ascii_lowercase();
let ext = ext.as_str();
if ext == "pdf" {
Some(Route::Pdf)
} else if TEXT_EXTENSIONS.contains(&ext) {
Some(Route::Text)
} else if HTML_EXTENSIONS.contains(&ext) {
Some(Route::Html)
} else if ANYDOC_EXTENSIONS.contains(&ext) {
Some(Route::Anydoc)
} else if CALIBRE_EXTENSIONS.contains(&ext) {
Some(Route::Calibre)
} else {
None
}
}
}
pub fn supported_extensions() -> Vec<&'static str> {
let mut all: Vec<&'static str> = vec!["pdf"];
all.extend_from_slice(TEXT_EXTENSIONS);
all.extend_from_slice(HTML_EXTENSIONS);
all.extend_from_slice(ANYDOC_EXTENSIONS);
all.extend_from_slice(CALIBRE_EXTENSIONS);
all.sort_unstable();
all
}