interscript 2.4.5 → 3.1.0

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 (478) hide show
  1. package/LICENSE +25 -0
  2. package/README.md +90 -41
  3. package/dist/cli.d.ts +25 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +327 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/detector.d.ts +22 -0
  8. package/dist/detector.d.ts.map +1 -0
  9. package/dist/detector.js +73 -0
  10. package/dist/detector.js.map +1 -0
  11. package/dist/errors.d.ts +26 -0
  12. package/dist/errors.d.ts.map +1 -0
  13. package/dist/errors.js +34 -0
  14. package/dist/errors.js.map +1 -0
  15. package/dist/http-loader.d.ts +42 -0
  16. package/dist/http-loader.d.ts.map +1 -0
  17. package/dist/http-loader.js +95 -0
  18. package/dist/http-loader.js.map +1 -0
  19. package/dist/index.d.ts +49 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +182 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/isc/converter.d.ts +11 -0
  24. package/dist/isc/converter.d.ts.map +1 -0
  25. package/dist/isc/converter.js +177 -0
  26. package/dist/isc/converter.js.map +1 -0
  27. package/dist/isc/index.d.ts +16 -0
  28. package/dist/isc/index.d.ts.map +1 -0
  29. package/dist/isc/index.js +15 -0
  30. package/dist/isc/index.js.map +1 -0
  31. package/dist/isc/loader.d.ts +22 -0
  32. package/dist/isc/loader.d.ts.map +1 -0
  33. package/dist/isc/loader.js +47 -0
  34. package/dist/isc/loader.js.map +1 -0
  35. package/dist/isc/parser.d.ts +14 -0
  36. package/dist/isc/parser.d.ts.map +1 -0
  37. package/dist/isc/parser.js +734 -0
  38. package/dist/isc/parser.js.map +1 -0
  39. package/dist/isc/types.d.ts +110 -0
  40. package/dist/isc/types.d.ts.map +1 -0
  41. package/dist/isc/types.js +19 -0
  42. package/dist/isc/types.js.map +1 -0
  43. package/dist/loader.d.ts +49 -0
  44. package/dist/loader.d.ts.map +1 -0
  45. package/dist/loader.js +93 -0
  46. package/dist/loader.js.map +1 -0
  47. package/dist/loaders.d.ts +23 -0
  48. package/dist/loaders.d.ts.map +1 -0
  49. package/dist/loaders.js +40 -0
  50. package/dist/loaders.js.map +1 -0
  51. package/dist/loaders.node.d.ts +25 -0
  52. package/dist/loaders.node.d.ts.map +1 -0
  53. package/dist/loaders.node.js +42 -0
  54. package/dist/loaders.node.js.map +1 -0
  55. package/dist/ml/imf/index.d.ts +6 -0
  56. package/dist/ml/imf/index.d.ts.map +1 -0
  57. package/dist/ml/imf/index.js +6 -0
  58. package/dist/ml/imf/index.js.map +1 -0
  59. package/dist/ml/imf/loader.d.ts +19 -0
  60. package/dist/ml/imf/loader.d.ts.map +1 -0
  61. package/dist/ml/imf/loader.js +59 -0
  62. package/dist/ml/imf/loader.js.map +1 -0
  63. package/dist/ml/imf/model.d.ts +28 -0
  64. package/dist/ml/imf/model.d.ts.map +1 -0
  65. package/dist/ml/imf/model.js +181 -0
  66. package/dist/ml/imf/model.js.map +1 -0
  67. package/dist/ml/imf/registry.d.ts +34 -0
  68. package/dist/ml/imf/registry.d.ts.map +1 -0
  69. package/dist/ml/imf/registry.js +167 -0
  70. package/dist/ml/imf/registry.js.map +1 -0
  71. package/dist/ml/imf/tokens.d.ts +13 -0
  72. package/dist/ml/imf/tokens.d.ts.map +1 -0
  73. package/dist/ml/imf/tokens.js +32 -0
  74. package/dist/ml/imf/tokens.js.map +1 -0
  75. package/dist/ml/index.d.ts +24 -0
  76. package/dist/ml/index.d.ts.map +1 -0
  77. package/dist/ml/index.js +25 -0
  78. package/dist/ml/index.js.map +1 -0
  79. package/dist/ml/models/rababa/cleaner.d.ts +11 -0
  80. package/dist/ml/models/rababa/cleaner.d.ts.map +1 -0
  81. package/dist/ml/models/rababa/cleaner.js +21 -0
  82. package/dist/ml/models/rababa/cleaner.js.map +1 -0
  83. package/dist/ml/models/rababa/diacritizer.d.ts +37 -0
  84. package/dist/ml/models/rababa/diacritizer.d.ts.map +1 -0
  85. package/dist/ml/models/rababa/diacritizer.js +172 -0
  86. package/dist/ml/models/rababa/diacritizer.js.map +1 -0
  87. package/dist/ml/models/rababa/encoder.d.ts +40 -0
  88. package/dist/ml/models/rababa/encoder.d.ts.map +1 -0
  89. package/dist/ml/models/rababa/encoder.js +57 -0
  90. package/dist/ml/models/rababa/encoder.js.map +1 -0
  91. package/dist/ml/models/rababa/haraqat.d.ts +49 -0
  92. package/dist/ml/models/rababa/haraqat.d.ts.map +1 -0
  93. package/dist/ml/models/rababa/haraqat.js +89 -0
  94. package/dist/ml/models/rababa/haraqat.js.map +1 -0
  95. package/dist/ml/models/rababa/index.d.ts +12 -0
  96. package/dist/ml/models/rababa/index.d.ts.map +1 -0
  97. package/dist/ml/models/rababa/index.js +14 -0
  98. package/dist/ml/models/rababa/index.js.map +1 -0
  99. package/dist/ml/models/rababa/reconciler.d.ts +29 -0
  100. package/dist/ml/models/rababa/reconciler.d.ts.map +1 -0
  101. package/dist/ml/models/rababa/reconciler.js +81 -0
  102. package/dist/ml/models/rababa/reconciler.js.map +1 -0
  103. package/dist/ml/models/secryst/index.d.ts +10 -0
  104. package/dist/ml/models/secryst/index.d.ts.map +1 -0
  105. package/dist/ml/models/secryst/index.js +12 -0
  106. package/dist/ml/models/secryst/index.js.map +1 -0
  107. package/dist/ml/models/secryst/masks.d.ts +33 -0
  108. package/dist/ml/models/secryst/masks.d.ts.map +1 -0
  109. package/dist/ml/models/secryst/masks.js +73 -0
  110. package/dist/ml/models/secryst/masks.js.map +1 -0
  111. package/dist/ml/models/secryst/translator.d.ts +31 -0
  112. package/dist/ml/models/secryst/translator.d.ts.map +1 -0
  113. package/dist/ml/models/secryst/translator.js +112 -0
  114. package/dist/ml/models/secryst/translator.js.map +1 -0
  115. package/dist/ml/models/secryst/vocab.d.ts +39 -0
  116. package/dist/ml/models/secryst/vocab.d.ts.map +1 -0
  117. package/dist/ml/models/secryst/vocab.js +85 -0
  118. package/dist/ml/models/secryst/vocab.js.map +1 -0
  119. package/dist/ml/provision/base.d.ts +14 -0
  120. package/dist/ml/provision/base.d.ts.map +1 -0
  121. package/dist/ml/provision/base.js +19 -0
  122. package/dist/ml/provision/base.js.map +1 -0
  123. package/dist/ml/provision/index.d.ts +62 -0
  124. package/dist/ml/provision/index.d.ts.map +1 -0
  125. package/dist/ml/provision/index.js +107 -0
  126. package/dist/ml/provision/index.js.map +1 -0
  127. package/dist/ml/provision/manifest.d.ts +79 -0
  128. package/dist/ml/provision/manifest.d.ts.map +1 -0
  129. package/dist/ml/provision/manifest.js +122 -0
  130. package/dist/ml/provision/manifest.js.map +1 -0
  131. package/dist/ml/registry.d.ts +35 -0
  132. package/dist/ml/registry.d.ts.map +1 -0
  133. package/dist/ml/registry.js +76 -0
  134. package/dist/ml/registry.js.map +1 -0
  135. package/dist/ml/session/index.d.ts +55 -0
  136. package/dist/ml/session/index.d.ts.map +1 -0
  137. package/dist/ml/session/index.js +57 -0
  138. package/dist/ml/session/index.js.map +1 -0
  139. package/dist/ml/session/litert-web.d.ts +50 -0
  140. package/dist/ml/session/litert-web.d.ts.map +1 -0
  141. package/dist/ml/session/litert-web.js +146 -0
  142. package/dist/ml/session/litert-web.js.map +1 -0
  143. package/dist/ml/session/onnx-node.d.ts +10 -0
  144. package/dist/ml/session/onnx-node.d.ts.map +1 -0
  145. package/dist/ml/session/onnx-node.js +62 -0
  146. package/dist/ml/session/onnx-node.js.map +1 -0
  147. package/dist/ml/session/onnx-web.d.ts +23 -0
  148. package/dist/ml/session/onnx-web.d.ts.map +1 -0
  149. package/dist/ml/session/onnx-web.js +74 -0
  150. package/dist/ml/session/onnx-web.js.map +1 -0
  151. package/dist/ml/types.d.ts +113 -0
  152. package/dist/ml/types.d.ts.map +1 -0
  153. package/dist/ml/types.js +7 -0
  154. package/dist/ml/types.js.map +1 -0
  155. package/dist/runtime/compile-item.d.ts +53 -0
  156. package/dist/runtime/compile-item.d.ts.map +1 -0
  157. package/dist/runtime/compile-item.js +278 -0
  158. package/dist/runtime/compile-item.js.map +1 -0
  159. package/dist/runtime/context.d.ts +33 -0
  160. package/dist/runtime/context.d.ts.map +1 -0
  161. package/dist/runtime/context.js +67 -0
  162. package/dist/runtime/context.js.map +1 -0
  163. package/dist/runtime/executor.d.ts +18 -0
  164. package/dist/runtime/executor.d.ts.map +1 -0
  165. package/dist/runtime/executor.js +228 -0
  166. package/dist/runtime/executor.js.map +1 -0
  167. package/dist/runtime/interpreter.d.ts +30 -0
  168. package/dist/runtime/interpreter.d.ts.map +1 -0
  169. package/dist/runtime/interpreter.js +130 -0
  170. package/dist/runtime/interpreter.js.map +1 -0
  171. package/dist/stdlib/ml.d.ts +55 -0
  172. package/dist/stdlib/ml.d.ts.map +1 -0
  173. package/dist/stdlib/ml.js +114 -0
  174. package/dist/stdlib/ml.js.map +1 -0
  175. package/dist/stdlib.d.ts +96 -0
  176. package/dist/stdlib.d.ts.map +1 -0
  177. package/dist/stdlib.js +160 -0
  178. package/dist/stdlib.js.map +1 -0
  179. package/dist/types.d.ts +167 -0
  180. package/dist/types.d.ts.map +1 -0
  181. package/dist/types.js +13 -0
  182. package/dist/types.js.map +1 -0
  183. package/package.json +78 -18
  184. package/LICENSE.md +0 -31
  185. package/README.adoc +0 -78
  186. package/src/maps/acadsin-zho-Hani-Latn-2002.js +0 -9
  187. package/src/maps/alalc-amh-Ethi-Latn-1997.js +0 -8
  188. package/src/maps/alalc-amh-Ethi-Latn-2011.js +0 -7
  189. package/src/maps/alalc-ara-Arab-Latn-1997.js +0 -8
  190. package/src/maps/alalc-asm-Deva-Latn-1997.js +0 -50
  191. package/src/maps/alalc-asm-Deva-Latn-2012.js +0 -7
  192. package/src/maps/alalc-aze-Arab-Latn-1997.js +0 -11
  193. package/src/maps/alalc-aze-Cyrl-Latn-1997.js +0 -9
  194. package/src/maps/alalc-bel-Cyrl-Latn-1997.js +0 -8
  195. package/src/maps/alalc-ben-Beng-Latn-1997.js +0 -52
  196. package/src/maps/alalc-ben-Beng-Latn-2017.js +0 -9
  197. package/src/maps/alalc-bul-Cyrl-Latn-1997.js +0 -10
  198. package/src/maps/alalc-div-Thaa-Latn-1997.js +0 -38
  199. package/src/maps/alalc-div-Thaa-Latn-2012.js +0 -7
  200. package/src/maps/alalc-ell-Grek-Latn-1997.js +0 -25
  201. package/src/maps/alalc-ell-Grek-Latn-2010.js +0 -27
  202. package/src/maps/alalc-fas-Arab-Latn-1997.js +0 -11
  203. package/src/maps/alalc-guj-Gujr-Latn-1997.js +0 -50
  204. package/src/maps/alalc-guj-Gujr-Latn-2011.js +0 -7
  205. package/src/maps/alalc-hin-Deva-Latn-1997.js +0 -60
  206. package/src/maps/alalc-hin-Deva-Latn-2011.js +0 -7
  207. package/src/maps/alalc-kan-Kana-Latn-1997.js +0 -51
  208. package/src/maps/alalc-kan-Kana-Latn-2011.js +0 -7
  209. package/src/maps/alalc-kat-Geok-Latn-1997.js +0 -8
  210. package/src/maps/alalc-kat-Geok-Latn-2011.js +0 -7
  211. package/src/maps/alalc-kat-Geor-Latn-1997.js +0 -8
  212. package/src/maps/alalc-kat-Geor-Latn-2011.js +0 -7
  213. package/src/maps/alalc-kor-Hang-Latn-1997.js +0 -9
  214. package/src/maps/alalc-mal-Mlym-Latn-1997.js +0 -52
  215. package/src/maps/alalc-mal-Mlym-Latn-2012.js +0 -7
  216. package/src/maps/alalc-mar-Deva-Latn-1997.js +0 -13
  217. package/src/maps/alalc-mar-Deva-Latn-2011.js +0 -7
  218. package/src/maps/alalc-mkd-Cyrl-Latn-1997.js +0 -17
  219. package/src/maps/alalc-mkd-Cyrl-Latn-2013.js +0 -17
  220. package/src/maps/alalc-mon-Cyrl-Latn-1997.js +0 -8
  221. package/src/maps/alalc-ori-Orya-Latn-1997.js +0 -55
  222. package/src/maps/alalc-ori-Orya-Latn-2011.js +0 -7
  223. package/src/maps/alalc-pan-Guru-Latn-1997.js +0 -17
  224. package/src/maps/alalc-pan-Guru-Latn-2011.js +0 -7
  225. package/src/maps/alalc-pli-Deva-Latn-2012.js +0 -13
  226. package/src/maps/alalc-pra-Deva-Latn-2012.js +0 -7
  227. package/src/maps/alalc-rus-Cyrl-Latn-1997.js +0 -9
  228. package/src/maps/alalc-rus-Cyrl-Latn-2012.js +0 -9
  229. package/src/maps/alalc-san-Deva-Latn-2012.js +0 -49
  230. package/src/maps/alalc-sin-Sinh-Latn-1997.js +0 -54
  231. package/src/maps/alalc-sin-Sinh-Latn-2011.js +0 -7
  232. package/src/maps/alalc-srp-Cyrl-Latn-1997.js +0 -17
  233. package/src/maps/alalc-srp-Cyrl-Latn-2013.js +0 -15
  234. package/src/maps/alalc-tam-Taml-Latn-1997.js +0 -9
  235. package/src/maps/alalc-tam-Taml-Latn-2011.js +0 -7
  236. package/src/maps/alalc-tel-Telu-Latn-1997.js +0 -54
  237. package/src/maps/alalc-tel-Telu-Latn-2011.js +0 -7
  238. package/src/maps/alalc-tir-Ethi-Latn-1997.js +0 -8
  239. package/src/maps/alalc-tir-Ethi-Latn-2011.js +0 -7
  240. package/src/maps/alalc-ukr-Cyrl-Latn-1997.js +0 -9
  241. package/src/maps/alalc-ukr-Cyrl-Latn-2011.js +0 -7
  242. package/src/maps/apcbg-bul-Cyrl-Latn-1995.js +0 -8
  243. package/src/maps/az-aze-Cyrl-Latn-1939.js +0 -8
  244. package/src/maps/az-aze-Cyrl-Latn-1958.js +0 -11
  245. package/src/maps/bas-rus-Cyrl-Latn-2017-bss.js +0 -10
  246. package/src/maps/bas-rus-Cyrl-Latn-2017-oss.js +0 -10
  247. package/src/maps/bgn-jpn-Hrkt-Latn-1962.js +0 -10
  248. package/src/maps/bgn-kor-Hang-Latn-1943.js +0 -9
  249. package/src/maps/bgn-kor-Kore-Latn-1943.js +0 -10
  250. package/src/maps/bgna-bul-Cyrl-Latn-2006.js +0 -7
  251. package/src/maps/bgna-bul-Cyrl-Latn-2009.js +0 -7
  252. package/src/maps/bgnpcgn-amh-Ethi-Latn-1967.js +0 -8
  253. package/src/maps/bgnpcgn-ara-Arab-Latn-1956.js +0 -25
  254. package/src/maps/bgnpcgn-arm-Armn-Latn-1981.js +0 -8
  255. package/src/maps/bgnpcgn-aze-Cyrl-Latn-1993.js +0 -8
  256. package/src/maps/bgnpcgn-bak-Cyrl-Latn-2007.js +0 -16
  257. package/src/maps/bgnpcgn-bal-Arab-Latn-2008.js +0 -9
  258. package/src/maps/bgnpcgn-bel-Cyrl-Latn-1979.js +0 -12
  259. package/src/maps/bgnpcgn-bul-Cyrl-Latn-1952.js +0 -12
  260. package/src/maps/bgnpcgn-bul-Cyrl-Latn-2013.js +0 -10
  261. package/src/maps/bgnpcgn-che-Cyrl-Latn-2008.js +0 -15
  262. package/src/maps/bgnpcgn-deu-Latn-Latn-2000.js +0 -12
  263. package/src/maps/bgnpcgn-div-Thaa-Latn-1972.js +0 -13
  264. package/src/maps/bgnpcgn-div-Thaa-Latn-1988.js +0 -9
  265. package/src/maps/bgnpcgn-ell-Grek-Latn-1962.js +0 -52
  266. package/src/maps/bgnpcgn-ell-Grek-Latn-1996.js +0 -7
  267. package/src/maps/bgnpcgn-fao-Latn-Latn-1964.js +0 -11
  268. package/src/maps/bgnpcgn-fao-Latn-Latn-1968.js +0 -7
  269. package/src/maps/bgnpcgn-fas-Arab-Latn-1956.js +0 -8
  270. package/src/maps/bgnpcgn-isl-Latn-Latn-1964.js +0 -10
  271. package/src/maps/bgnpcgn-isl-Latn-Latn-1968.js +0 -7
  272. package/src/maps/bgnpcgn-jpn-Hrkt-Latn-1976.js +0 -10
  273. package/src/maps/bgnpcgn-kat-Geor-Latn-1981.js +0 -8
  274. package/src/maps/bgnpcgn-kat-Geor-Latn-2009.js +0 -7
  275. package/src/maps/bgnpcgn-kaz-Cyrl-Latn-1979.js +0 -8
  276. package/src/maps/bgnpcgn-kir-Cyrl-Latn-1979.js +0 -8
  277. package/src/maps/bgnpcgn-kor-Hang-Latn-kn-1945.js +0 -52
  278. package/src/maps/bgnpcgn-kor-Hang-Latn-rok-2011.js +0 -8
  279. package/src/maps/bgnpcgn-kor-Kore-Latn-rok-2011.js +0 -8
  280. package/src/maps/bgnpcgn-kur-Arab-Latn-2007.js +0 -9
  281. package/src/maps/bgnpcgn-mkd-Cyrl-Latn-1981.js +0 -15
  282. package/src/maps/bgnpcgn-mkd-Cyrl-Latn-2013.js +0 -17
  283. package/src/maps/bgnpcgn-mon-Cyrl-Latn-1964.js +0 -12
  284. package/src/maps/bgnpcgn-nep-Deva-Latn-2011.js +0 -13
  285. package/src/maps/bgnpcgn-per-Arab-Latn-1958.js +0 -10
  286. package/src/maps/bgnpcgn-prs-Arab-Latn-2007.js +0 -25
  287. package/src/maps/bgnpcgn-prs-Arab-Latn-yaghoubi.js +0 -8
  288. package/src/maps/bgnpcgn-pus-Arab-Latn-1968.js +0 -26
  289. package/src/maps/bgnpcgn-ron-Cyrl-Latn-2002.js +0 -23
  290. package/src/maps/bgnpcgn-rue-Cyrl-Latn-2016.js +0 -8
  291. package/src/maps/bgnpcgn-rus-Cyrl-Latn-1947.js +0 -52
  292. package/src/maps/bgnpcgn-sme-Latn-Latn-1984.js +0 -8
  293. package/src/maps/bgnpcgn-srp-Cyrl-Latn-1962.js +0 -7
  294. package/src/maps/bgnpcgn-srp-Cyrl-Latn-2005.js +0 -15
  295. package/src/maps/bgnpcgn-tat-Cyrl-Latn-2007.js +0 -27
  296. package/src/maps/bgnpcgn-tgk-Cyrl-Latn-1994.js +0 -12
  297. package/src/maps/bgnpcgn-tir-Ethi-Latn-2007.js +0 -8
  298. package/src/maps/bgnpcgn-ukr-Cyrl-Latn-1965.js +0 -9
  299. package/src/maps/bgnpcgn-ukr-Cyrl-Latn-2019.js +0 -9
  300. package/src/maps/bgnpcgn-urd-Arab-Latn-2007.js +0 -25
  301. package/src/maps/bgnpcgn-uzb-Cyrl-Latn-1979.js +0 -12
  302. package/src/maps/bgnpcgn-uzb-Cyrl-Latn-2000.js +0 -11
  303. package/src/maps/bgnpcgn-zho-Hans-Latn-1979.js +0 -8
  304. package/src/maps/bis-asm-Beng-Latn-13194-1991.js +0 -14
  305. package/src/maps/bis-ben-Beng-Latn-13194-1991.js +0 -14
  306. package/src/maps/bis-dev-Deva-Latn-13194-1991.js +0 -14
  307. package/src/maps/bis-guj-Gujr-Latn-13194-1991.js +0 -14
  308. package/src/maps/bis-kan-Kana-Latn-13194-1991.js +0 -14
  309. package/src/maps/bis-mlm-Mlym-Latn-13194-1991.js +0 -14
  310. package/src/maps/bis-ori-Orya-Latn-13194-1991.js +0 -14
  311. package/src/maps/bis-pnj-Guru-Latn-13194-1991.js +0 -14
  312. package/src/maps/bis-tel-Telu-Latn-13194-1991.js +0 -14
  313. package/src/maps/bis-tml-Taml-Latn-13194-1991.js +0 -14
  314. package/src/maps/by-bel-Cyrl-Latn-1998.js +0 -19
  315. package/src/maps/by-bel-Cyrl-Latn-2007.js +0 -7
  316. package/src/maps/din-grc-Grek-Latn-31634-2011-t1.js +0 -23
  317. package/src/maps/din-hin-Deva-Latn-33904-2018.js +0 -9
  318. package/src/maps/din-kat-Geor-Latn-32707-2010.js +0 -8
  319. package/src/maps/din-mar-Deva-Latn-33904-2018.js +0 -9
  320. package/src/maps/din-nep-Deva-Latn-33904-2018.js +0 -9
  321. package/src/maps/din-pli-Deva-Latn-33904-2018.js +0 -7
  322. package/src/maps/din-pra-Deva-Latn-33904-2018.js +0 -7
  323. package/src/maps/din-san-Deva-Latn-33904-2018.js +0 -51
  324. package/src/maps/din-tam-Taml-Latn-33903-2016.js +0 -34
  325. package/src/maps/dos-nep-Deva-Latn-1997.js +0 -9
  326. package/src/maps/elot-ell-Grek-Latn-743-1982-tl.js +0 -53
  327. package/src/maps/elot-ell-Grek-Latn-743-1982-ts.js +0 -53
  328. package/src/maps/elot-ell-Grek-Latn-743-2001-tl.js +0 -7
  329. package/src/maps/elot-ell-Grek-Latn-743-2001-ts.js +0 -7
  330. package/src/maps/ggg-kat-Geor-Latn-2002.js +0 -8
  331. package/src/maps/gki-bel-Cyrl-Latn-1992.js +0 -9
  332. package/src/maps/gki-bel-Cyrl-Latn-2000.js +0 -18
  333. package/src/maps/gost-rus-Cyrl-Latn-16876-71-1983.js +0 -10
  334. package/src/maps/gost-rus-Cyrl-Latn-7.79-2000-2002.js +0 -9
  335. package/src/maps/hk-yue-Hani-Latn-1888.js +0 -10
  336. package/src/maps/icao-bel-Cyrl-Latn-9303.js +0 -8
  337. package/src/maps/icao-bul-Cyrl-Latn-9303.js +0 -8
  338. package/src/maps/icao-fas-Arab-Latn-9303.js +0 -8
  339. package/src/maps/icao-heb-Hebr-Latn-9303.js +0 -8
  340. package/src/maps/icao-mkd-Cyrl-Latn-9303.js +0 -8
  341. package/src/maps/icao-rus-Cyrl-Latn-9303.js +0 -8
  342. package/src/maps/icao-srp-Cyrl-Latn-9303.js +0 -8
  343. package/src/maps/icao-ukr-Cyrl-Latn-9303.js +0 -8
  344. package/src/maps/index.json +0 -1
  345. package/src/maps/iso-ara-Arab-Latn-233-1984.js +0 -24
  346. package/src/maps/iso-ara-Arab-Latn-233-2-1993.js +0 -12
  347. package/src/maps/iso-asm-Beng-Latn-15919-2001.js +0 -9
  348. package/src/maps/iso-ben-Beng-Latn-15919-2001.js +0 -9
  349. package/src/maps/iso-ell-Grek-Latn-843-1997-t1.js +0 -15
  350. package/src/maps/iso-ell-Grek-Latn-843-1997-t2.js +0 -9
  351. package/src/maps/iso-guj-Gujr-Latn-15919-2001.js +0 -9
  352. package/src/maps/iso-hin-Deva-Latn-15919-2001.js +0 -7
  353. package/src/maps/iso-inc-Deva-Latn-15919-2001.js +0 -7
  354. package/src/maps/iso-jpn-Hrkt-Latn-3602-1989.js +0 -10
  355. package/src/maps/iso-kan-Kana-Latn-15919-2001.js +0 -9
  356. package/src/maps/iso-kat-Geor-Latn-9984-1996.js +0 -8
  357. package/src/maps/iso-kor-Hang-Latn-1996-method1.js +0 -14
  358. package/src/maps/iso-kor-Hang-Latn-1996-method2.js +0 -13
  359. package/src/maps/iso-mal-Mlym-Latn-15919-2001.js +0 -12
  360. package/src/maps/iso-mar-Deva-Latn-15919-2001.js +0 -7
  361. package/src/maps/iso-nep-Deva-Latn-15919-2001.js +0 -7
  362. package/src/maps/iso-ori-Orya-Latn-15919-2001.js +0 -9
  363. package/src/maps/iso-pan-Guru-Latn-15919-2001.js +0 -9
  364. package/src/maps/iso-pli-Beng-Latn-15919-2001.js +0 -7
  365. package/src/maps/iso-pli-Deva-Latn-15919-2001.js +0 -7
  366. package/src/maps/iso-pli-Sinh-Latn-15919-2001.js +0 -9
  367. package/src/maps/iso-pli-Thai-Latn-15919-2001.js +0 -7
  368. package/src/maps/iso-pra-Deva-Latn-15919-2001.js +0 -7
  369. package/src/maps/iso-prs-Arab-Latn-233-3-1999.js +0 -8
  370. package/src/maps/iso-rus-Cyrl-Latn-9-1995.js +0 -8
  371. package/src/maps/iso-san-Deva-Latn-15919-2001.js +0 -9
  372. package/src/maps/iso-tam-Taml-Latn-15919-2001.js +0 -9
  373. package/src/maps/iso-tel-Telu-Latn-15919-2001.js +0 -9
  374. package/src/maps/iso-tha-Thai-Latn-11940-1998.js +0 -9
  375. package/src/maps/kp-kor-Hang-Latn-2002.js +0 -78
  376. package/src/maps/lshk-yue-Hani-Latn-jyutping-1993.js +0 -8
  377. package/src/maps/masm-mon-Cyrl-Latn-5217-2012.js +0 -8
  378. package/src/maps/masm-mon-Latn-Cyrl-5217-2012.js +0 -18
  379. package/src/maps/mext-jpn-Hrkt-Latn-1954.js +0 -16
  380. package/src/maps/moct-kor-Hang-Latn-2000.js +0 -112
  381. package/src/maps/mofa-jpn-Hrkt-Latn-1989.js +0 -14
  382. package/src/maps/mv-div-Thaa-Latn-1987.js +0 -58
  383. package/src/maps/mvd-bel-Cyrl-Latn-2008.js +0 -36
  384. package/src/maps/mvd-bel-Cyrl-Latn-2010.js +0 -11
  385. package/src/maps/mvd-rus-Cyrl-Latn-2008.js +0 -19
  386. package/src/maps/mvd-rus-Cyrl-Latn-2010.js +0 -9
  387. package/src/maps/odni-ara-Arab-Latn-2004.js +0 -7
  388. package/src/maps/odni-ara-Arab-Latn-2015.js +0 -10
  389. package/src/maps/odni-aze-Cyrl-Latn-2015.js +0 -18
  390. package/src/maps/odni-bel-Cyrl-Latn-2015.js +0 -8
  391. package/src/maps/odni-bul-Cyrl-Latn-2005.js +0 -8
  392. package/src/maps/odni-bul-Cyrl-Latn-2015.js +0 -13
  393. package/src/maps/odni-che-Cyrl-Latn-2015.js +0 -13
  394. package/src/maps/odni-fas-Arab-Latn-2004.js +0 -8
  395. package/src/maps/odni-fas-Arab-Latn-2015.js +0 -8
  396. package/src/maps/odni-hin-Deva-Latn-2004.js +0 -8
  397. package/src/maps/odni-hin-Deva-Latn-2015.js +0 -8
  398. package/src/maps/odni-kat-Geor-Latn-2015.js +0 -8
  399. package/src/maps/odni-kaz-Cyrl-Latn-2015.js +0 -20
  400. package/src/maps/odni-kir-Cyrl-Latn-2015.js +0 -18
  401. package/src/maps/odni-kor-Hang-Latn-2015.js +0 -92
  402. package/src/maps/odni-mkd-Cyrl-Latn-2005.js +0 -7
  403. package/src/maps/odni-mkd-Cyrl-Latn-2015.js +0 -8
  404. package/src/maps/odni-prs-Arab-Latn-2004.js +0 -9
  405. package/src/maps/odni-prs-Arab-Latn-2015.js +0 -9
  406. package/src/maps/odni-pus-Arab-Latn-2011.js +0 -10
  407. package/src/maps/odni-rus-Cyrl-Latn-2015.js +0 -8
  408. package/src/maps/odni-srp-Cyrl-Latn-2005.js +0 -7
  409. package/src/maps/odni-srp-Cyrl-Latn-2015.js +0 -8
  410. package/src/maps/odni-tat-Cyrl-Latn-2015.js +0 -19
  411. package/src/maps/odni-tgk-Cyrl-Latn-2015.js +0 -21
  412. package/src/maps/odni-tuk-Cyrl-Latn-2015.js +0 -13
  413. package/src/maps/odni-uig-Cyrl-Latn-2015.js +0 -17
  414. package/src/maps/odni-ukr-Cyrl-Latn-2015.js +0 -9
  415. package/src/maps/odni-urd-Arab-Latn-2015.js +0 -8
  416. package/src/maps/odni-uzb-Cyrl-Latn-2015.js +0 -13
  417. package/src/maps/posix.js +0 -5
  418. package/src/maps/sac-zho-Hans-Latn-1979.js +0 -8
  419. package/src/maps/sasm-mon-Mong-Latn-general-1978.js +0 -8
  420. package/src/maps/sasm-mon-Mong-Latn-phonetic-1978.js +0 -9
  421. package/src/maps/ses-ara-Arab-Latn-1930.js +0 -10
  422. package/src/maps/stategeocadastre-ukr-Cyrl-Latn-1993.js +0 -19
  423. package/src/maps/ua-ukr-Cyrl-Latn-1996.js +0 -21
  424. package/src/maps/ua-ukr-Cyrl-Latn-2007.js +0 -16
  425. package/src/maps/ua-ukr-Cyrl-Latn-2010.js +0 -11
  426. package/src/maps/un-amh-Ethi-Latn-2016.js +0 -9
  427. package/src/maps/un-ara-Arab-Latn-1971.js +0 -13
  428. package/src/maps/un-ara-Arab-Latn-1972.js +0 -13
  429. package/src/maps/un-ara-Arab-Latn-2017.js +0 -24
  430. package/src/maps/un-asm-Beng-Latn-1972.js +0 -50
  431. package/src/maps/un-bel-Cyrl-Latn-2007.js +0 -7
  432. package/src/maps/un-ben-Beng-Latn-2016.js +0 -8
  433. package/src/maps/un-bul-Cyrl-Latn-1977.js +0 -14
  434. package/src/maps/un-ell-Grek-Latn-1987-phonetic.js +0 -83
  435. package/src/maps/un-ell-Grek-Latn-1987-tl.js +0 -7
  436. package/src/maps/un-ell-Grek-Latn-1987-ts.js +0 -7
  437. package/src/maps/un-guj-Gujr-Latn-1972.js +0 -45
  438. package/src/maps/un-hin-Deva-Latn-2016.js +0 -91
  439. package/src/maps/un-kan-Kana-Latn-2016.js +0 -45
  440. package/src/maps/un-mal-Mlym-Latn-1972.js +0 -48
  441. package/src/maps/un-mar-Deva-Latn-2016.js +0 -11
  442. package/src/maps/un-mkd-Cyrl-Latn-1977.js +0 -21
  443. package/src/maps/un-mon-Mong-Latn-general-2013.js +0 -7
  444. package/src/maps/un-mon-Mong-Latn-phonetic-2013.js +0 -7
  445. package/src/maps/un-nep-Deva-Latn-1972.js +0 -91
  446. package/src/maps/un-nep-Deva-Latn-2013.js +0 -7
  447. package/src/maps/un-ori-Orya-Latn-1972.js +0 -48
  448. package/src/maps/un-pan-Guru-Latn-1972.js +0 -87
  449. package/src/maps/un-prs-Arab-Latn-1967.js +0 -11
  450. package/src/maps/un-rus-Cyrl-Latn-1987.js +0 -9
  451. package/src/maps/un-sin-Sinh-Latn-1972.js +0 -46
  452. package/src/maps/un-srp-Cyrl-Latn-1997.js +0 -7
  453. package/src/maps/un-tam-Taml-Latn-1972.js +0 -34
  454. package/src/maps/un-tel-Telu-Latn-1972.js +0 -46
  455. package/src/maps/un-ukr-Cyrl-Latn-1998.js +0 -10
  456. package/src/maps/un-ukr-Cyrl-Latn-2012.js +0 -7
  457. package/src/maps/un-urd-Arab-Latn-1972.js +0 -25
  458. package/src/maps/unicode.js +0 -7
  459. package/src/maps/var-Cyrl.js +0 -7
  460. package/src/maps/var-amh-Ethi-Latn-eae-2003.js +0 -8
  461. package/src/maps/var-gez-Ethi-Latn-eae-2003.js +0 -7
  462. package/src/maps/var-hin-Deva-Latn-hunterian-1872.js +0 -12
  463. package/src/maps/var-jpn-Hrkt-Latn-hepburn-1886.js +0 -18
  464. package/src/maps/var-jpn-Hrkt-Latn-hepburn-1954.js +0 -17
  465. package/src/maps/var-kor-Hang-Hang-jamo.js +0 -8
  466. package/src/maps/var-kor-Hang-Latn-mr-1939.js +0 -355
  467. package/src/maps/var-kor-Kore-Hang-2013.js +0 -8
  468. package/src/maps/var-kor-Kore-Latn-mr-1939.js +0 -10
  469. package/src/maps/var-kor.js +0 -19
  470. package/src/maps/var-mar-Deva-Latn-hunterian-1872.js +0 -7
  471. package/src/maps/var-mon-Mong-Latn-1930.js +0 -8
  472. package/src/maps/var-mon-Mong-Latn-lessing.js +0 -14
  473. package/src/maps/var-mon-Mong-Latn-vpmc.js +0 -10
  474. package/src/maps/var-pra-Deva-Latn-iast-1912.js +0 -7
  475. package/src/maps/var-san-Deva-Latn-iast-1912.js +0 -9
  476. package/src/maps/var-zho-Hani-Latn-wd-1979.js +0 -13
  477. package/src/stdlib.js +0 -294
  478. package/test/test.js +0 -26
