rapid-structure-rs 1.0.0

Rust document-structure engine for PaddleOCR-family ONNX models: text detection/recognition (PP-OCRv6), table structure (SLANet-plus) and formula recognition (PP-FormulaNet) on Windows x64 via ONNX Runtime.
//! `ftfy` 表的精确副本,由 `tools/build_ftfy_tables.py` 生成,请勿手工编辑。
//!
//! 生成来源:本机安装的 ftfy 6.3.1(`ftfy.chardata` / `ftfy.fixes`)。
//! 这些表只服务于 `crate::formula::ftfy` 中确定性步骤的逐字符等价性。

/// `ftfy.chardata.LIGATURES`:拉丁连字 -> 展开后的字符串。
pub(crate) static LIGATURES: &[(char, &str)] = &[
    ('\u{132}', "IJ"),
    ('\u{133}', "ij"),
    ('\u{149}', "ʼn"),
    ('\u{1c4}', "DŽ"),
    ('\u{1c5}', "Dž"),
    ('\u{1c6}', "dž"),
    ('\u{1c7}', "LJ"),
    ('\u{1c8}', "Lj"),
    ('\u{1c9}', "lj"),
    ('\u{1ca}', "NJ"),
    ('\u{1cb}', "Nj"),
    ('\u{1cc}', "nj"),
    ('\u{1f1}', "DZ"),
    ('\u{1f2}', "Dz"),
    ('\u{1f3}', "dz"),
    ('\u{fb00}', "ff"),
    ('\u{fb01}', "fi"),
    ('\u{fb02}', "fl"),
    ('\u{fb03}', "ffi"),
    ('\u{fb04}', "ffl"),
    ('\u{fb05}', "ſt"),
    ('\u{fb06}', "st"),
];

