mod anki;
mod cedict;
mod ecdict;
mod html;
mod sqlite_dict;
mod traits;
pub use anki::AnkiJsonlParser;
pub use cedict::CedictParser;
pub use ecdict::EcdictParser;
pub use sqlite_dict::SqliteDictParser;
pub use traits::*;
use dictx_core::{DictxError, Result};
use std::path::Path;
pub fn parser_for(format: &str) -> Result<Box<dyn DictParser>> {
match format {
"ecdict" | "csv" => Ok(Box::new(EcdictParser)),
"anki" | "anki-jsonl" | "jsonl" => Ok(Box::new(AnkiJsonlParser)),
"cedict" | "cc-cedict" => Ok(Box::new(CedictParser)),
"sqlite" | "kd" | "kd-db" => Ok(Box::new(SqliteDictParser::default())),
"mdx" => Err(DictxError::UnsupportedSource(
"MDX 原生解析暂未启用;请先转换为 JSONL 或等待后续适配".to_string(),
)),
other => Err(DictxError::UnsupportedSource(format!(
"未知词典格式: {other}"
))),
}
}
pub fn parse_path(
format: &str,
path: &Path,
) -> Result<Box<dyn Iterator<Item = Result<dictx_core::DictEntry>>>> {
parser_for(format)?.parse(path)
}