Skip to main content

dictx_parser/
lib.rs

1mod anki;
2mod cedict;
3mod dxdict;
4mod ecdict;
5mod html;
6mod mdx;
7mod sqlite_dict;
8mod traits;
9
10pub use anki::AnkiJsonlParser;
11pub use cedict::CedictParser;
12pub use dxdict::{
13    write_dxdict, BuiltinDxdictParser, DxdictMetadata, DxdictParser, BUILTIN_KD_DATA_SOURCE,
14    BUILTIN_NEW_CENTURY_SOURCE,
15};
16pub use ecdict::EcdictParser;
17pub use mdx::MdxParser;
18pub use sqlite_dict::SqliteDictParser;
19pub use traits::*;
20
21use dictx_core::{DictxError, Result};
22use std::path::Path;
23
24pub fn parser_for(format: &str) -> Result<Box<dyn DictParser>> {
25    match format {
26        "ecdict" | "csv" => Ok(Box::new(EcdictParser)),
27        "anki" | "anki-jsonl" | "jsonl" => Ok(Box::new(AnkiJsonlParser)),
28        "dxdict" | "dictx" | "dictx-pack" => Ok(Box::new(DxdictParser)),
29        "builtin-dxdict" | "builtin" => Ok(Box::new(BuiltinDxdictParser)),
30        "cedict" | "cc-cedict" => Ok(Box::new(CedictParser)),
31        "sqlite" | "kd" | "kd-db" => Ok(Box::new(SqliteDictParser::default())),
32        "mdx" | "mdict" => Ok(Box::new(MdxParser)),
33        other => Err(DictxError::UnsupportedSource(format!(
34            "未知词典格式: {other}"
35        ))),
36    }
37}
38
39pub fn parse_path(
40    format: &str,
41    path: &Path,
42) -> Result<Box<dyn Iterator<Item = Result<dictx_core::DictEntry>>>> {
43    parser_for(format)?.parse(path)
44}