/// `ftfy.chardata.WIDTH_MAP`:全角/半角形式的规范化映射(目标可能多于一个字符)。
pub(crate) static WIDTH_MAP: &[(char, &str)] = &[
    ('\u{3000}', " "),
    ('\u{ff01}', "!"),
    ('\u{ff02}', "\""),
    ('\u{ff03}', "#"),
    ('\u{ff04}', "$"),
    ('\u{ff05}', "%"),
    ('\u{ff06}', "&"),
    ('\u{ff07}', "'"),
    ('\u{ff08}', "("),
    ('\u{ff09}', ")"),
    ('\u{ff0a}', "*"),
    ('\u{ff0b}', "+"),
    ('\u{ff0c}', ","),
    ('\u{ff0d}', "-"),
    ('\u{ff0e}', "."),
    ('\u{ff0f}', "/"),
    ('\u{ff10}', "0"),
    ('\u{ff11}', "1"),
    ('\u{ff12}', "2"),
    ('\u{ff13}', "3"),
    ('\u{ff14}', "4"),
    ('\u{ff15}', "5"),
    ('\u{ff16}', "6"),
    ('\u{ff17}', "7"),
    ('\u{ff18}', "8"),
    ('\u{ff19}', "9"),
    ('\u{ff1a}', ":"),
    ('\u{ff1b}', ";"),
    ('\u{ff1c}', "<"),
    ('\u{ff1d}', "="),
    ('\u{ff1e}', ">"),
    ('\u{ff1f}', "?"),
    ('\u{ff20}', "@"),
    ('\u{ff21}', "A"),
    ('\u{ff22}', "B"),
    ('\u{ff23}', "C"),
    ('\u{ff24}', "D"),
    ('\u{ff25}', "E"),
    ('\u{ff26}', "F"),
    ('\u{ff27}', "G"),
    ('\u{ff28}', "H"),
    ('\u{ff29}', "I"),
    ('\u{ff2a}', "J"),
    ('\u{ff2b}', "K"),
    ('\u{ff2c}', "L"),
    ('\u{ff2d}', "M"),
    ('\u{ff2e}', "N"),
    ('\u{ff2f}', "O"),
    ('\u{ff30}', "P"),
    ('\u{ff31}', "Q"),
    ('\u{ff32}', "R"),
    ('\u{ff33}', "S"),
    ('\u{ff34}', "T"),
    ('\u{ff35}', "U"),
    ('\u{ff36}', "V"),
    ('\u{ff37}', "W"),
    ('\u{ff38}', "X"),
    ('\u{ff39}', "Y"),
    ('\u{ff3a}', "Z"),
    ('\u{ff3b}', "["),
    ('\u{ff3c}', "\\"),
    ('\u{ff3d}', "]"),
    ('\u{ff3e}', "^"),
    ('\u{ff3f}', "_"),
    ('\u{ff40}', "`"),
    ('\u{ff41}', "a"),
    ('\u{ff42}', "b"),
    ('\u{ff43}', "c"),
    ('\u{ff44}', "d"),
    ('\u{ff45}', "e"),
    ('\u{ff46}', "f"),
    ('\u{ff47}', "g"),
    ('\u{ff48}', "h"),
    ('\u{ff49}', "i"),
    ('\u{ff4a}', "j"),
    ('\u{ff4b}', "k"),
    ('\u{ff4c}', "l"),
    ('\u{ff4d}', "m"),
    ('\u{ff4e}', "n"),
    ('\u{ff4f}', "o"),
    ('\u{ff50}', "p"),
    ('\u{ff51}', "q"),
    ('\u{ff52}', "r"),
    ('\u{ff53}', "s"),
    ('\u{ff54}', "t"),
    ('\u{ff55}', "u"),
    ('\u{ff56}', "v"),
    ('\u{ff57}', "w"),
    ('\u{ff58}', "x"),
    ('\u{ff59}', "y"),
    ('\u{ff5a}', "z"),
    ('\u{ff5b}', "{"),
    ('\u{ff5c}', "|"),
    ('\u{ff5d}', "}"),
    ('\u{ff5e}', "~"),
    ('\u{ff5f}', "⦅"),
    ('\u{ff60}', "⦆"),
    ('\u{ff61}', "。"),
    ('\u{ff62}', "「"),
    ('\u{ff63}', "」"),
    ('\u{ff64}', "、"),
    ('\u{ff65}', "・"),
    ('\u{ff66}', "ヲ"),
    ('\u{ff67}', "ァ"),
    ('\u{ff68}', "ィ"),
    ('\u{ff69}', "ゥ"),
    ('\u{ff6a}', "ェ"),
    ('\u{ff6b}', "ォ"),
    ('\u{ff6c}', "ャ"),
    ('\u{ff6d}', "ュ"),
    ('\u{ff6e}', "ョ"),
    ('\u{ff6f}', "ッ"),
    ('\u{ff70}', "ー"),
    ('\u{ff71}', "ア"),
    ('\u{ff72}', "イ"),
    ('\u{ff73}', "ウ"),
    ('\u{ff74}', "エ"),
    ('\u{ff75}', "オ"),
    ('\u{ff76}', "カ"),
    ('\u{ff77}', "キ"),
    ('\u{ff78}', "ク"),
    ('\u{ff79}', "ケ"),
    ('\u{ff7a}', "コ"),
    ('\u{ff7b}', "サ"),
    ('\u{ff7c}', "シ"),
    ('\u{ff7d}', "ス"),
    ('\u{ff7e}', "セ"),
    ('\u{ff7f}', "ソ"),
    ('\u{ff80}', "タ"),
    ('\u{ff81}', "チ"),
    ('\u{ff82}', "ツ"),
    ('\u{ff83}', "テ"),
    ('\u{ff84}', "ト"),
    ('\u{ff85}', "ナ"),
    ('\u{ff86}', "ニ"),
    ('\u{ff87}', "ヌ"),
    ('\u{ff88}', "ネ"),
    ('\u{ff89}', "ノ"),
    ('\u{ff8a}', "ハ"),
    ('\u{ff8b}', "ヒ"),
    ('\u{ff8c}', "フ"),
    ('\u{ff8d}', "ヘ"),
    ('\u{ff8e}', "ホ"),
    ('\u{ff8f}', "マ"),
    ('\u{ff90}', "ミ"),
    ('\u{ff91}', "ム"),
    ('\u{ff92}', "メ"),
    ('\u{ff93}', "モ"),
    ('\u{ff94}', "ヤ"),
    ('\u{ff95}', "ユ"),
    ('\u{ff96}', "ヨ"),
    ('\u{ff97}', "ラ"),
    ('\u{ff98}', "リ"),
    ('\u{ff99}', "ル"),
    ('\u{ff9a}', "レ"),
    ('\u{ff9b}', "ロ"),
    ('\u{ff9c}', "ワ"),
    ('\u{ff9d}', "ン"),
    ('\u{ff9e}', "゙"),
    ('\u{ff9f}', "゚"),
    ('\u{ffa0}', "ᅠ"),
    ('\u{ffa1}', "ᄀ"),
    ('\u{ffa2}', "ᄁ"),
    ('\u{ffa3}', "ᆪ"),
    ('\u{ffa4}', "ᄂ"),
    ('\u{ffa5}', "ᆬ"),
    ('\u{ffa6}', "ᆭ"),
    ('\u{ffa7}', "ᄃ"),
    ('\u{ffa8}', "ᄄ"),
    ('\u{ffa9}', "ᄅ"),
    ('\u{ffaa}', "ᆰ"),
    ('\u{ffab}', "ᆱ"),
    ('\u{ffac}', "ᆲ"),
    ('\u{ffad}', "ᆳ"),
    ('\u{ffae}', "ᆴ"),
    ('\u{ffaf}', "ᆵ"),
    ('\u{ffb0}', "ᄚ"),
    ('\u{ffb1}', "ᄆ"),
    ('\u{ffb2}', "ᄇ"),
    ('\u{ffb3}', "ᄈ"),
    ('\u{ffb4}', "ᄡ"),
    ('\u{ffb5}', "ᄉ"),
    ('\u{ffb6}', "ᄊ"),
    ('\u{ffb7}', "ᄋ"),
    ('\u{ffb8}', "ᄌ"),
    ('\u{ffb9}', "ᄍ"),
    ('\u{ffba}', "ᄎ"),
    ('\u{ffbb}', "ᄏ"),
    ('\u{ffbc}', "ᄐ"),
    ('\u{ffbd}', "ᄑ"),
    ('\u{ffbe}', "ᄒ"),
    ('\u{ffc2}', "ᅡ"),
    ('\u{ffc3}', "ᅢ"),
    ('\u{ffc4}', "ᅣ"),
    ('\u{ffc5}', "ᅤ"),
    ('\u{ffc6}', "ᅥ"),
    ('\u{ffc7}', "ᅦ"),
    ('\u{ffca}', "ᅧ"),
    ('\u{ffcb}', "ᅨ"),
    ('\u{ffcc}', "ᅩ"),
    ('\u{ffcd}', "ᅪ"),
    ('\u{ffce}', "ᅫ"),
    ('\u{ffcf}', "ᅬ"),
    ('\u{ffd2}', "ᅭ"),
    ('\u{ffd3}', "ᅮ"),
    ('\u{ffd4}', "ᅯ"),
    ('\u{ffd5}', "ᅰ"),
    ('\u{ffd6}', "ᅱ"),
    ('\u{ffd7}', "ᅲ"),
    ('\u{ffda}', "ᅳ"),
    ('\u{ffdb}', "ᅴ"),
    ('\u{ffdc}', "ᅵ"),
    ('\u{ffe0}', "¢"),
    ('\u{ffe1}', "£"),
    ('\u{ffe2}', "¬"),
    ('\u{ffe3}', " ̄"),
    ('\u{ffe4}', "¦"),
    ('\u{ffe5}', "¥"),
    ('\u{ffe6}', "₩"),
    ('\u{ffe8}', "│"),
    ('\u{ffe9}', "←"),
    ('\u{ffea}', "↑"),
    ('\u{ffeb}', "→"),
    ('\u{ffec}', "↓"),
    ('\u{ffed}', "■"),
    ('\u{ffee}', "○"),
];

