scriptconv 0.0.4a27__tar.gz → 0.0.4a28__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {scriptconv-0.0.4a27/scriptconv.egg-info → scriptconv-0.0.4a28}/PKG-INFO +1 -1
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/__init__.py +3 -2
- scriptconv-0.0.4a28/scriptconv/phonemizers/_vendored/africa_g2p/LICENSE.md +31 -0
- scriptconv-0.0.4a28/scriptconv/phonemizers/_vendored/africa_g2p/__init__.py +33 -0
- scriptconv-0.0.4a28/scriptconv/phonemizers/_vendored/africa_g2p/cli.py +61 -0
- scriptconv-0.0.4a28/scriptconv/phonemizers/_vendored/africa_g2p/convert.py +433 -0
- scriptconv-0.0.4a28/scriptconv/phonemizers/_vendored/africa_g2p/data/ipa_universal_graphemes.json +30332 -0
- scriptconv-0.0.4a28/scriptconv/phonemizers/_vendored/africa_g2p/english.py +132 -0
- scriptconv-0.0.4a28/scriptconv/phonemizers/_vendored/africa_g2p/fallback.py +92 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/g2p.py +96 -10
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/amh.json +14 -14
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/byn.json +24 -24
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/gez.json +13 -13
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kea.json +24 -24
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/tig.json +24 -24
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/tir.json +24 -24
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/normalizer.py +36 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/pipeline.py +15 -2
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/africa.py +7 -5
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/version.py +1 -1
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28/scriptconv.egg-info}/PKG-INFO +1 -1
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv.egg-info/SOURCES.txt +4 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/tests/test_phonemizers_africa.py +14 -0
- scriptconv-0.0.4a27/scriptconv/phonemizers/_vendored/africa_g2p/LICENSE.md +0 -15
- scriptconv-0.0.4a27/scriptconv/phonemizers/_vendored/africa_g2p/__init__.py +0 -15
- scriptconv-0.0.4a27/scriptconv/phonemizers/_vendored/africa_g2p/cli.py +0 -37
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/LICENSE +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/README.md +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/pyproject.toml +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/requirements.txt +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/__init__.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/__main__.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/cangjie.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/conventions.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/data/__init__.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/data/cangjie5_tc.tsv.gz +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/diacritics.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/graph.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/notation.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/__init__.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/__init__.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/bw2ipa.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/hangul2ipa.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/ko_tables/aspiration.csv +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/ko_tables/assimilation.csv +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/ko_tables/double_coda.csv +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/ko_tables/hanja.tsv +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/ko_tables/ipa.csv +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/ko_tables/neutralization.csv +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/ko_tables/tensification.csv +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/ko_tables/yale.csv +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/shami/__init__.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/shami/codeswitch.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/shami/diacritize.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/shami/dialectal.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/shami/english_g2p.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/shami/espeak.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/shami/frontend.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/shami/levantine_g2p.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/shami/normalize.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/shami/phoneme_inventory.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/vosk_g2p.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/zh_num.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/DATA_LICENSE.md +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/data/registry.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/aar.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/abi.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/acd.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ach.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/acz.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ada.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ade.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/adj.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/aeb.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ael.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/afr.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ags.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/aha.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/aiw.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ajg.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/akp.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/aks.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/aku.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/alz.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/amb.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/amf.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/anc.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ank.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ann.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/any.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/apd.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ara.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/arb.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ary.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/arz.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ato.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/avi.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/avn.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/avu.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ayb.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/azo.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bam.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bas.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bav.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bax.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bba.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bbq.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bci.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bcq.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bde.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bdj.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bdu.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bec.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/beh.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bej.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bem.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bex.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bfa.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bfj.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bfm.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bhy.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bib.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bim.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bin.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bjo.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bjt.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bkc.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bkm.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bky.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ble.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/blm.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bng.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bni.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bol.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bom.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bot.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/boy.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/boz.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bqj.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bqp.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bqx.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bsc.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bsq.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/buc.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bud.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/buf.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bum.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bva.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bvm.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bwj.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bxk.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/byv.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bza.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/cgg.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/cjk.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/cko.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/cme.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/cop.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/daa.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/daf.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/dag.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/dbq.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/dec.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/dgd.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/did.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/din.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/dmf.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/dnj.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/dop-benin.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/dop-benin2.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/dow.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/dsh.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/dua.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/dug.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/dyo.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/dyu.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/dzd.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ebo.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ebr.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/efi.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ell.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ema.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/emk.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/eng.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/enn.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/etn.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/eto.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ewe.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ewo.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/fak.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/fat.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ffm.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/fia.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/flr.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/fmp.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/fng.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/fod.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/fon.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/fuc.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/fue.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/gaa.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/gej.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/gfe.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/gha.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/gho.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/gjn.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/gng.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/god.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/gog.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/gou.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/grb.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/grr.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/gud.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/guk.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/gur.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/gux.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/guz.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/gwa.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/gwd.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/gwr.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/gxx.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/hag.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/har.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/hau-niger.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/hau-nigeria.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/hay.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/hdy.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/hts.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ibo.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/igb.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ige.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/igl.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/igo.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ikw.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/irk.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/iso.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/jib.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kab.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kbo.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kbp.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kbr.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kcn.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kde.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kdh.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kdj.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kdn.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kdx.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kec.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ker.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/khq.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/khy.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kik.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kin.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kiz.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kmb.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/knc.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/knf.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/koo.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kpe.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kqs.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/krb.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kri.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ksb.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ktz.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kuj.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kus.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lad.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lai.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lch.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ldd.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lgg.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lgq.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lig.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lin.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lky.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lln.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lma.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lmd.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lmp.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lns.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/loi.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lok.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lol.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lot.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lpx.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lub.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/luc.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lue.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lug.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lul.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lun.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/luw.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mas.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/maw.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mck.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mcp.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mcu.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mdj.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mev.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mfb.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mfe.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mfi.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mfq.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mgc.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mgd.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mgh.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mhi.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mkf.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mkw.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mlg.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mlw.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mmo.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mmy.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mnf.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mnk.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mos.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mpg.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mqu.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mse.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mur.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mwe.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/myf.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/myk.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/myo.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/myx.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mzk.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/naw.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nba.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ncu.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ndb.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ndo.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ney.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nfr.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nga.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ngb-zaire.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ngb-zaire2.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ngh.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ngi.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nhb.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nhu.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nhw.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nko.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nmn.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nmq.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nnb.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nnh.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nnw.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nqo.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nso.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nuj.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nup.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nus.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nwb.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nya.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nym.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nzd.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nzi.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ogc.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/oku.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/onw.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/pae.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/pbi.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/pny.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/pov.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/puu.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/pze.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/rel.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/rmt.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/rng.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/run.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/sad.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/sag-central_african_republic.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/sag-congo.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/sav.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/sef-cote_d_ivoire.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/sef-cote_d_ivoire2.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/seh.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/she.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/shk.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/shu.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/shy.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/sig.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/siz.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/sld.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/sna.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/snk-senegal.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/snk.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/sok.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/sop.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/spa.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/spy.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ssl.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ssn.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ssw.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/suk.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/sur.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/sus.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/swb.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/swh.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/sym.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/szg.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/tan.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/taq.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/taz.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/tbt.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/tbz.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ted.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/tem.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/teo.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/thv.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/thz.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/tik.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/tmc.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/tnr.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/toh.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/toq.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/trc.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/tsc.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/tso.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/tsp.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ttq.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/tui.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/tum.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/tuq.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/tuz.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/twi.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/tzm.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/uba.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/udu.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ukv.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/urh.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/vag.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/vai.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ven.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/vmw.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/vut.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/wan.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/wib.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/wmw.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/wob.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/wol.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/wwa.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/xho.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/xog.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/xon.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/xrb.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/xsm.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/yam.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/yat.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ybb.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/yid.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/yko.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/yor.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/yun.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/zag.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/zen.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ziw.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/zne.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/zul.json +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/loader.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/iqra_phonetiser/LICENSE.md +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/iqra_phonetiser/__init__.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/iqra_phonetiser/phonetiser.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/kog2p/LICENSE.md +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/kog2p/__init__.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/kog2p/rulebook.txt +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/mantoq/LICENSE.md +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/mantoq/__init__.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/mantoq/buck/__init__.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/mantoq/buck/phonetise_buckwalter.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/mantoq/buck/symbols.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/mantoq/buck/tokenization.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/mantoq/num2words.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/mantoq/unicode_symbol2label.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/ar.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/base.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/en.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/enums.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/eu.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/fa.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/gl.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/he.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/ja.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/ko.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/mul.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/mwl.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/o2ipa.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/pt.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/registry.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/ru.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/shami.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/vi.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/phonemizers/zh.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/py.typed +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/readings.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/scripts.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv/translit.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv.egg-info/dependency_links.txt +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv.egg-info/requires.txt +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/scriptconv.egg-info/top_level.txt +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/setup.cfg +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/tests/test_arpa_stress.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/tests/test_cangjie.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/tests/test_cli.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/tests/test_conventions.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/tests/test_diacritics.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/tests/test_diacritics_graph.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/tests/test_errors_policy.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/tests/test_examples.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/tests/test_graph.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/tests/test_he_extra_declares_phonikud.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/tests/test_notation.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/tests/test_phonemizers_base.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/tests/test_phonemizers_cjk_ar.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/tests/test_phonemizers_friendly_import_errors.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/tests/test_phonemizers_halabi_iqra.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/tests/test_phonemizers_pt_tugaphone.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/tests/test_phonemizers_ru.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/tests/test_readings.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/tests/test_readings_zh.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/tests/test_scripts.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/tests/test_scripts_stressonnx_compat.py +0 -0
- {scriptconv-0.0.4a27 → scriptconv-0.0.4a28}/tests/test_translit.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: scriptconv
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.4a28
|
|
4
4
|
Summary: Zero-dependency script & phoneme-notation core — ISO-15924 detection & metadata, IPA↔ARPABET/X-SAMPA/Lexique/Kirshenbaum/Cotovía/RFE, Buckwalter↔Arabic, Hangul→jamo, kana
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
Project-URL: Homepage, https://github.com/TigreGotico/scriptconv
|
|
@@ -9,8 +9,9 @@ distributed under ITS OWN license, stated in its directory:
|
|
|
9
9
|
* ``kog2p/`` — Korean G2P (github.com/scarletcho/KoG2P), **GPL-3.0**.
|
|
10
10
|
See ``kog2p/LICENSE.md``.
|
|
11
11
|
* ``africa_g2p/`` — African-language G2P (github.com/AfriSpeech/africa-g2p),
|
|
12
|
-
400
|
|
13
|
-
|
|
12
|
+
400 ISO 639-3 rule files, pinned at release ``v0.2.4`` (commit e3642dea).
|
|
13
|
+
It was vendored when it was not yet on PyPI; it is now published there as
|
|
14
|
+
``africa-g2p``, but the vendored copy is kept so the backend has no extra.
|
|
14
15
|
Its **code** is Apache-2.0 — same license as the rest of this repository,
|
|
15
16
|
unlike the other two entries here — but its **data** (the ``languages/``
|
|
16
17
|
rule files and ``data/registry.json``) is derived from Omniglot script
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Third-party license notice — africa-g2p
|
|
2
|
+
|
|
3
|
+
Vendored from https://github.com/AfriSpeech/africa-g2p at tag `v0.2.4`
|
|
4
|
+
(commit e3642dea), the release published to PyPI as `africa-g2p` 0.2.4.
|
|
5
|
+
Every file except this one is byte-identical to `src/africa_g2p/` at that
|
|
6
|
+
commit (the `data/*.json.survey` build artefact is not copied: nothing
|
|
7
|
+
reads it at runtime). The **code**
|
|
8
|
+
(`g2p.py`, `loader.py`, `normalizer.py`, `pipeline.py`, `cli.py`,
|
|
9
|
+
`convert.py`, `english.py`, `fallback.py`, `__init__.py`) is
|
|
10
|
+
**Apache-2.0**, same as the rest of this repository —
|
|
11
|
+
unlike `mantoq/` and `kog2p/`, this subpackage's code carries no extra
|
|
12
|
+
restriction beyond scriptconv's own license.
|
|
13
|
+
|
|
14
|
+
The **data** under `languages/` and `data/registry.json` is NOT
|
|
15
|
+
Apache-2.0: it is derived from third-party sources (Omniglot script
|
|
16
|
+
charts, © Simon Ager; Hartell 1993/UNESCO's *Alphabets of Africa*) and
|
|
17
|
+
carries its own attribution requirements — see `DATA_LICENSE.md` in this
|
|
18
|
+
directory. Redistributing the language data must keep those
|
|
19
|
+
attributions.
|
|
20
|
+
|
|
21
|
+
`data/ipa_universal_graphemes.json` is not chart data: upstream built it
|
|
22
|
+
from a survey of the rule tables and curated it with an LLM (upstream
|
|
23
|
+
commit 4784edd, "Curate universal graphemes via Gemini"). Only the
|
|
24
|
+
cross-language converter (`convert.py`, `convert_to_ipa`) reads it. The
|
|
25
|
+
per-language pipeline that scriptconv's `AfricaG2PPhonemizer` calls
|
|
26
|
+
(`AfricaPipeline`) does not.
|
|
27
|
+
|
|
28
|
+
Upstream `master` after `v0.2.4` adds 238 rule tables marked
|
|
29
|
+
`"confidence": "llm-draft"` (drafted by an LLM from corpus statistics).
|
|
30
|
+
They are not vendored here: this copy carries only the 400 chart-sourced
|
|
31
|
+
tables of the release.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"""africa-g2p: rule-based grapheme-to-phoneme conversion for African languages."""
|
|
2
|
+
from .convert import GraphemeConverter, UNIVERSAL, convert_lang, convert_to_ipa
|
|
3
|
+
from .english import ENGLISH_CODES, EnglishG2P, EspeakUnavailable
|
|
4
|
+
from .g2p import G2P, g2p
|
|
5
|
+
from .pipeline import AfricaPipeline
|
|
6
|
+
from .loader import available_languages, registry, LanguageNotFoundError
|
|
7
|
+
|
|
8
|
+
# Single-sourced from the installed package metadata so it cannot drift from
|
|
9
|
+
# pyproject.toml again: this constant sat at 0.1.0 through the 0.1.1 and 0.2.0
|
|
10
|
+
# releases, and anything recording it — a dataset card, a provenance log — wrote
|
|
11
|
+
# down the wrong version.
|
|
12
|
+
try: # pragma: no cover - trivial
|
|
13
|
+
from importlib.metadata import PackageNotFoundError, version as _pkg_version
|
|
14
|
+
|
|
15
|
+
__version__ = _pkg_version("africa-g2p")
|
|
16
|
+
except Exception: # not installed (running from a source checkout)
|
|
17
|
+
__version__ = "0.2.0"
|
|
18
|
+
|
|
19
|
+
__all__ = [
|
|
20
|
+
"AfricaPipeline",
|
|
21
|
+
"G2P",
|
|
22
|
+
"g2p",
|
|
23
|
+
"GraphemeConverter",
|
|
24
|
+
"convert_lang",
|
|
25
|
+
"convert_to_ipa",
|
|
26
|
+
"UNIVERSAL",
|
|
27
|
+
"EnglishG2P",
|
|
28
|
+
"EspeakUnavailable",
|
|
29
|
+
"ENGLISH_CODES",
|
|
30
|
+
"available_languages",
|
|
31
|
+
"registry",
|
|
32
|
+
"LanguageNotFoundError",
|
|
33
|
+
]
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"""Command-line interface: ``africa-g2p <lang> "text"`` or ``--list``.
|
|
2
|
+
|
|
3
|
+
Cross-language conversion: ``africa-g2p twi "Onyankopɔn" --to ewe`` rewrites Twi's
|
|
4
|
+
graphemes in Ewe's; ``--to universal`` uses the majority grapheme for each phoneme.
|
|
5
|
+
"""
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
|
|
8
|
+
import argparse
|
|
9
|
+
import sys
|
|
10
|
+
|
|
11
|
+
from .convert import GraphemeConverter, UNIVERSAL, convert_lang, convert_to_ipa
|
|
12
|
+
from .g2p import G2P
|
|
13
|
+
from .loader import available_languages, registry, LanguageNotFoundError
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def main(argv=None) -> int:
|
|
17
|
+
parser = argparse.ArgumentParser(prog="africa-g2p", description=__doc__)
|
|
18
|
+
parser.add_argument("lang", nargs="?", help="ISO 639-3 language code")
|
|
19
|
+
parser.add_argument("text", nargs="?", help="text to convert (or read stdin)")
|
|
20
|
+
parser.add_argument("--sep", default=None,
|
|
21
|
+
help="separator between phoneme units (default: \" \" for G2P, "
|
|
22
|
+
"none for --to, i.e. words are kept whole)")
|
|
23
|
+
parser.add_argument("--to", default=None,
|
|
24
|
+
help=f"rewrite graphemes into this language (or '{UNIVERSAL}') "
|
|
25
|
+
"instead of native output")
|
|
26
|
+
parser.add_argument("--ipa", action="store_true",
|
|
27
|
+
help="print IPA via the universal pipeline "
|
|
28
|
+
"(graphemes -> universal -> IPA, the g2u2p route)")
|
|
29
|
+
parser.add_argument("--list", action="store_true", help="list available languages")
|
|
30
|
+
args = parser.parse_args(argv)
|
|
31
|
+
|
|
32
|
+
if args.list or not args.lang:
|
|
33
|
+
reg = registry()
|
|
34
|
+
for code in available_languages():
|
|
35
|
+
name = reg.get(code, {}).get("name", "")
|
|
36
|
+
print(f"{code}\t{name}")
|
|
37
|
+
return 0
|
|
38
|
+
|
|
39
|
+
text = args.text if args.text is not None else sys.stdin.read()
|
|
40
|
+
if args.ipa:
|
|
41
|
+
print(convert_to_ipa(text, args.lang, sep=args.sep or " "))
|
|
42
|
+
return 0
|
|
43
|
+
if args.to:
|
|
44
|
+
try:
|
|
45
|
+
conv = GraphemeConverter(args.lang, args.to)
|
|
46
|
+
except LanguageNotFoundError as e:
|
|
47
|
+
print(e, file=sys.stderr)
|
|
48
|
+
return 1
|
|
49
|
+
else:
|
|
50
|
+
try:
|
|
51
|
+
conv = G2P(args.lang)
|
|
52
|
+
except LanguageNotFoundError as e:
|
|
53
|
+
print(e, file=sys.stderr)
|
|
54
|
+
return 1
|
|
55
|
+
sep = args.sep if args.sep is not None else ("" if args.to else " ")
|
|
56
|
+
print(conv.convert(text, sep=sep))
|
|
57
|
+
return 0
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
if __name__ == "__main__":
|
|
61
|
+
raise SystemExit(main())
|
|
@@ -0,0 +1,433 @@
|
|
|
1
|
+
"""Cross-language grapheme converter.
|
|
2
|
+
|
|
3
|
+
Takes the native-orthography graphemes of one language and rewrites them in the
|
|
4
|
+
graphemes another language uses for the same phonemes, routing both through IPA:
|
|
5
|
+
|
|
6
|
+
L1 graphemes -> IPA -> L2 graphemes
|
|
7
|
+
|
|
8
|
+
Either side may be the virtual language ``"universal"`` — the per-IPA grapheme set distilling
|
|
9
|
+
all 400 language charts: majority winners of ``scripts/ipa_universal_graphemes.py``, re-judged
|
|
10
|
+
per IPA by Gemini into common Latin/English spellings (see
|
|
11
|
+
``scripts/build_universal_from_gemini.py``). When a source phoneme has no entry in the target's
|
|
12
|
+
chart, the universal grapheme is used as a fallback.
|
|
13
|
+
|
|
14
|
+
>>> from africa_g2p import GraphemeConverter
|
|
15
|
+
>>> GraphemeConverter("twi", "ewe").convert("Onyankopɔn") # text, words kept
|
|
16
|
+
>>> GraphemeConverter("twi", "universal").convert("Onyankopɔn", sep=" ") # units
|
|
17
|
+
"""
|
|
18
|
+
from __future__ import annotations
|
|
19
|
+
|
|
20
|
+
import json
|
|
21
|
+
import warnings
|
|
22
|
+
import re
|
|
23
|
+
import unicodedata
|
|
24
|
+
from pathlib import Path
|
|
25
|
+
from typing import Dict, Tuple
|
|
26
|
+
|
|
27
|
+
from .g2p import G2P
|
|
28
|
+
from .loader import load_rules
|
|
29
|
+
from .normalizer import normalize_text, tie_affricates, tokenize
|
|
30
|
+
|
|
31
|
+
_DATA = Path(__file__).resolve().parent / "data"
|
|
32
|
+
_UNIVERSAL_FILE = _DATA / "ipa_universal_graphemes.json"
|
|
33
|
+
|
|
34
|
+
# Virtual language code: "write every phoneme with the grapheme most languages use".
|
|
35
|
+
UNIVERSAL = "universal"
|
|
36
|
+
|
|
37
|
+
_universal_forward: Dict[str, str] = {}
|
|
38
|
+
_universal_reverse: Dict[str, str] = {}
|
|
39
|
+
_universal_g2p: "G2P | None" = None
|
|
40
|
+
_reverse_cache: Dict[str, Dict[str, str]] = {}
|
|
41
|
+
|
|
42
|
+
# IPA aspiration marks: modifier small-h U+02B0 (ʰ) and breathy-voiced hook U+02B1 (ʱ).
|
|
43
|
+
# Dropped to relax an aspirated phoneme onto its plain counterpart for matching.
|
|
44
|
+
_ASPIRATION_TRANS = str.maketrans({"\u02b0": "", "\u02b1": ""})
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def _relax_aspiration(ipa: str) -> str:
|
|
48
|
+
"""Drop aspiration/breathy marks: /tɕʰ/ -> /tɕ/, /kʰ/ -> /k/, /ɡʱ/ -> /ɡ/."""
|
|
49
|
+
return ipa.translate(_ASPIRATION_TRANS)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
# --- single-phoneme filter for the universal *forward* ("reading") table ---------
|
|
53
|
+
# The per-IPA grapheme picks include transliterations of multi-phoneme fidel
|
|
54
|
+
# syllables (e.g. /k͡p a/ as "kpa", /ɓ i/ as "bi"). Those are fine for writing
|
|
55
|
+
# (reverse table: IPA -> pick verbatim) but must not become graphemes of the
|
|
56
|
+
# virtual universal orthography (forward table) — the greedy tokenizer would
|
|
57
|
+
# otherwise slice ordinary words like "kpako" into "kpa"+"ko". A value counts as
|
|
58
|
+
# one phoneme segment iff it has at most two core letters, and for two they form
|
|
59
|
+
# a coarticulated CONSONANT pair (k͡p, t͡ʃ, ᵑɡ͡b, ts, ny ...), not C+V.
|
|
60
|
+
_VOWELS = set("aàáãäæèéêëɛəɐɑɒɔɜɞɘɚeẽiĩɪɨɤɵoõöòóôuùũüʊʉɯʏøœyỹʌǝǐịụ")
|
|
61
|
+
# When two different phonemes land on the same target vowel, the earlier one is
|
|
62
|
+
# rewritten to a near neighbour so the pair stays distinguishable. For a real
|
|
63
|
+
# language target the neighbour may be any vowel that language writes; for the
|
|
64
|
+
# universal orthography it has to be a plain letter, and "a" -> "ə" was putting a
|
|
65
|
+
# schwa into output that is supposed to be a-z only ("náań" -> "nəan").
|
|
66
|
+
_UNIVERSAL_VOWEL_ALTERNATIVES = {"o": "u", "u": "o", "e": "i", "i": "e",
|
|
67
|
+
"ɔ": "u", "ɛ": "i", "a": "e", "ə": "a"}
|
|
68
|
+
|
|
69
|
+
_VOWEL_ALTERNATIVES = {
|
|
70
|
+
"o": "u",
|
|
71
|
+
"u": "o",
|
|
72
|
+
"e": "i",
|
|
73
|
+
"i": "e",
|
|
74
|
+
"ɔ": "u",
|
|
75
|
+
"ɛ": "i",
|
|
76
|
+
"a": "ə",
|
|
77
|
+
"ə": "a",
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
try:
|
|
81
|
+
from spellchecker import SpellChecker
|
|
82
|
+
_spell = SpellChecker()
|
|
83
|
+
except ImportError:
|
|
84
|
+
_spell = None
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def _is_english_word(word: str) -> bool:
|
|
88
|
+
if _spell is None or len(word) < 3:
|
|
89
|
+
return False
|
|
90
|
+
if not word.isalpha() or not word.isascii():
|
|
91
|
+
return False
|
|
92
|
+
return word.lower() in _spell
|
|
93
|
+
_SKIP_CATEGORIES = frozenset(("Mn", "Lm", "Cn", "Pc", "Pe", "Pf", "Po", "Ps", "Sm"))
|
|
94
|
+
_TIE_SPLIT = re.compile("[\u0361\u035C]")
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def _phone_cores(ipa: str) -> list:
|
|
98
|
+
"""Base (consonant/vowel) letters of an IPA value, tie bars and all diacritic
|
|
99
|
+
marks, aspiration/glide/length modifiers and superscript prenasals removed."""
|
|
100
|
+
s = tie_affricates(ipa)
|
|
101
|
+
s = "".join(ch for ch in s if unicodedata.category(ch) not in _SKIP_CATEGORIES)
|
|
102
|
+
return [
|
|
103
|
+
ch
|
|
104
|
+
for part in _TIE_SPLIT.split(s)
|
|
105
|
+
for ch in part
|
|
106
|
+
if unicodedata.category(ch) in ("Ll", "Lo")
|
|
107
|
+
]
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def _is_single_phoneme(ipa: str) -> bool:
|
|
111
|
+
cores = _phone_cores(ipa)
|
|
112
|
+
if len(cores) > 2:
|
|
113
|
+
return False
|
|
114
|
+
if len(cores) < 2:
|
|
115
|
+
return True
|
|
116
|
+
return cores[0] not in _VOWELS and cores[1] not in _VOWELS
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
def _readable_grapheme(g: str) -> bool:
|
|
120
|
+
"""A reading grapheme of the universal orthography must not start with a vowel
|
|
121
|
+
followed by a consonant letter. Gemini transliterates nasal vowels as <Vn>
|
|
122
|
+
("an", "on", "in"...) — fine for writing, but as reading keys they would swallow
|
|
123
|
+
ordinary word-initial segments ("onyankopon" -> /õ.../). Vowel digraphs ("aa",
|
|
124
|
+
"ei") stay: they only match genuinely adjacent vowels."""
|
|
125
|
+
if len(g) < 2 or g[0] not in _VOWELS:
|
|
126
|
+
return True
|
|
127
|
+
return not any(ch not in _VOWELS for ch in g[1:])
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
# The universal orthography is plain a-z letters, enforced in the data file itself
|
|
131
|
+
# (see meta.revision there). Apostrophes marking ejectives, punctuation, placeholder
|
|
132
|
+
# tokens and non-Latin script winners were all removed at the source, because a
|
|
133
|
+
# speech synthesiser reads them as pauses or skips them: Xhosa "ukuba nikwazi
|
|
134
|
+
# ukucalula" used to be written "uk'uba nik'wazi uk'ucalula".
|
|
135
|
+
#
|
|
136
|
+
# Nothing rewrites graphemes at load time any more. What remains is a guard: if the
|
|
137
|
+
# table ever ships a grapheme that is not plain letters again, callers are told
|
|
138
|
+
# rather than finding out from the audio.
|
|
139
|
+
_PLACEHOLDER_GRAPHEMES = {"VV", "V", "C", "CC"}
|
|
140
|
+
# Phonemes the universal orthography deliberately does not write.
|
|
141
|
+
_UNWRITTEN = {"∅", "ʔ∅", "ʔ", "ː"}
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
def _strip_combining(text: str) -> str:
|
|
145
|
+
"""Reduce a phoneme to its base letters for a last-resort lookup.
|
|
146
|
+
|
|
147
|
+
Drops combining marks and the modifier letters and symbols that ride on a
|
|
148
|
+
phoneme — tone bars (˥ ˦ ˧), pharyngealisation (ˤ), velarisation (ˠ) — none of
|
|
149
|
+
which the universal orthography writes:
|
|
150
|
+
|
|
151
|
+
"ɔ́" -> "ɔ" "h̃" -> "h" "ɔ˥" -> "ɔ" "əˤ" -> "ə"
|
|
152
|
+
|
|
153
|
+
Only reached when the full unit is unmapped, so a base-letter match is always
|
|
154
|
+
better than what it replaces: passing the symbol through into the text.
|
|
155
|
+
"""
|
|
156
|
+
return "".join(ch for ch in unicodedata.normalize("NFD", text)
|
|
157
|
+
if not unicodedata.combining(ch)
|
|
158
|
+
and unicodedata.category(ch) not in ("Lm", "Sk"))
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
def _is_plain_latin(grapheme: str) -> bool:
|
|
162
|
+
return bool(grapheme) and all("a" <= ch <= "z" for ch in grapheme.lower())
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
def _is_usable(grapheme: str) -> bool:
|
|
166
|
+
return _is_plain_latin(grapheme) and grapheme not in _PLACEHOLDER_GRAPHEMES
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
def _universal_tables() -> Tuple[Dict[str, str], Dict[str, str]]:
|
|
170
|
+
"""Forward (majority grapheme -> IPA) and reverse (IPA -> majority grapheme)
|
|
171
|
+
tables for the virtual "universal" language, loaded once from the survey output."""
|
|
172
|
+
global _universal_forward, _universal_reverse
|
|
173
|
+
if not _universal_reverse:
|
|
174
|
+
data = json.loads(_UNIVERSAL_FILE.read_text(encoding="utf-8"))
|
|
175
|
+
# Build forward with the most-widespread phoneme winning on grapheme collisions
|
|
176
|
+
# (two phonemes whose majority grapheme is the same string, e.g. 'j' for d͡ʒ
|
|
177
|
+
# and ɟ), so `setdefault` keeps the commonest reading. IPA keys and values are
|
|
178
|
+
# tie-affricate-normalised to match the forward engine's output exactly.
|
|
179
|
+
order = sorted(data["phonemes"].items(), key=lambda kv: -kv[1]["langs"])
|
|
180
|
+
for raw_ipa, v in order:
|
|
181
|
+
ipa = tie_affricates(raw_ipa)
|
|
182
|
+
grapheme = v["grapheme"]
|
|
183
|
+
# An empty grapheme is deliberate, not missing: the glottal stop and the
|
|
184
|
+
# null phoneme are written as nothing. They must still enter the reverse
|
|
185
|
+
# table, or the phoneme falls through as unknown and the raw IPA symbol
|
|
186
|
+
# lands in the text ("dunmanʔn"). Nothing enters the forward table — an
|
|
187
|
+
# empty string is not readable back.
|
|
188
|
+
if grapheme:
|
|
189
|
+
_universal_reverse.setdefault(ipa, grapheme)
|
|
190
|
+
if _is_single_phoneme(raw_ipa) and _readable_grapheme(grapheme):
|
|
191
|
+
_universal_forward.setdefault(grapheme, ipa)
|
|
192
|
+
elif "grapheme_note" in v or raw_ipa in _UNWRITTEN:
|
|
193
|
+
_universal_reverse.setdefault(ipa, "")
|
|
194
|
+
_warn_non_alphabetic(_universal_reverse)
|
|
195
|
+
return _universal_forward, _universal_reverse
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
def universal_non_alphabetic() -> Dict[str, str]:
|
|
199
|
+
"""IPA -> universal grapheme, for every grapheme still holding a non a-z character.
|
|
200
|
+
|
|
201
|
+
The universal orthography is supposed to be plain letters. Where the survey had
|
|
202
|
+
no plain-Latin vote for a phoneme at all — the bilabial clicks of the Khoisan
|
|
203
|
+
languages are the main case — the original symbol is kept rather than
|
|
204
|
+
approximated by a letter the language does not use or dropped from the
|
|
205
|
+
transcript. Callers feeding a speech synthesiser should know which those are.
|
|
206
|
+
"""
|
|
207
|
+
_, reverse = _universal_tables()
|
|
208
|
+
return {ipa: g for ipa, g in reverse.items() if g and not _is_usable(g)}
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
def _warn_non_alphabetic(reverse: Dict[str, str]) -> None:
|
|
212
|
+
"""Warn once that some universal graphemes are not plain letters."""
|
|
213
|
+
# An empty grapheme is a deliberate "written as nothing", not a bad spelling.
|
|
214
|
+
offenders = {ipa: g for ipa, g in reverse.items() if g and not _is_usable(g)}
|
|
215
|
+
if not offenders:
|
|
216
|
+
return
|
|
217
|
+
sample = ", ".join(f"{ipa} -> {g}" for ipa, g in list(offenders.items())[:5])
|
|
218
|
+
warnings.warn(
|
|
219
|
+
f"{len(offenders)} universal graphemes are not plain a-z letters ({sample}"
|
|
220
|
+
f"{', ...' if len(offenders) > 5 else ''}). No plain-Latin spelling was "
|
|
221
|
+
f"attested for these phonemes. Text-to-speech will usually skip them; call "
|
|
222
|
+
f"africa_g2p.convert.universal_non_alphabetic() for the full list.",
|
|
223
|
+
UserWarning,
|
|
224
|
+
stacklevel=2,
|
|
225
|
+
)
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
def _universal_g2p_engine() -> G2P:
|
|
229
|
+
"""G2P engine that reads the virtual universal orthography back to IPA."""
|
|
230
|
+
global _universal_g2p
|
|
231
|
+
if _universal_g2p is None:
|
|
232
|
+
forward, _ = _universal_tables()
|
|
233
|
+
_universal_g2p = G2P.from_rules({"code": UNIVERSAL, "graphemes": forward})
|
|
234
|
+
return _universal_g2p
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
def _primary_grapheme(rule: dict, candidates: set) -> str:
|
|
238
|
+
"""Choose the canonical written grapheme for a phoneme within one language.
|
|
239
|
+
|
|
240
|
+
Picks the first candidate to appear in the language's own `alphabet` row (the
|
|
241
|
+
orthographer's ordering), then the first in the Latin script list, then the
|
|
242
|
+
shortest, then lexicographically — so the result is deterministic and prefers the
|
|
243
|
+
language's endorsed way of writing the sound over an allophonic variant.
|
|
244
|
+
"""
|
|
245
|
+
for a in rule.get("alphabet") or []:
|
|
246
|
+
if a in candidates:
|
|
247
|
+
return a
|
|
248
|
+
for a in (rule.get("scripts") or {}).get("latin") or []:
|
|
249
|
+
if a in candidates:
|
|
250
|
+
return a
|
|
251
|
+
return min(sorted(candidates), key=lambda g: (len(g), g))
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
def reverse_table(lang: str) -> Dict[str, str]:
|
|
255
|
+
"""IPA -> primary grapheme for a real language's chart (cached)."""
|
|
256
|
+
if lang not in _reverse_cache:
|
|
257
|
+
rules = load_rules(lang)
|
|
258
|
+
grouped: Dict[str, set] = {}
|
|
259
|
+
for g, ipa in rules.get("graphemes", {}).items():
|
|
260
|
+
# keys normalised the same way as the forward engine's IPA output
|
|
261
|
+
grouped.setdefault(tie_affricates(ipa), set()).add(g)
|
|
262
|
+
_reverse_cache[lang] = {
|
|
263
|
+
ipa: _primary_grapheme(rules, cands) for ipa, cands in grouped.items()
|
|
264
|
+
}
|
|
265
|
+
return _reverse_cache[lang]
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
class GraphemeConverter:
|
|
269
|
+
"""Rewrite one language's graphemes in another's, per shared phonemes."""
|
|
270
|
+
|
|
271
|
+
def __init__(self, source: str, target: str, *, relax_aspiration: bool = True):
|
|
272
|
+
"""
|
|
273
|
+
Args:
|
|
274
|
+
source: ISO 639-3 code of the input language, or "universal" to read the
|
|
275
|
+
majority grapheme set.
|
|
276
|
+
target: ISO 639-3 code of the output language, or "universal" to write
|
|
277
|
+
every phoneme with the grapheme most languages use.
|
|
278
|
+
relax_aspiration: when a source phoneme has no writing in the target (e.g.
|
|
279
|
+
aspirated /tʰ/ where the target only spells plain /t/), drop the
|
|
280
|
+
aspiration mark and map the plain phoneme instead — /tɕʰ/ writes
|
|
281
|
+
like /tɕ/, /kʰ/ like /k/. Exact target readings always win when the
|
|
282
|
+
target does mark aspiration. Default True.
|
|
283
|
+
"""
|
|
284
|
+
forward, reverse = _universal_tables()
|
|
285
|
+
self.source = source
|
|
286
|
+
self.target = target
|
|
287
|
+
self.relax_aspiration = relax_aspiration
|
|
288
|
+
# Forward engine: language graphemes -> IPA (or majority graphemes -> IPA).
|
|
289
|
+
if source == UNIVERSAL:
|
|
290
|
+
self._forward = G2P.from_rules({"code": UNIVERSAL, "graphemes": forward})
|
|
291
|
+
else:
|
|
292
|
+
self._forward = G2P(source, output="ipa")
|
|
293
|
+
# Reverse table: IPA -> target graphemes.
|
|
294
|
+
self._reverse = reverse if target == UNIVERSAL else reverse_table(target)
|
|
295
|
+
self._universal_reverse = reverse
|
|
296
|
+
# Source's own spelling per phoneme -> flag when a target differs, so a
|
|
297
|
+
# converted phoneme that lands next to the same letter can be tripled.
|
|
298
|
+
self._source_spelling = {} if source == UNIVERSAL else reverse_table(source)
|
|
299
|
+
|
|
300
|
+
def convert(self, text: str, *, sep: str = "", lower: bool = True) -> str:
|
|
301
|
+
"""Convert a full text. Word boundaries (spacing and punctuation) are always
|
|
302
|
+
preserved; `sep` joins the phoneme units *within* a word — so the default
|
|
303
|
+
``sep=""`` emits continuous text, while ``sep=" "`` prints every unit as a
|
|
304
|
+
separate token (the phoneme-sequence view)."""
|
|
305
|
+
text = normalize_text(text, lower=lower)
|
|
306
|
+
out: list = []
|
|
307
|
+
for tok in tokenize(text):
|
|
308
|
+
if not tok.is_word or _is_english_word(tok.text):
|
|
309
|
+
out.append(tok.text)
|
|
310
|
+
continue
|
|
311
|
+
units = self._forward.convert_word(tok.text, sep=" ", lower=False).split(" ")
|
|
312
|
+
out.append(sep.join(self._map_units(units)))
|
|
313
|
+
return "".join(out)
|
|
314
|
+
|
|
315
|
+
def convert_word(self, word: str, *, sep: str = "", lower: bool = True) -> str:
|
|
316
|
+
"""Convert a single word (no tokenization)."""
|
|
317
|
+
if _is_english_word(word):
|
|
318
|
+
return word
|
|
319
|
+
word = normalize_text(word, lower=lower)
|
|
320
|
+
units = self._forward.convert_word(word, sep=" ", lower=False).split(" ")
|
|
321
|
+
return sep.join(self._map_units(units))
|
|
322
|
+
|
|
323
|
+
def _map_units(self, units: list) -> list:
|
|
324
|
+
"""Map each phoneme to a target grapheme, replacing the existing (preceding)
|
|
325
|
+
vowel in a conversion collision (between different source phonemes) with its
|
|
326
|
+
closest alternative (e.g. o -> u) while keeping true source doubles (long
|
|
327
|
+
vowels like hyɛɛ -> hyee) and converted vowels untouched."""
|
|
328
|
+
mapped: list = []
|
|
329
|
+
prev_g, prev_ipa, run_converted = None, None, False
|
|
330
|
+
for ipa in units:
|
|
331
|
+
g, converted = self._map(ipa)
|
|
332
|
+
alternatives = (_UNIVERSAL_VOWEL_ALTERNATIVES if self.target == UNIVERSAL
|
|
333
|
+
else _VOWEL_ALTERNATIVES)
|
|
334
|
+
if converted and len(g) >= 2 and len(set(g)) == 1 and g[0] in _VOWELS:
|
|
335
|
+
alt = alternatives.get(g[0], "u" if g[0] in "oɔ" else "i")
|
|
336
|
+
g = alt + g[0]
|
|
337
|
+
# Only collide if it's the same target grapheme AND different source phonemes
|
|
338
|
+
# (so true source doubles like hyɛɛ -> hyee are left as double ee, not ii/etc.)
|
|
339
|
+
is_different_phoneme_collision = (g == prev_g and ipa != prev_ipa)
|
|
340
|
+
if is_different_phoneme_collision and g and g[0] in _VOWELS:
|
|
341
|
+
if mapped and mapped[-1] and mapped[-1][-1] in _VOWELS:
|
|
342
|
+
last_v = mapped[-1][-1]
|
|
343
|
+
alt = alternatives.get(last_v, "u" if last_v in "oɔ" else "i")
|
|
344
|
+
mapped[-1] = mapped[-1][:-1] + alt
|
|
345
|
+
mapped.append(g)
|
|
346
|
+
run_converted = True
|
|
347
|
+
else:
|
|
348
|
+
if g != prev_g:
|
|
349
|
+
prev_g, prev_ipa, run_converted = g, ipa, converted
|
|
350
|
+
mapped.append(g)
|
|
351
|
+
else:
|
|
352
|
+
mapped.append(g)
|
|
353
|
+
prev_ipa = ipa
|
|
354
|
+
run_converted = run_converted or converted
|
|
355
|
+
return mapped
|
|
356
|
+
|
|
357
|
+
def _map(self, ipa: str) -> tuple:
|
|
358
|
+
"""Return (grapheme, converted). `converted` is True when the target writes
|
|
359
|
+
this phoneme differently from the source's own spelling (or the source has no
|
|
360
|
+
spelling for it), i.e. a merge/simplification actually happened."""
|
|
361
|
+
# 1) a real-language target's own writing: exact reading first (a target that
|
|
362
|
+
# spells /tʰ/ as <th> still wins), aspiration-relaxed as its fallback (a
|
|
363
|
+
# target with no /tʰ/ at all uses its /t/ reading). For the virtual
|
|
364
|
+
# "universal" target this step is identical to the majority step below.
|
|
365
|
+
relaxed = _relax_aspiration(ipa) if self.relax_aspiration else ipa
|
|
366
|
+
if self.target != UNIVERSAL:
|
|
367
|
+
for form in (ipa, relaxed):
|
|
368
|
+
g = self._reverse.get(form)
|
|
369
|
+
if g is not None:
|
|
370
|
+
break
|
|
371
|
+
else:
|
|
372
|
+
g = None
|
|
373
|
+
else:
|
|
374
|
+
g = None
|
|
375
|
+
if g is None:
|
|
376
|
+
# 2) the majority grapheme set. Rare aspirated phonemes win their vote by
|
|
377
|
+
# tiny samples (e.g. /tɕʰ/ is written <q> by just 3 languages), so prefer
|
|
378
|
+
# the relaxed, plain-phoneme majority (/tɕʰ/ reads like the /tɕ/ winner)
|
|
379
|
+
# and keep the exact entry only as a last resort.
|
|
380
|
+
for form in (relaxed, ipa):
|
|
381
|
+
g = self._universal_reverse.get(form)
|
|
382
|
+
if g is not None:
|
|
383
|
+
break
|
|
384
|
+
else:
|
|
385
|
+
g = None
|
|
386
|
+
# 3) a tone-marked or nasalised variant of a phoneme the table does know.
|
|
387
|
+
# Source orthographies write tone on the vowel ("lɔ́lɔndai", "ɣɛ́i"), and the
|
|
388
|
+
# accented form is absent from the survey, so it used to fall through to
|
|
389
|
+
# step 4 — leaving a bare ɔ or ɛ in universal output once normalisation
|
|
390
|
+
# stripped the accent, which is exactly the character universal exists to
|
|
391
|
+
# remove. Retry on the base letter, keeping the mark off: the universal
|
|
392
|
+
# orthography does not write tone.
|
|
393
|
+
if g is None and self.target == UNIVERSAL:
|
|
394
|
+
base = _strip_combining(ipa)
|
|
395
|
+
# A unit that is nothing but modifiers — a lone tone bar or ˤ emitted as
|
|
396
|
+
# its own unit — writes as nothing, the same as the other phonemes the
|
|
397
|
+
# universal orthography does not mark.
|
|
398
|
+
if ipa and not base:
|
|
399
|
+
return "", True
|
|
400
|
+
if base and base != ipa:
|
|
401
|
+
for form in (base, _strip_combining(relaxed)):
|
|
402
|
+
g = self._universal_reverse.get(form)
|
|
403
|
+
if g is not None:
|
|
404
|
+
break
|
|
405
|
+
else:
|
|
406
|
+
g = None
|
|
407
|
+
|
|
408
|
+
# 4) unmappable: pass the IPA unit through untouched.
|
|
409
|
+
if g is None:
|
|
410
|
+
return ipa, False
|
|
411
|
+
if not self._source_spelling:
|
|
412
|
+
return g, False
|
|
413
|
+
src = self._source_spelling.get(tie_affricates(ipa))
|
|
414
|
+
return g, src != g
|
|
415
|
+
|
|
416
|
+
|
|
417
|
+
def convert_lang(text: str, source: str, target: str, *, sep: str = "") -> str:
|
|
418
|
+
"""One-shot converter: ``convert_lang("Onyankopɔn", "twi", "ewe")``. Words are
|
|
419
|
+
kept whole by default; pass ``sep=" "`` for per-unit (phoneme-sequence) output."""
|
|
420
|
+
return GraphemeConverter(source, target).convert(text, sep=sep)
|
|
421
|
+
|
|
422
|
+
|
|
423
|
+
def convert_to_ipa(text: str, source: str, *, sep: str = "") -> str:
|
|
424
|
+
"""G2U2P pipeline: a language's graphemes -> universal graphemes -> IPA.
|
|
425
|
+
|
|
426
|
+
Writes the source in the universal majority-grapheme set first, then reads that
|
|
427
|
+
back to IPA, so every language phonemicizes along the same curated conventions
|
|
428
|
+
(Gemini-normalised spellings and aspiration relaxation included). Lossy by design:
|
|
429
|
+
two phonemes the universal set writes alike (e.g. /ɔ/ and /o/ both <o>) read back
|
|
430
|
+
as the single winner phoneme. ``sep=" "`` prints per-unit phonemes; the default
|
|
431
|
+
``sep=""`` emits continuous IPA."""
|
|
432
|
+
universal = GraphemeConverter(source, UNIVERSAL).convert(text)
|
|
433
|
+
return _universal_g2p_engine().convert(universal, sep=sep)
|