scriptconv 0.0.4a26__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.
Files changed (523) hide show
  1. {scriptconv-0.0.4a26/scriptconv.egg-info → scriptconv-0.0.4a28}/PKG-INFO +1 -1
  2. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/__init__.py +3 -2
  3. scriptconv-0.0.4a28/scriptconv/phonemizers/_vendored/africa_g2p/LICENSE.md +31 -0
  4. scriptconv-0.0.4a28/scriptconv/phonemizers/_vendored/africa_g2p/__init__.py +33 -0
  5. scriptconv-0.0.4a28/scriptconv/phonemizers/_vendored/africa_g2p/cli.py +61 -0
  6. scriptconv-0.0.4a28/scriptconv/phonemizers/_vendored/africa_g2p/convert.py +433 -0
  7. scriptconv-0.0.4a28/scriptconv/phonemizers/_vendored/africa_g2p/data/ipa_universal_graphemes.json +30332 -0
  8. scriptconv-0.0.4a28/scriptconv/phonemizers/_vendored/africa_g2p/english.py +132 -0
  9. scriptconv-0.0.4a28/scriptconv/phonemizers/_vendored/africa_g2p/fallback.py +92 -0
  10. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/g2p.py +96 -10
  11. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/amh.json +14 -14
  12. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/byn.json +24 -24
  13. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/gez.json +13 -13
  14. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kea.json +24 -24
  15. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/tig.json +24 -24
  16. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/tir.json +24 -24
  17. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/normalizer.py +36 -0
  18. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/pipeline.py +15 -2
  19. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/africa.py +7 -5
  20. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/version.py +1 -1
  21. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28/scriptconv.egg-info}/PKG-INFO +1 -1
  22. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv.egg-info/SOURCES.txt +4 -0
  23. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/tests/test_phonemizers_africa.py +14 -0
  24. scriptconv-0.0.4a26/scriptconv/phonemizers/_vendored/africa_g2p/LICENSE.md +0 -15
  25. scriptconv-0.0.4a26/scriptconv/phonemizers/_vendored/africa_g2p/__init__.py +0 -15
  26. scriptconv-0.0.4a26/scriptconv/phonemizers/_vendored/africa_g2p/cli.py +0 -37
  27. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/LICENSE +0 -0
  28. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/README.md +0 -0
  29. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/pyproject.toml +0 -0
  30. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/requirements.txt +0 -0
  31. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/__init__.py +0 -0
  32. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/__main__.py +0 -0
  33. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/cangjie.py +0 -0
  34. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/conventions.py +0 -0
  35. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/data/__init__.py +0 -0
  36. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/data/cangjie5_tc.tsv.gz +0 -0
  37. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/diacritics.py +0 -0
  38. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/graph.py +0 -0
  39. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/notation.py +0 -0
  40. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/__init__.py +0 -0
  41. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/__init__.py +0 -0
  42. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/bw2ipa.py +0 -0
  43. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/hangul2ipa.py +0 -0
  44. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/ko_tables/aspiration.csv +0 -0
  45. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/ko_tables/assimilation.csv +0 -0
  46. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/ko_tables/double_coda.csv +0 -0
  47. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/ko_tables/hanja.tsv +0 -0
  48. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/ko_tables/ipa.csv +0 -0
  49. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/ko_tables/neutralization.csv +0 -0
  50. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/ko_tables/tensification.csv +0 -0
  51. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/ko_tables/yale.csv +0 -0
  52. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/shami/__init__.py +0 -0
  53. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/shami/codeswitch.py +0 -0
  54. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/shami/diacritize.py +0 -0
  55. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/shami/dialectal.py +0 -0
  56. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/shami/english_g2p.py +0 -0
  57. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/shami/espeak.py +0 -0
  58. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/shami/frontend.py +0 -0
  59. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/shami/levantine_g2p.py +0 -0
  60. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/shami/normalize.py +0 -0
  61. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/shami/phoneme_inventory.py +0 -0
  62. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/vosk_g2p.py +0 -0
  63. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_thirdparty/zh_num.py +0 -0
  64. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/DATA_LICENSE.md +0 -0
  65. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/data/registry.json +0 -0
  66. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/aar.json +0 -0
  67. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/abi.json +0 -0
  68. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/acd.json +0 -0
  69. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ach.json +0 -0
  70. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/acz.json +0 -0
  71. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ada.json +0 -0
  72. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ade.json +0 -0
  73. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/adj.json +0 -0
  74. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/aeb.json +0 -0
  75. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ael.json +0 -0
  76. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/afr.json +0 -0
  77. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ags.json +0 -0
  78. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/aha.json +0 -0
  79. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/aiw.json +0 -0
  80. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ajg.json +0 -0
  81. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/akp.json +0 -0
  82. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/aks.json +0 -0
  83. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/aku.json +0 -0
  84. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/alz.json +0 -0
  85. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/amb.json +0 -0
  86. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/amf.json +0 -0
  87. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/anc.json +0 -0
  88. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ank.json +0 -0
  89. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ann.json +0 -0
  90. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/any.json +0 -0
  91. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/apd.json +0 -0
  92. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ara.json +0 -0
  93. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/arb.json +0 -0
  94. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ary.json +0 -0
  95. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/arz.json +0 -0
  96. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ato.json +0 -0
  97. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/avi.json +0 -0
  98. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/avn.json +0 -0
  99. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/avu.json +0 -0
  100. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ayb.json +0 -0
  101. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/azo.json +0 -0
  102. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bam.json +0 -0
  103. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bas.json +0 -0
  104. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bav.json +0 -0
  105. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bax.json +0 -0
  106. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bba.json +0 -0
  107. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bbq.json +0 -0
  108. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bci.json +0 -0
  109. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bcq.json +0 -0
  110. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bde.json +0 -0
  111. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bdj.json +0 -0
  112. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bdu.json +0 -0
  113. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bec.json +0 -0
  114. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/beh.json +0 -0
  115. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bej.json +0 -0
  116. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bem.json +0 -0
  117. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bex.json +0 -0
  118. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bfa.json +0 -0
  119. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bfj.json +0 -0
  120. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bfm.json +0 -0
  121. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bhy.json +0 -0
  122. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bib.json +0 -0
  123. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bim.json +0 -0
  124. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bin.json +0 -0
  125. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bjo.json +0 -0
  126. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bjt.json +0 -0
  127. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bkc.json +0 -0
  128. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bkm.json +0 -0
  129. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bky.json +0 -0
  130. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ble.json +0 -0
  131. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/blm.json +0 -0
  132. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bng.json +0 -0
  133. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bni.json +0 -0
  134. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bol.json +0 -0
  135. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bom.json +0 -0
  136. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bot.json +0 -0
  137. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/boy.json +0 -0
  138. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/boz.json +0 -0
  139. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bqj.json +0 -0
  140. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bqp.json +0 -0
  141. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bqx.json +0 -0
  142. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bsc.json +0 -0
  143. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bsq.json +0 -0
  144. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/buc.json +0 -0
  145. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bud.json +0 -0
  146. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/buf.json +0 -0
  147. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bum.json +0 -0
  148. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bva.json +0 -0
  149. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bvm.json +0 -0
  150. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bwj.json +0 -0
  151. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bxk.json +0 -0
  152. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/byv.json +0 -0
  153. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/bza.json +0 -0
  154. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/cgg.json +0 -0
  155. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/cjk.json +0 -0
  156. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/cko.json +0 -0
  157. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/cme.json +0 -0
  158. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/cop.json +0 -0
  159. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/daa.json +0 -0
  160. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/daf.json +0 -0
  161. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/dag.json +0 -0
  162. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/dbq.json +0 -0
  163. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/dec.json +0 -0
  164. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/dgd.json +0 -0
  165. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/did.json +0 -0
  166. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/din.json +0 -0
  167. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/dmf.json +0 -0
  168. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/dnj.json +0 -0
  169. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/dop-benin.json +0 -0
  170. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/dop-benin2.json +0 -0
  171. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/dow.json +0 -0
  172. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/dsh.json +0 -0
  173. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/dua.json +0 -0
  174. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/dug.json +0 -0
  175. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/dyo.json +0 -0
  176. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/dyu.json +0 -0
  177. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/dzd.json +0 -0
  178. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ebo.json +0 -0
  179. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ebr.json +0 -0
  180. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/efi.json +0 -0
  181. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ell.json +0 -0
  182. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ema.json +0 -0
  183. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/emk.json +0 -0
  184. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/eng.json +0 -0
  185. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/enn.json +0 -0
  186. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/etn.json +0 -0
  187. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/eto.json +0 -0
  188. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ewe.json +0 -0
  189. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ewo.json +0 -0
  190. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/fak.json +0 -0
  191. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/fat.json +0 -0
  192. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ffm.json +0 -0
  193. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/fia.json +0 -0
  194. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/flr.json +0 -0
  195. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/fmp.json +0 -0
  196. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/fng.json +0 -0
  197. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/fod.json +0 -0
  198. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/fon.json +0 -0
  199. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/fuc.json +0 -0
  200. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/fue.json +0 -0
  201. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/gaa.json +0 -0
  202. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/gej.json +0 -0
  203. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/gfe.json +0 -0
  204. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/gha.json +0 -0
  205. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/gho.json +0 -0
  206. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/gjn.json +0 -0
  207. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/gng.json +0 -0
  208. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/god.json +0 -0
  209. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/gog.json +0 -0
  210. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/gou.json +0 -0
  211. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/grb.json +0 -0
  212. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/grr.json +0 -0
  213. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/gud.json +0 -0
  214. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/guk.json +0 -0
  215. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/gur.json +0 -0
  216. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/gux.json +0 -0
  217. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/guz.json +0 -0
  218. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/gwa.json +0 -0
  219. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/gwd.json +0 -0
  220. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/gwr.json +0 -0
  221. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/gxx.json +0 -0
  222. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/hag.json +0 -0
  223. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/har.json +0 -0
  224. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/hau-niger.json +0 -0
  225. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/hau-nigeria.json +0 -0
  226. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/hay.json +0 -0
  227. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/hdy.json +0 -0
  228. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/hts.json +0 -0
  229. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ibo.json +0 -0
  230. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/igb.json +0 -0
  231. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ige.json +0 -0
  232. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/igl.json +0 -0
  233. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/igo.json +0 -0
  234. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ikw.json +0 -0
  235. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/irk.json +0 -0
  236. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/iso.json +0 -0
  237. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/jib.json +0 -0
  238. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kab.json +0 -0
  239. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kbo.json +0 -0
  240. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kbp.json +0 -0
  241. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kbr.json +0 -0
  242. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kcn.json +0 -0
  243. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kde.json +0 -0
  244. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kdh.json +0 -0
  245. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kdj.json +0 -0
  246. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kdn.json +0 -0
  247. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kdx.json +0 -0
  248. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kec.json +0 -0
  249. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ker.json +0 -0
  250. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/khq.json +0 -0
  251. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/khy.json +0 -0
  252. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kik.json +0 -0
  253. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kin.json +0 -0
  254. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kiz.json +0 -0
  255. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kmb.json +0 -0
  256. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/knc.json +0 -0
  257. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/knf.json +0 -0
  258. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/koo.json +0 -0
  259. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kpe.json +0 -0
  260. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kqs.json +0 -0
  261. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/krb.json +0 -0
  262. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kri.json +0 -0
  263. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ksb.json +0 -0
  264. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ktz.json +0 -0
  265. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kuj.json +0 -0
  266. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/kus.json +0 -0
  267. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lad.json +0 -0
  268. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lai.json +0 -0
  269. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lch.json +0 -0
  270. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ldd.json +0 -0
  271. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lgg.json +0 -0
  272. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lgq.json +0 -0
  273. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lig.json +0 -0
  274. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lin.json +0 -0
  275. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lky.json +0 -0
  276. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lln.json +0 -0
  277. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lma.json +0 -0
  278. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lmd.json +0 -0
  279. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lmp.json +0 -0
  280. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lns.json +0 -0
  281. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/loi.json +0 -0
  282. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lok.json +0 -0
  283. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lol.json +0 -0
  284. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lot.json +0 -0
  285. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lpx.json +0 -0
  286. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lub.json +0 -0
  287. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/luc.json +0 -0
  288. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lue.json +0 -0
  289. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lug.json +0 -0
  290. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lul.json +0 -0
  291. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/lun.json +0 -0
  292. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/luw.json +0 -0
  293. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mas.json +0 -0
  294. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/maw.json +0 -0
  295. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mck.json +0 -0
  296. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mcp.json +0 -0
  297. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mcu.json +0 -0
  298. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mdj.json +0 -0
  299. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mev.json +0 -0
  300. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mfb.json +0 -0
  301. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mfe.json +0 -0
  302. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mfi.json +0 -0
  303. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mfq.json +0 -0
  304. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mgc.json +0 -0
  305. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mgd.json +0 -0
  306. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mgh.json +0 -0
  307. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mhi.json +0 -0
  308. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mkf.json +0 -0
  309. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mkw.json +0 -0
  310. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mlg.json +0 -0
  311. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mlw.json +0 -0
  312. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mmo.json +0 -0
  313. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mmy.json +0 -0
  314. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mnf.json +0 -0
  315. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mnk.json +0 -0
  316. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mos.json +0 -0
  317. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mpg.json +0 -0
  318. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mqu.json +0 -0
  319. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mse.json +0 -0
  320. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mur.json +0 -0
  321. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mwe.json +0 -0
  322. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/myf.json +0 -0
  323. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/myk.json +0 -0
  324. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/myo.json +0 -0
  325. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/myx.json +0 -0
  326. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/mzk.json +0 -0
  327. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/naw.json +0 -0
  328. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nba.json +0 -0
  329. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ncu.json +0 -0
  330. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ndb.json +0 -0
  331. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ndo.json +0 -0
  332. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ney.json +0 -0
  333. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nfr.json +0 -0
  334. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nga.json +0 -0
  335. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ngb-zaire.json +0 -0
  336. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ngb-zaire2.json +0 -0
  337. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ngh.json +0 -0
  338. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ngi.json +0 -0
  339. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nhb.json +0 -0
  340. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nhu.json +0 -0
  341. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nhw.json +0 -0
  342. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nko.json +0 -0
  343. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nmn.json +0 -0
  344. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nmq.json +0 -0
  345. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nnb.json +0 -0
  346. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nnh.json +0 -0
  347. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nnw.json +0 -0
  348. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nqo.json +0 -0
  349. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nso.json +0 -0
  350. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nuj.json +0 -0
  351. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nup.json +0 -0
  352. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nus.json +0 -0
  353. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nwb.json +0 -0
  354. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nya.json +0 -0
  355. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nym.json +0 -0
  356. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nzd.json +0 -0
  357. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/nzi.json +0 -0
  358. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ogc.json +0 -0
  359. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/oku.json +0 -0
  360. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/onw.json +0 -0
  361. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/pae.json +0 -0
  362. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/pbi.json +0 -0
  363. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/pny.json +0 -0
  364. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/pov.json +0 -0
  365. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/puu.json +0 -0
  366. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/pze.json +0 -0
  367. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/rel.json +0 -0
  368. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/rmt.json +0 -0
  369. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/rng.json +0 -0
  370. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/run.json +0 -0
  371. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/sad.json +0 -0
  372. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/sag-central_african_republic.json +0 -0
  373. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/sag-congo.json +0 -0
  374. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/sav.json +0 -0
  375. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/sef-cote_d_ivoire.json +0 -0
  376. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/sef-cote_d_ivoire2.json +0 -0
  377. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/seh.json +0 -0
  378. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/she.json +0 -0
  379. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/shk.json +0 -0
  380. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/shu.json +0 -0
  381. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/shy.json +0 -0
  382. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/sig.json +0 -0
  383. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/siz.json +0 -0
  384. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/sld.json +0 -0
  385. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/sna.json +0 -0
  386. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/snk-senegal.json +0 -0
  387. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/snk.json +0 -0
  388. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/sok.json +0 -0
  389. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/sop.json +0 -0
  390. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/spa.json +0 -0
  391. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/spy.json +0 -0
  392. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ssl.json +0 -0
  393. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ssn.json +0 -0
  394. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ssw.json +0 -0
  395. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/suk.json +0 -0
  396. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/sur.json +0 -0
  397. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/sus.json +0 -0
  398. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/swb.json +0 -0
  399. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/swh.json +0 -0
  400. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/sym.json +0 -0
  401. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/szg.json +0 -0
  402. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/tan.json +0 -0
  403. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/taq.json +0 -0
  404. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/taz.json +0 -0
  405. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/tbt.json +0 -0
  406. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/tbz.json +0 -0
  407. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ted.json +0 -0
  408. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/tem.json +0 -0
  409. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/teo.json +0 -0
  410. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/thv.json +0 -0
  411. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/thz.json +0 -0
  412. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/tik.json +0 -0
  413. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/tmc.json +0 -0
  414. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/tnr.json +0 -0
  415. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/toh.json +0 -0
  416. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/toq.json +0 -0
  417. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/trc.json +0 -0
  418. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/tsc.json +0 -0
  419. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/tso.json +0 -0
  420. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/tsp.json +0 -0
  421. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ttq.json +0 -0
  422. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/tui.json +0 -0
  423. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/tum.json +0 -0
  424. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/tuq.json +0 -0
  425. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/tuz.json +0 -0
  426. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/twi.json +0 -0
  427. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/tzm.json +0 -0
  428. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/uba.json +0 -0
  429. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/udu.json +0 -0
  430. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ukv.json +0 -0
  431. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/urh.json +0 -0
  432. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/vag.json +0 -0
  433. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/vai.json +0 -0
  434. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ven.json +0 -0
  435. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/vmw.json +0 -0
  436. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/vut.json +0 -0
  437. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/wan.json +0 -0
  438. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/wib.json +0 -0
  439. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/wmw.json +0 -0
  440. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/wob.json +0 -0
  441. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/wol.json +0 -0
  442. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/wwa.json +0 -0
  443. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/xho.json +0 -0
  444. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/xog.json +0 -0
  445. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/xon.json +0 -0
  446. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/xrb.json +0 -0
  447. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/xsm.json +0 -0
  448. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/yam.json +0 -0
  449. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/yat.json +0 -0
  450. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ybb.json +0 -0
  451. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/yid.json +0 -0
  452. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/yko.json +0 -0
  453. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/yor.json +0 -0
  454. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/yun.json +0 -0
  455. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/zag.json +0 -0
  456. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/zen.json +0 -0
  457. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/ziw.json +0 -0
  458. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/zne.json +0 -0
  459. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/languages/zul.json +0 -0
  460. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/africa_g2p/loader.py +0 -0
  461. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/iqra_phonetiser/LICENSE.md +0 -0
  462. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/iqra_phonetiser/__init__.py +0 -0
  463. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/iqra_phonetiser/phonetiser.py +0 -0
  464. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/kog2p/LICENSE.md +0 -0
  465. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/kog2p/__init__.py +0 -0
  466. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/kog2p/rulebook.txt +0 -0
  467. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/mantoq/LICENSE.md +0 -0
  468. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/mantoq/__init__.py +0 -0
  469. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/mantoq/buck/__init__.py +0 -0
  470. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/mantoq/buck/phonetise_buckwalter.py +0 -0
  471. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/mantoq/buck/symbols.py +0 -0
  472. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/mantoq/buck/tokenization.py +0 -0
  473. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/mantoq/num2words.py +0 -0
  474. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/_vendored/mantoq/unicode_symbol2label.py +0 -0
  475. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/ar.py +0 -0
  476. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/base.py +0 -0
  477. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/en.py +0 -0
  478. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/enums.py +0 -0
  479. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/eu.py +0 -0
  480. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/fa.py +0 -0
  481. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/gl.py +0 -0
  482. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/he.py +0 -0
  483. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/ja.py +0 -0
  484. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/ko.py +0 -0
  485. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/mul.py +0 -0
  486. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/mwl.py +0 -0
  487. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/o2ipa.py +0 -0
  488. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/pt.py +0 -0
  489. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/registry.py +0 -0
  490. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/ru.py +0 -0
  491. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/shami.py +0 -0
  492. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/vi.py +0 -0
  493. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/phonemizers/zh.py +0 -0
  494. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/py.typed +0 -0
  495. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/readings.py +0 -0
  496. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/scripts.py +0 -0
  497. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv/translit.py +0 -0
  498. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv.egg-info/dependency_links.txt +0 -0
  499. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv.egg-info/requires.txt +0 -0
  500. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/scriptconv.egg-info/top_level.txt +0 -0
  501. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/setup.cfg +0 -0
  502. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/tests/test_arpa_stress.py +0 -0
  503. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/tests/test_cangjie.py +0 -0
  504. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/tests/test_cli.py +0 -0
  505. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/tests/test_conventions.py +0 -0
  506. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/tests/test_diacritics.py +0 -0
  507. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/tests/test_diacritics_graph.py +0 -0
  508. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/tests/test_errors_policy.py +0 -0
  509. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/tests/test_examples.py +0 -0
  510. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/tests/test_graph.py +0 -0
  511. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/tests/test_he_extra_declares_phonikud.py +0 -0
  512. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/tests/test_notation.py +0 -0
  513. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/tests/test_phonemizers_base.py +0 -0
  514. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/tests/test_phonemizers_cjk_ar.py +0 -0
  515. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/tests/test_phonemizers_friendly_import_errors.py +0 -0
  516. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/tests/test_phonemizers_halabi_iqra.py +0 -0
  517. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/tests/test_phonemizers_pt_tugaphone.py +0 -0
  518. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/tests/test_phonemizers_ru.py +0 -0
  519. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/tests/test_readings.py +0 -0
  520. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/tests/test_readings_zh.py +0 -0
  521. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/tests/test_scripts.py +0 -0
  522. {scriptconv-0.0.4a26 → scriptconv-0.0.4a28}/tests/test_scripts_stressonnx_compat.py +0 -0
  523. {scriptconv-0.0.4a26 → 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.4a26
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+ ISO 639-3 rule files. Vendored (not depended on) because it is not
13
- published to PyPI and this project does not take ``git+`` dependencies.
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)