/// `ftfy.chardata.CONTROL_CHARS`:需要删除的控制字符(`translate` 到 `None` 的键)。
pub(crate) static CONTROL_CHARS: &[char] = &[
    '\u{0}', '\u{1}', '\u{2}', '\u{3}', '\u{4}', '\u{5}', '\u{6}', '\u{7}', '\u{8}', '\u{b}',
    '\u{e}', '\u{f}', '\u{10}', '\u{11}', '\u{12}', '\u{13}', '\u{14}', '\u{15}', '\u{16}',
    '\u{17}', '\u{18}', '\u{19}', '\u{1a}', '\u{1b}', '\u{1c}', '\u{1d}', '\u{1e}', '\u{1f}',
    '\u{7f}', '\u{206a}', '\u{206b}', '\u{206c}', '\u{206d}', '\u{206e}', '\u{206f}', '\u{feff}',
    '\u{fff9}', '\u{fffa}', '\u{fffb}', '\u{fffc}',
];

/// C1 控制字符(U+0080..=U+009F)按 `sloppy-windows-1252` 解码后的字符。
///
/// `ftfy.fixes.fix_c1_controls` 对每个 C1 字符执行
/// `ch.encode("latin-1").decode("sloppy-windows-1252")`;这里固化其结果。
pub(crate) static C1_TO_WINDOWS_1252: &[(char, char)] = &[
    ('\u{80}', '\u{20ac}'),
    ('\u{81}', '\u{81}'),
    ('\u{82}', '\u{201a}'),
    ('\u{83}', '\u{192}'),
    ('\u{84}', '\u{201e}'),
    ('\u{85}', '\u{2026}'),
    ('\u{86}', '\u{2020}'),
    ('\u{87}', '\u{2021}'),
    ('\u{88}', '\u{2c6}'),
    ('\u{89}', '\u{2030}'),
    ('\u{8a}', '\u{160}'),
    ('\u{8b}', '\u{2039}'),
    ('\u{8c}', '\u{152}'),
    ('\u{8d}', '\u{8d}'),
    ('\u{8e}', '\u{17d}'),
    ('\u{8f}', '\u{8f}'),
    ('\u{90}', '\u{90}'),
    ('\u{91}', '\u{2018}'),
    ('\u{92}', '\u{2019}'),
    ('\u{93}', '\u{201c}'),
    ('\u{94}', '\u{201d}'),
    ('\u{95}', '\u{2022}'),
    ('\u{96}', '\u{2013}'),
    ('\u{97}', '\u{2014}'),
    ('\u{98}', '\u{2dc}'),
    ('\u{99}', '\u{2122}'),
    ('\u{9a}', '\u{161}'),
    ('\u{9b}', '\u{203a}'),
    ('\u{9c}', '\u{153}'),
    ('\u{9d}', '\u{9d}'),
    ('\u{9e}', '\u{17e}'),
    ('\u{9f}', '\u{178}'),
];

/// `ftfy.fixes.SINGLE_QUOTE_RE` 的字符集合:`[\u02bc\u2018-\u201b]`。
pub(crate) const CURLY_SINGLE_QUOTES: &[char] =
    &['\u{2bc}', '\u{2018}', '\u{2019}', '\u{201a}', '\u{201b}'];

/// `ftfy.fixes.DOUBLE_QUOTE_RE` 的字符集合:`[\u201c-\u201f]`。
pub(crate) const CURLY_DOUBLE_QUOTES: &[char] = &['\u{201c}', '\u{201d}', '\u{201e}', '\u{201f}'];