Skip to main content

dictx_parser/
lib.rs

1mod anki;
2mod cedict;
3mod ecdict;
4mod html;
5mod sqlite_dict;
6mod traits;
7
8pub use anki::AnkiJsonlParser;
9pub use cedict::CedictParser;
10pub use ecdict::EcdictParser;
11pub use sqlite_dict::SqliteDictParser;
12pub use traits::*;
13
14use dictx_core::{DictxError, Result};
15use std::path::Path;
16
17pub fn parser_for(format: &str) -> Result<Box<dyn DictParser>> {
18    match format {
19        "ecdict" | "csv" => Ok(Box::new(EcdictParser)),
20        "anki" | "anki-jsonl" | "jsonl" => Ok(Box::new(AnkiJsonlParser)),
21        "cedict" | "cc-cedict" => Ok(Box::new(CedictParser)),
22        "sqlite" | "kd" | "kd-db" => Ok(Box::new(SqliteDictParser::default())),
23        "mdx" => Err(DictxError::UnsupportedSource(
24            "MDX 原生解析暂未启用;请先转换为 JSONL 或等待后续适配".to_string(),
25        )),
26        other => Err(DictxError::UnsupportedSource(format!(
27            "未知词典格式: {other}"
28        ))),
29    }
30}
31
32pub fn parse_path(
33    format: &str,
34    path: &Path,
35) -> Result<Box<dyn Iterator<Item = Result<dictx_core::DictEntry>>>> {
36    parser_for(format)?.parse(path)
37}