@@ -0,0 +1,734 @@
1
+ /**
2
+ * ISC parser — recursive descent parser for ISC format.
3
+ *
4
+ * Parses .isc source text into an IscDocument. No external dependencies.
5
+ * Each construct has its own parse method (OCP: new construct = new method).
6
+ *
7
+ * The grammar mirrors the Ruby Parslet grammar in interscript-ruby.
8
+ *
9
+ * const doc = parseIsc(source, "map.isc")
10
+ * // doc.systemCode, doc.metadata, doc.tests, doc.stages, ...
11
+ */
12
+ import { IscParseError } from "./types.js";
13
+ const PRIMITIVES = new Set([
14
+ "boundary",
15
+ "line_start",
16
+ "line_end",
17
+ "word_boundary",
18
+ "space",
19
+ "non_boundary",
20
+ ]);
21
+ const FUNCTIONS = new Set(["upcase", "downcase", "title_case", "reverse", "strip", "swapcase"]);
22
+ const CONSTRAINTS = new Set(["before", "after", "not_before", "not_after"]);
23
+ export function parseIsc(source, filename) {
24
+ return new Parser(source, filename).parse();
25
+ }
26
+ class Parser {
27
+ src;
28
+ pos = 0;
29
+ filename;
30
+ constructor(src, filename) {
31
+ this.src = src;
32
+ this.filename = filename;
33
+ }
34
+ parse() {
35
+ this.skipWs();
36
+ this.expect("system");
37
+ this.skipWs();
38
+ const systemCode = this.parseQuotedString();
39
+ this.skipWs();
40
+ this.expect("{");
41
+ const body = this.parseBlockItems();
42
+ this.skipWs();
43
+ this.expect("}");
44
+ this.skipWs();
45
+ let metadata = {};
46
+ let tests = [];
47
+ let aliases = [];
48
+ const stages = [];
49
+ const dependencies = [];
50
+ for (const item of body) {
51
+ if (item.metadata)
52
+ metadata = { ...metadata, ...item.metadata };
53
+ else if (item.tests)
54
+ tests = item.tests;
55
+ else if (item.aliases)
56
+ aliases = item.aliases;
57
+ else if (item.stage)
58
+ stages.push(item.stage);
59
+ else if (item.dependency)
60
+ dependencies.push(item.dependency);
61
+ }
62
+ return { systemCode, metadata, tests, aliases, stages, dependencies };
63
+ }
64
+ // -- Block items --
65
+ parseBlockItems() {
66
+ const items = [];
67
+ for (;;) {
68
+ this.skipWs();
69
+ if (this.peek() === "}" || this.pos >= this.src.length)
70
+ break;
71
+ const keyword = this.peekWord();
72
+ if (keyword === "metadata")
73
+ items.push(this.parseMetadata());
74
+ else if (keyword === "tests")
75
+ items.push(this.parseTests());
76
+ else if (keyword === "aliases")
77
+ items.push(this.parseAliases());
78
+ else if (keyword === "stage")
79
+ items.push(this.parseStage());
80
+ else if (keyword === "dependency")
81
+ items.push(this.parseDependency());
82
+ else
83
+ this.error(`Unexpected keyword: ${keyword}`);
84
+ }
85
+ return items;
86
+ }
87
+ // -- Metadata --
88
+ parseMetadata() {
89
+ this.expect("metadata");
90
+ this.skipWs();
91
+ this.expect("{");
92
+ const metadata = {};
93
+ for (;;) {
94
+ this.skipWs();
95
+ if (this.peek() === "}")
96
+ break;
97
+ // Check for description block
98
+ if (this.peekWord() === "description") {
99
+ this.consume("description");
100
+ this.skipInlineWs();
101
+ if (this.peek() === "{") {
102
+ this.expect("{");
103
+ const text = this.parseRawText();
104
+ this.expect("}");
105
+ metadata.description = text;
106
+ }
107
+ else if (this.peek() === '"') {
108
+ metadata.description = this.parseQuotedString();
109
+ }
110
+ else {
111
+ metadata.description = this.parseToNewline().trim();
112
+ }
113
+ continue;
114
+ }
115
+ // Check for notes block
116
+ if (this.peekWord() === "notes") {
117
+ this.consume("notes");
118
+ this.skipInlineWs();
119
+ if (this.peek() === "{") {
120
+ this.expect("{");
121
+ // Detect form: if first non-ws token is `note`, use note-list form.
122
+ // Otherwise, treat block body as raw free-text.
123
+ const saved = this.pos;
124
+ this.skipWs();
125
+ const isNoteList = this.peekWord() === "note";
126
+ this.pos = saved;
127
+ if (isNoteList) {
128
+ const notes = [];
129
+ for (;;) {
130
+ this.skipWs();
131
+ if (this.peek() === "}")
132
+ break;
133
+ this.expect("note");
134
+ this.skipWs();
135
+ notes.push(this.parseQuotedString());
136
+ }
137
+ this.expect("}");
138
+ metadata.notes = notes;
139
+ }
140
+ else {
141
+ const text = this.parseRawText();
142
+ this.expect("}");
143
+ metadata.notes = text;
144
+ }
145
+ }
146
+ continue;
147
+ }
148
+ // Generic field: key value
149
+ const key = this.parseIdentifier();
150
+ this.skipInlineWs();
151
+ if (this.peek() === "\n" || this.peek() === "}") {
152
+ metadata[key] = "";
153
+ continue;
154
+ }
155
+ if (this.peek() === "{") {
156
+ this.expect("{");
157
+ const blockText = this.parseRawText();
158
+ this.expect("}");
159
+ metadata[key] = blockText;
160
+ }
161
+ else if (this.peek() === '"') {
162
+ metadata[key] = this.parseQuotedString();
163
+ }
164
+ else {
165
+ metadata[key] = this.parseToNewline().trim();
166
+ }
167
+ }
168
+ this.expect("}");
169
+ return { metadata };
170
+ }
171
+ // -- Tests --
172
+ parseTests() {
173
+ this.expect("tests");
174
+ this.skipWs();
175
+ this.expect("{");
176
+ const tests = [];
177
+ for (;;) {
178
+ this.skipWs();
179
+ if (this.peek() === "}")
180
+ break;
181
+ if (this.peek() === "#") {
182
+ this.skipLine();
183
+ continue;
184
+ }
185
+ const input = this.parseStringLiteral();
186
+ this.skipWs();
187
+ this.expect("->");
188
+ this.skipWs();
189
+ const expected = this.parseStringLiteral();
190
+ this.skipWs();
191
+ if (this.peekWord() === "note") {
192
+ this.consume("note");
193
+ this.skipWs();
194
+ const note = this.parseStringLiteral();
195
+ tests.push({ input, expected, note });
196
+ }
197
+ else {
198
+ tests.push({ input, expected });
199
+ }
200
+ }
201
+ this.expect("}");
202
+ return { tests };
203
+ }
204
+ // -- Aliases --
205
+ parseAliases() {
206
+ this.expect("aliases");
207
+ this.skipWs();
208
+ this.expect("{");
209
+ const aliases = [];
210
+ for (;;) {
211
+ this.skipWs();
212
+ if (this.peek() === "}")
213
+ break;
214
+ if (this.peek() === "#") {
215
+ this.skipLine();
216
+ continue;
217
+ }
218
+ const name = this.parseIdentifier();
219
+ this.skipWs();
220
+ this.expect("=");
221
+ this.skipWs();
222
+ const value = this.parseItem();
223
+ aliases.push({ name, value });
224
+ }
225
+ this.expect("}");
226
+ return { aliases };
227
+ }
228
+ // -- Stage --
229
+ parseStage() {
230
+ this.expect("stage");
231
+ this.skipWs();
232
+ const name = this.parseIdentifier();
233
+ this.skipWs();
234
+ this.expect("{");
235
+ const body = [];
236
+ for (;;) {
237
+ this.skipWs();
238
+ if (this.peek() === "}")
239
+ break;
240
+ if (this.peek() === "#") {
241
+ this.skipLine();
242
+ continue;
243
+ }
244
+ const keyword = this.peekWord();
245
+ if (keyword === "parallel" || keyword === "sequence") {
246
+ this.consume(keyword);
247
+ this.skipWs();
248
+ this.expect("{");
249
+ const rules = [];
250
+ for (;;) {
251
+ this.skipWs();
252
+ if (this.peek() === "}")
253
+ break;
254
+ if (this.peek() === "#") {
255
+ this.skipLine();
256
+ continue;
257
+ }
258
+ if (this.peekWord() === "sub") {
259
+ rules.push(this.parseRule());
260
+ }
261
+ else {
262
+ // Ruby Parslet silently drops unrecognized tokens in rule blocks.
263
+ this.skipLine();
264
+ }
265
+ }
266
+ this.expect("}");
267
+ body.push({ kind: keyword, rules });
268
+ }
269
+ else if (keyword === "run") {
270
+ this.consume("run");
271
+ this.skipWs();
272
+ let dep;
273
+ let stageName;
274
+ if (this.peekWord() === "map") {
275
+ this.consume("map");
276
+ this.expect(".");
277
+ dep = this.parseIdentifier();
278
+ this.expect(".");
279
+ this.expect("stage");
280
+ this.expect(".");
281
+ stageName = this.parseIdentifier();
282
+ }
283
+ else if (this.peekWord() === "stage") {
284
+ this.consume("stage");
285
+ this.expect(".");
286
+ stageName = this.parseIdentifier();
287
+ }
288
+ else {
289
+ this.error("Expected map. or stage. after run");
290
+ }
291
+ body.push(dep
292
+ ? { kind: "run", dependency: dep, stage: stageName }
293
+ : { kind: "run", stage: stageName });
294
+ }
295
+ else if (keyword === "separate") {
296
+ this.consume("separate");
297
+ this.skipWs();
298
+ if (this.peekWord() === "separator") {
299
+ this.consume("separator");
300
+ this.skipWs();
301
+ const separator = this.parseItemAtom();
302
+ body.push({ kind: "separate", separator });
303
+ }
304
+ else {
305
+ body.push({ kind: "separate" });
306
+ }
307
+ }
308
+ else if (keyword === "compose") {
309
+ this.consume(keyword);
310
+ body.push({ kind: "compose" });
311
+ }
312
+ else if (keyword === "decompose") {
313
+ this.consume(keyword);
314
+ body.push({ kind: "decompose" });
315
+ }
316
+ else if (keyword === "rababa") {
317
+ this.consume("rababa");
318
+ this.skipInlineWs();
319
+ const kwargs = {};
320
+ // Parse `name: "value"` pairs separated by commas/whitespace.
321
+ while (this.peek() !== "}" && this.peek() !== "" && this.peek() !== "\n") {
322
+ const argName = this.parseIdentifier();
323
+ if (!argName)
324
+ break;
325
+ this.skipInlineWs();
326
+ this.expect(":");
327
+ this.skipInlineWs();
328
+ const argVal = this.parseStringLiteral();
329
+ kwargs[argName] = argVal;
330
+ this.skipInlineWs();
331
+ if (this.peek() === ",")
332
+ this.pos++;
333
+ this.skipInlineWs();
334
+ }
335
+ body.push({ kind: "funcall", name: "rababa", kwargs });
336
+ }
337
+ else if (FUNCTIONS.has(keyword)) {
338
+ this.consume(keyword);
339
+ body.push({ kind: "string_case", op: keyword });
340
+ }
341
+ else if (keyword === "sub") {
342
+ const rule = this.parseRule();
343
+ body.push({ kind: "bare_rule", rule });
344
+ }
345
+ else {
346
+ // Ruby Parslet silently drops unrecognized tokens in stage body.
347
+ // Skip to end of line for parity.
348
+ this.skipLine();
349
+ }
350
+ }
351
+ this.expect("}");
352
+ return { stage: { name, body } };
353
+ }
354
+ // -- Rules --
355
+ parseRule() {
356
+ this.expect("sub");
357
+ this.skipWs();
358
+ // Block form: sub { from ... to ... }
359
+ if (this.peek() === "{") {
360
+ this.expect("{");
361
+ let from = { type: "none" };
362
+ let to = { type: "none" };
363
+ const constraints = [];
364
+ for (;;) {
365
+ this.skipWs();
366
+ if (this.peek() === "}")
367
+ break;
368
+ const word = this.peekWord();
369
+ if (word === "from") {
370
+ this.consume("from");
371
+ this.skipWs();
372
+ from = this.parseItem();
373
+ }
374
+ else if (word === "to") {
375
+ this.consume("to");
376
+ this.skipWs();
377
+ to = this.parseItem();
378
+ }
379
+ else if (CONSTRAINTS.has(word)) {
380
+ this.consume(word);
381
+ this.skipWs();
382
+ constraints.push({ kind: word, item: this.parseItem() });
383
+ }
384
+ else {
385
+ this.error(`Unexpected keyword in sub block: ${word}`);
386
+ }
387
+ }
388
+ this.expect("}");
389
+ return { from, to, constraints };
390
+ }
391
+ // Compact form: sub <from> <to> <constraints>
392
+ const from = this.parseItemAtom();
393
+ this.skipWs();
394
+ const to = this.parseItemAtom();
395
+ const constraints = [];
396
+ for (;;) {
397
+ this.skipWs();
398
+ const word = this.peekWord();
399
+ if (!CONSTRAINTS.has(word))
400
+ break;
401
+ this.consume(word);
402
+ this.skipWs();
403
+ constraints.push({ kind: word, item: this.parseItemAtom() });
404
+ }
405
+ return { from, to, constraints };
406
+ }
407
+ // -- Items --
408
+ parseItem() {
409
+ const first = this.parseItemAtom();
410
+ const parts = [first];
411
+ for (;;) {
412
+ this.skipInlineWs();
413
+ if (this.peek() === "+") {
414
+ this.pos++;
415
+ this.skipInlineWs();
416
+ parts.push(this.parseItemAtom());
417
+ }
418
+ else if (this.isItemAtomStart() && !this.isKeyword()) {
419
+ parts.push(this.parseItemAtom());
420
+ }
421
+ else {
422
+ break;
423
+ }
424
+ }
425
+ if (parts.length === 1)
426
+ return parts[0];
427
+ return { type: "concat", parts };
428
+ }
429
+ parseItemAtom() {
430
+ const c = this.peek();
431
+ if (c === '"' || c === "'")
432
+ return { type: "string", value: this.parseStringLiteral() };
433
+ const word = this.peekWord();
434
+ if (!word)
435
+ this.error("Expected item atom");
436
+ if (word === "none") {
437
+ this.consume("none");
438
+ return { type: "none" };
439
+ }
440
+ if (word === "any_character") {
441
+ this.consume("any_character");
442
+ return { type: "function", name: "any_character" };
443
+ }
444
+ if (word === "any") {
445
+ this.consume("any");
446
+ this.expect("(");
447
+ this.skipWs();
448
+ const inner = this.peek();
449
+ // any("...".."...") or any('...'..'...') — range from string literals
450
+ if (inner === '"' || inner === "'") {
451
+ const lo = this.parseStringLiteral();
452
+ this.skipWs();
453
+ // Check for range: "lo".."hi"
454
+ if (this.src.startsWith("..", this.pos)) {
455
+ this.pos += 2;
456
+ this.skipWs();
457
+ const hi = this.parseStringLiteral();
458
+ this.skipWs();
459
+ this.expect(")");
460
+ return { type: "range", lo, hi };
461
+ }
462
+ this.expect(")");
463
+ // any("abc") — split into per-char string items
464
+ return { type: "set", items: [...lo].map((c) => ({ type: "string", value: c })) };
465
+ }
466
+ if (inner === "[") {
467
+ this.expect("[");
468
+ const items = [];
469
+ for (;;) {
470
+ this.skipWs();
471
+ if (this.peek() === "]")
472
+ break;
473
+ items.push(this.parseItem());
474
+ this.skipWs();
475
+ if (this.peek() === ",")
476
+ this.pos++;
477
+ }
478
+ this.expect("]");
479
+ this.skipWs();
480
+ this.expect(")");
481
+ return { type: "set", items };
482
+ }
483
+ // any(item), any(item + item), any(alias_name), any(range_start..range_end)
484
+ const item = this.parseItem();
485
+ this.skipWs();
486
+ this.expect(")");
487
+ return { type: "set", items: [item] };
488
+ }
489
+ if (word === "capture") {
490
+ this.consume("capture");
491
+ this.expect("(");
492
+ this.skipWs();
493
+ const inner = this.parseItem();
494
+ this.skipWs();
495
+ this.expect(")");
496
+ return { type: "capture_group", inner };
497
+ }
498
+ if (word === "maybe") {
499
+ this.consume("maybe");
500
+ this.expect("(");
501
+ this.skipWs();
502
+ const inner = this.parseItem();
503
+ this.skipWs();
504
+ this.expect(")");
505
+ return { type: "maybe", inner };
506
+ }
507
+ if (word === "some") {
508
+ this.consume("some");
509
+ this.expect("(");
510
+ this.skipWs();
511
+ const inner = this.parseItem();
512
+ this.skipWs();
513
+ this.expect(")");
514
+ return { type: "some", inner };
515
+ }
516
+ if (word === "ref") {
517
+ this.consume("ref");
518
+ this.expect("(");
519
+ this.skipWs();
520
+ const num = this.parseNumber();
521
+ this.skipWs();
522
+ this.expect(")");
523
+ return { type: "capture", index: num };
524
+ }
525
+ if (PRIMITIVES.has(word)) {
526
+ this.consume(word);
527
+ return { type: "primitive", name: word };
528
+ }
529
+ if (FUNCTIONS.has(word)) {
530
+ this.consume(word);
531
+ return { type: "function", name: word };
532
+ }
533
+ // Alias reference
534
+ this.consume(word);
535
+ return { type: "alias_ref", name: word };
536
+ }
537
+ // -- Dependency --
538
+ parseDependency() {
539
+ this.expect("dependency");
540
+ this.skipWs();
541
+ const target = this.parseQuotedString();
542
+ this.skipInlineWs();
543
+ if (this.peekWord() === "as") {
544
+ this.consume("as");
545
+ this.skipWs();
546
+ const aliasName = this.parseIdentifier();
547
+ return { dependency: { target, aliasName } };
548
+ }
549
+ return { dependency: { target } };
550
+ }
551
+ // -- Primitives --
552
+ parseStringLiteral() {
553
+ const c = this.peek();
554
+ if (c === '"')
555
+ return this.parseQuotedString();
556
+ if (c === "'")
557
+ return this.parseSingleQuotedString();
558
+ this.error(`Expected string but got "${this.src.slice(this.pos, this.pos + 20)}"`);
559
+ }
560
+ parseQuotedString() {
561
+ this.expect('"');
562
+ let result = "";
563
+ while (this.pos < this.src.length) {
564
+ const c = this.charAt(this.pos++);
565
+ if (c === '"')
566
+ return result;
567
+ if (c === "\\") {
568
+ const next = this.charAt(this.pos++);
569
+ if (next === "n")
570
+ result += "\n";
571
+ else if (next === "t")
572
+ result += "\t";
573
+ else if (next === "r")
574
+ result += "\r";
575
+ else if (next === '"')
576
+ result += '"';
577
+ else if (next === "\\")
578
+ result += "\\";
579
+ else if (next === "u") {
580
+ const hex = this.src.slice(this.pos, this.pos + 4);
581
+ this.pos += 4;
582
+ result += String.fromCharCode(parseInt(hex, 16));
583
+ }
584
+ else if (next === "{")
585
+ result += "{";
586
+ else if (next === "}")
587
+ result += "}";
588
+ else
589
+ result += next;
590
+ }
591
+ else {
592
+ result += c;
593
+ }
594
+ }
595
+ this.error("Unterminated string");
596
+ }
597
+ parseSingleQuotedString() {
598
+ this.expect("'");
599
+ let result = "";
600
+ while (this.pos < this.src.length && this.charAt(this.pos) !== "'") {
601
+ result += this.charAt(this.pos++);
602
+ }
603
+ this.expect("'");
604
+ return result;
605
+ }
606
+ parseRawText() {
607
+ let result = "";
608
+ let depth = 0;
609
+ while (this.pos < this.src.length) {
610
+ const c = this.charAt(this.pos);
611
+ if (c === "\\") {
612
+ const next = this.charAt(this.pos + 1);
613
+ if (next === "{") {
614
+ result += "{";
615
+ this.pos += 2;
616
+ continue;
617
+ }
618
+ if (next === "}") {
619
+ result += "}";
620
+ this.pos += 2;
621
+ continue;
622
+ }
623
+ }
624
+ if (c === "}" && depth === 0)
625
+ break;
626
+ if (c === "{")
627
+ depth++;
628
+ if (c === "}")
629
+ depth--;
630
+ result += c;
631
+ this.pos++;
632
+ }
633
+ return result.trim();
634
+ }
635
+ parseIdentifier() {
636
+ this.skipWs();
637
+ const start = this.pos;
638
+ while (this.pos < this.src.length && /[\w-]/.test(this.charAt(this.pos))) {
639
+ this.pos++;
640
+ }
641
+ if (this.pos === start)
642
+ this.error("Expected identifier");
643
+ return this.src.slice(start, this.pos);
644
+ }
645
+ parseNumber() {
646
+ const start = this.pos;
647
+ while (this.pos < this.src.length && /\d/.test(this.charAt(this.pos))) {
648
+ this.pos++;
649
+ }
650
+ return parseInt(this.src.slice(start, this.pos), 10);
651
+ }
652
+ parseToNewline() {
653
+ const start = this.pos;
654
+ while (this.pos < this.src.length && this.charAt(this.pos) !== "\n") {
655
+ this.pos++;
656
+ }
657
+ return this.src.slice(start, this.pos);
658
+ }
659
+ // -- Helpers --
660
+ charAt(i) {
661
+ return this.src[i] ?? "";
662
+ }
663
+ peek() {
664
+ return this.charAt(this.pos);
665
+ }
666
+ peekWord() {
667
+ const start = this.pos;
668
+ while (this.pos < this.src.length && /[\w_]/.test(this.charAt(this.pos))) {
669
+ this.pos++;
670
+ }
671
+ const word = this.src.slice(start, this.pos);
672
+ this.pos = start;
673
+ return word;
674
+ }
675
+ expect(s) {
676
+ this.skipWs();
677
+ if (!this.src.startsWith(s, this.pos)) {
678
+ this.error(`Expected "${s}" but got "${this.src.slice(this.pos, this.pos + 20)}"`);
679
+ }
680
+ this.pos += s.length;
681
+ }
682
+ consume(word) {
683
+ if (!this.src.startsWith(word, this.pos)) {
684
+ this.error(`Expected "${word}"`);
685
+ }
686
+ this.pos += word.length;
687
+ }
688
+ skipWs() {
689
+ while (this.pos < this.src.length) {
690
+ const c = this.charAt(this.pos);
691
+ if (/\s/.test(c)) {
692
+ this.pos++;
693
+ continue;
694
+ }
695
+ if (c === "#") {
696
+ this.skipLine();
697
+ continue;
698
+ }
699
+ break;
700
+ }
701
+ }
702
+ skipInlineWs() {
703
+ while (this.pos < this.src.length && /[ \t]/.test(this.charAt(this.pos))) {
704
+ this.pos++;
705
+ }
706
+ }
707
+ skipLine() {
708
+ while (this.pos < this.src.length && this.charAt(this.pos) !== "\n") {
709
+ this.pos++;
710
+ }
711
+ if (this.pos < this.src.length)
712
+ this.pos++;
713
+ }
714
+ skipToNewline() {
715
+ while (this.pos < this.src.length && this.charAt(this.pos) !== "\n") {
716
+ this.pos++;
717
+ }
718
+ }
719
+ isItemAtomStart() {
720
+ const c = this.peek();
721
+ return c === '"' || c === "'" || /[\w]/.test(c);
722
+ }
723
+ isKeyword() {
724
+ const word = this.peekWord();
725
+ return ["to", "from", "before", "after", "not_before", "not_after", "}", "note"].includes(word);
726
+ }
727
+ error(msg) {
728
+ const line = this.src.slice(0, this.pos).split("\n").length;
729
+ const col = this.pos - this.src.lastIndexOf("\n", this.pos);
730
+ const fullMsg = this.filename ? `${this.filename}: ${msg}` : msg;
731
+ throw new IscParseError(fullMsg, this.pos, line, col);
732
+ }
733
+ }
734
+ //# sourceMappingURL=parser.js.map