@lokascript/i18n 2.5.0 → 2.6.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 (73) hide show
  1. package/dist/browser.cjs +1274 -154
  2. package/dist/browser.cjs.map +1 -1
  3. package/dist/browser.d.cts +3 -3
  4. package/dist/browser.d.ts +3 -3
  5. package/dist/browser.js +1274 -155
  6. package/dist/browser.js.map +1 -1
  7. package/dist/dictionaries/index.cjs +364 -133
  8. package/dist/dictionaries/index.cjs.map +1 -1
  9. package/dist/dictionaries/index.d.cts +1 -1
  10. package/dist/dictionaries/index.d.ts +1 -1
  11. package/dist/dictionaries/index.js +364 -133
  12. package/dist/dictionaries/index.js.map +1 -1
  13. package/dist/index.cjs +8860 -7740
  14. package/dist/index.cjs.map +1 -1
  15. package/dist/index.d.cts +3 -3
  16. package/dist/index.d.ts +3 -3
  17. package/dist/index.js +8860 -7741
  18. package/dist/index.js.map +1 -1
  19. package/dist/lokascript-i18n.min.js +1 -1
  20. package/dist/lokascript-i18n.min.js.map +1 -1
  21. package/dist/lokascript-i18n.mjs +1697 -146
  22. package/dist/lokascript-i18n.mjs.map +1 -1
  23. package/dist/plugins/vite.cjs +359 -132
  24. package/dist/plugins/vite.cjs.map +1 -1
  25. package/dist/plugins/vite.js +359 -132
  26. package/dist/plugins/vite.js.map +1 -1
  27. package/dist/plugins/webpack.cjs +359 -132
  28. package/dist/plugins/webpack.cjs.map +1 -1
  29. package/dist/plugins/webpack.js +359 -132
  30. package/dist/plugins/webpack.js.map +1 -1
  31. package/dist/{transformer-BLv389qz.d.ts → transformer-BA8YX9u1.d.ts} +120 -2
  32. package/dist/{transformer-PFsYELrc.d.cts → transformer-DM7iplCU.d.cts} +120 -2
  33. package/dist/{types-BcALAO6h.d.cts → types-BYtpqGq3.d.cts} +1 -1
  34. package/dist/{types-BcALAO6h.d.ts → types-BYtpqGq3.d.ts} +1 -1
  35. package/package.json +6 -6
  36. package/src/browser.ts +1 -0
  37. package/src/command-primary-roles.test.ts +59 -0
  38. package/src/constants.ts +51 -0
  39. package/src/dictionaries/ar.ts +8 -3
  40. package/src/dictionaries/bn.ts +3 -1
  41. package/src/dictionaries/de.ts +19 -4
  42. package/src/dictionaries/derive.ts +4 -0
  43. package/src/dictionaries/en.ts +9 -0
  44. package/src/dictionaries/es.ts +2 -2
  45. package/src/dictionaries/fr.ts +6 -2
  46. package/src/dictionaries/he.ts +7 -1
  47. package/src/dictionaries/hi.ts +17 -10
  48. package/src/dictionaries/id.ts +15 -8
  49. package/src/dictionaries/it.ts +6 -3
  50. package/src/dictionaries/ja.ts +10 -4
  51. package/src/dictionaries/ko.ts +9 -4
  52. package/src/dictionaries/ms.ts +2 -1
  53. package/src/dictionaries/pl.ts +11 -3
  54. package/src/dictionaries/pt.ts +10 -4
  55. package/src/dictionaries/qu.ts +46 -22
  56. package/src/dictionaries/ru.ts +14 -7
  57. package/src/dictionaries/sw.ts +37 -10
  58. package/src/dictionaries/th.ts +3 -1
  59. package/src/dictionaries/tl.ts +14 -7
  60. package/src/dictionaries/tr.ts +22 -9
  61. package/src/dictionaries/uk.ts +13 -7
  62. package/src/dictionaries/vi.ts +3 -3
  63. package/src/dictionaries/zh.ts +10 -2
  64. package/src/examples/new-languages.ts +1 -1
  65. package/src/grammar/grammar.test.ts +1242 -1
  66. package/src/grammar/index.ts +1 -0
  67. package/src/grammar/profiles/index.ts +358 -12
  68. package/src/grammar/transformer.ts +1053 -16
  69. package/src/grammar/types.ts +22 -1
  70. package/src/index.ts +1 -0
  71. package/src/new-languages.test.ts +7 -3
  72. package/src/parser/parser-integration.test.ts +5 -1
  73. package/src/positional-keyword-drift.test.ts +138 -0
@@ -61,6 +61,13 @@ var en = {
61
61
  increment: "increment",
62
62
  decrement: "decrement",
63
63
  default: "default",
64
+ // Reactivity Commands
65
+ bind: "bind",
66
+ // Realtime / service-worker Commands
67
+ eventsource: "eventsource",
68
+ socket: "socket",
69
+ worker: "worker",
70
+ intercept: "intercept",
64
71
  // Navigation Commands
65
72
  go: "go",
66
73
  pushUrl: "pushUrl",
@@ -295,7 +302,8 @@ var es = {
295
302
  swap: "intercambiar",
296
303
  morph: "transformar",
297
304
  settle: "estabilizar",
298
- append: "a\xF1adir",
305
+ append: "anexar",
306
+ // profile primary; 'añadir' is add's word (parsed as add)
299
307
  exit: "salir",
300
308
  install: "instalar",
301
309
  breakpoint: "punto-interrupci\xF3n",
@@ -428,7 +436,7 @@ var es = {
428
436
  prev: "ant",
429
437
  at: "en",
430
438
  random: "aleatorio",
431
- closest: "m\xE1scercano",
439
+ closest: "cercano",
432
440
  parent: "padre",
433
441
  children: "hijos",
434
442
  within: "dentro",
@@ -462,9 +470,11 @@ var ko = {
462
470
  hide: "\uC228\uAE30\uB2E4",
463
471
  show: "\uBCF4\uC774\uB2E4",
464
472
  if: "\uB9CC\uC57D",
465
- unless: "\uC544\uB2C8\uBA74",
473
+ unless: "\uC544\uB2C8\uB77C\uBA74",
474
+ // distinct from else `아니면` (line ~131) — was a homonym
466
475
  repeat: "\uBC18\uBCF5",
467
- for: "\uB3D9\uC548",
476
+ for: "\uAC01\uAC01",
477
+ // profile's for word — 동안 is while (collision)
468
478
  while: "\uB3D9\uC548",
469
479
  until: "\uAE4C\uC9C0",
470
480
  continue: "\uACC4\uC18D",
@@ -495,8 +505,12 @@ var ko = {
495
505
  swap: "\uAD50\uD658",
496
506
  morph: "\uBCC0\uD615",
497
507
  settle: "\uC548\uC815",
498
- append: "\uCD94\uAC00",
499
- exit: "\uC885\uB8CC",
508
+ append: "\uB367\uBD99\uC774\uB2E4",
509
+ // profile primary; '추가' is add's word (parsed as add)
510
+ // 종료 → 나가기: realigned to the semantic profile primary (ko.ts `exit: 나가기`,
511
+ // whose comment already flags the 종료 end-collision). Rendered as 종료 it
512
+ // tokenized as a plain identifier, so a guard-clause `exit` never parsed.
513
+ exit: "\uB098\uAC00\uAE30",
500
514
  install: "\uC124\uCE58",
501
515
  breakpoint: "\uC911\uB2E8\uC810",
502
516
  clear: "\uC9C0\uC6B0\uAE30",
@@ -504,7 +518,8 @@ var ko = {
504
518
  open: "\uC5F4\uAE30",
505
519
  select: "\uC120\uD0DD",
506
520
  clone: "\uBCF5\uC81C",
507
- prepend: "\uC55E\uC5D0\uCD94\uAC00"
521
+ prepend: "\uC55E\uC5D0\uCD94\uAC00",
522
+ socket: "\uC18C\uCF13"
508
523
  },
509
524
  modifiers: {
510
525
  to: "\uC5D0",
@@ -571,6 +586,7 @@ var ko = {
571
586
  otherwise: "\uADF8\uB807\uC9C0\uC54A\uC73C\uBA74",
572
587
  end: "\uB05D",
573
588
  live: "\uB77C\uC774\uBE0C",
589
+ bind: "\uBC14\uC778\uB4DC",
574
590
  changes: "\uBCC0\uACBD\uB418\uBA74"
575
591
  },
576
592
  temporal: {
@@ -652,7 +668,11 @@ var zh = {
652
668
  tell: "\u544A\u8BC9",
653
669
  trigger: "\u89E6\u53D1",
654
670
  send: "\u53D1\u9001",
655
- take: "\u83B7\u53D6",
671
+ // `拿取` (the semantic zh profile's take primary), not `获取` — `获取` is the
672
+ // profile's GET primary, so emitting it for take made `take …` parse as get
673
+ // (take-class-from-siblings: phantom get, take dropped). Exposed by the get-zh-ba
674
+ // pattern; same dict↔profile homonym family as pl get/fetch.
675
+ take: "\u62FF\u53D6",
656
676
  put: "\u653E\u7F6E",
657
677
  set: "\u8BBE\u7F6E",
658
678
  get: "\u83B7\u5F97",
@@ -671,7 +691,10 @@ var zh = {
671
691
  break: "\u4E2D\u65AD",
672
692
  halt: "\u505C\u6B62",
673
693
  wait: "\u7B49\u5F85",
674
- fetch: "\u83B7\u53D6",
694
+ // 抓取 (zhuāqǔ, "grab/scrape") is the semantic zh profile's `fetch` primary;
695
+ // 获取 (huòqǔ) is its `get` primary, so emitting 获取 here made the semantic
696
+ // parser read a transformed `fetch` as `get`. See ZH_BLOCK_BODY_SCOPE.md #3.
697
+ fetch: "\u6293\u53D6",
675
698
  call: "\u8C03\u7528",
676
699
  return: "\u8FD4\u56DE",
677
700
  make: "\u5236\u4F5C",
@@ -771,6 +794,7 @@ var zh = {
771
794
  otherwise: "\u8981\u4E0D\u7136",
772
795
  end: "\u7ED3\u675F",
773
796
  live: "\u5B9E\u65F6",
797
+ bind: "\u7ED1\u5B9A",
774
798
  changes: "\u6539\u53D8\u65F6"
775
799
  },
776
800
  temporal: {
@@ -859,6 +883,9 @@ var fr = {
859
883
  add: "ajouter",
860
884
  remove: "supprimer",
861
885
  toggle: "basculer",
886
+ // command blur (the events section has the blur EVENT word; without this
887
+ // entry the transformer fell back to it and no profile read it as the verb)
888
+ blur: "d\xE9focaliser",
862
889
  hide: "cacher",
863
890
  show: "montrer",
864
891
  if: "si",
@@ -895,7 +922,8 @@ var fr = {
895
922
  swap: "\xE9changer",
896
923
  morph: "transformer",
897
924
  settle: "stabiliser",
898
- append: "ajouter",
925
+ append: "annexer",
926
+ // profile primary; 'ajouter' is add's word (parsed as add)
899
927
  exit: "sortir",
900
928
  install: "installer",
901
929
  breakpoint: "point-arr\xEAt",
@@ -904,7 +932,8 @@ var fr = {
904
932
  open: "ouvrir",
905
933
  select: "s\xE9lectionner",
906
934
  clone: "cloner",
907
- prepend: "pr\xE9fixer"
935
+ prepend: "pr\xE9fixer",
936
+ focus: "focaliser"
908
937
  },
909
938
  modifiers: {
910
939
  to: "\xE0",
@@ -1028,7 +1057,7 @@ var fr = {
1028
1057
  prev: "pr\xE9c",
1029
1058
  at: "\xE0",
1030
1059
  random: "al\xE9atoire",
1031
- closest: "plusproche",
1060
+ closest: "proche",
1032
1061
  parent: "parent",
1033
1062
  children: "enfants",
1034
1063
  within: "dans",
@@ -1059,9 +1088,17 @@ var de = {
1059
1088
  add: "hinzuf\xFCgen",
1060
1089
  remove: "entfernen",
1061
1090
  toggle: "umschalten",
1091
+ // command blur (the events section has the blur EVENT word; without this
1092
+ // entry the transformer fell back to it and no profile read it as the verb)
1093
+ blur: "defokussieren",
1062
1094
  hide: "verstecken",
1063
1095
  show: "zeigen",
1064
- if: "wenn",
1096
+ // Align with the semantic German profile's `if` primary (`falls`). The previous
1097
+ // `wenn` collides with the profile's `when` keyword (German `wenn` = both
1098
+ // "if" and "when"), so a transformed `if` resolved to `when` and the conditional
1099
+ // wrapper never formed (`if`/`put` dropped). Same dict↔profile alignment as id
1100
+ // `toggle` / get-value. `when` is unaffected (separate dict entry).
1101
+ if: "falls",
1065
1102
  unless: "wennnicht",
1066
1103
  repeat: "wiederholen",
1067
1104
  for: "f\xFCr",
@@ -1071,7 +1108,7 @@ var de = {
1071
1108
  break: "unterbrechen",
1072
1109
  halt: "anhalten",
1073
1110
  wait: "warten",
1074
- fetch: "holen",
1111
+ fetch: "abrufen",
1075
1112
  call: "aufrufen",
1076
1113
  return: "zur\xFCckgeben",
1077
1114
  make: "erstellen",
@@ -1099,12 +1136,14 @@ var de = {
1099
1136
  exit: "beenden",
1100
1137
  install: "installieren",
1101
1138
  breakpoint: "haltepunkt",
1102
- clear: "l\xF6schen",
1139
+ clear: "bereinigen",
1140
+ // löschen is a remove alternative in the profile
1103
1141
  close: "schlie\xDFen",
1104
1142
  open: "\xF6ffnen",
1105
1143
  select: "ausw\xE4hlen",
1106
1144
  clone: "klonen",
1107
- prepend: "voranstellen"
1145
+ prepend: "voranstellen",
1146
+ focus: "fokussieren"
1108
1147
  },
1109
1148
  modifiers: {
1110
1149
  to: "zu",
@@ -1228,7 +1267,13 @@ var de = {
1228
1267
  prev: "vorh",
1229
1268
  at: "bei",
1230
1269
  random: "zuf\xE4llig",
1231
- closest: "n\xE4chste",
1270
+ // `nächste` already serves `next` (line above). German `nächste` is
1271
+ // genuinely ambiguous (next/nearest), so emitting it for `closest` too
1272
+ // collided: the semantic tokenizer normalizes `nächste`→next (a deliberate
1273
+ // last-wins choice — see german.ts), and a closest reading is impossible to
1274
+ // recover. Use the unambiguous `nächstgelegene` ("nearest-located") for
1275
+ // closest so the two readings stay distinct end-to-end.
1276
+ closest: "n\xE4chstgelegene",
1232
1277
  parent: "elternteil",
1233
1278
  children: "kinder",
1234
1279
  within: "innerhalb",
@@ -1262,7 +1307,8 @@ var ja = {
1262
1307
  hide: "\u96A0\u3059",
1263
1308
  show: "\u8868\u793A",
1264
1309
  if: "\u3082\u3057",
1265
- unless: "\u3067\u306A\u3051\u308C\u3070",
1310
+ unless: "\u306A\u3044\u9650\u308A",
1311
+ // not でなければ — leading で particle shatters the marker
1266
1312
  repeat: "\u7E70\u308A\u8FD4\u3057",
1267
1313
  for: "\u305F\u3081\u306B",
1268
1314
  while: "\u306E\u9593",
@@ -1271,7 +1317,7 @@ var ja = {
1271
1317
  break: "\u4E2D\u65AD",
1272
1318
  halt: "\u505C\u6B62",
1273
1319
  wait: "\u5F85\u3064",
1274
- fetch: "\u53D6\u5F97",
1320
+ fetch: "\u30D5\u30A7\u30C3\u30C1",
1275
1321
  call: "\u547C\u3073\u51FA\u3057",
1276
1322
  return: "\u623B\u308B",
1277
1323
  make: "\u4F5C\u308B",
@@ -1296,7 +1342,11 @@ var ja = {
1296
1342
  morph: "\u5909\u5F62",
1297
1343
  settle: "\u5B89\u5B9A",
1298
1344
  append: "\u672B\u5C3E\u8FFD\u52A0",
1299
- exit: "\u7D42\u4E86",
1345
+ // 終了 → 退出: realigned to the semantic profile primary (ja.ts `exit: 退出`).
1346
+ // 終了 was the historic exit/end collision word (see isEndKeyword's ja note);
1347
+ // rendered as 終了 it tokenized as a plain identifier, so a guard-clause
1348
+ // `exit` inside `if … end` never parsed (behavior-sortable ja).
1349
+ exit: "\u9000\u51FA",
1300
1350
  install: "\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB",
1301
1351
  breakpoint: "\u30D6\u30EC\u30FC\u30AF\u30DD\u30A4\u30F3\u30C8",
1302
1352
  clear: "\u30AF\u30EA\u30A2",
@@ -1304,7 +1354,8 @@ var ja = {
1304
1354
  open: "\u958B\u304F",
1305
1355
  select: "\u9078\u629E",
1306
1356
  clone: "\u8907\u88FD",
1307
- prepend: "\u5148\u982D\u8FFD\u52A0"
1357
+ prepend: "\u5148\u982D\u8FFD\u52A0",
1358
+ socket: "\u30BD\u30B1\u30C3\u30C8"
1308
1359
  },
1309
1360
  modifiers: {
1310
1361
  to: "\u306B",
@@ -1353,7 +1404,7 @@ var ja = {
1353
1404
  touchcancel: "\u30BF\u30C3\u30C1\u30AD\u30E3\u30F3\u30BB\u30EB"
1354
1405
  },
1355
1406
  logical: {
1356
- when: "\u3068\u304D",
1407
+ when: "\u6642",
1357
1408
  where: "\u3069\u3053",
1358
1409
  and: "\u305D\u3057\u3066",
1359
1410
  or: "\u307E\u305F\u306F",
@@ -1371,6 +1422,7 @@ var ja = {
1371
1422
  otherwise: "\u305D\u3046\u3067\u306A\u3051\u308C\u3070",
1372
1423
  end: "\u7D42\u308F\u308A",
1373
1424
  live: "\u30E9\u30A4\u30D6",
1425
+ bind: "\u30D0\u30A4\u30F3\u30C9",
1374
1426
  changes: "\u5909\u308F\u3063\u305F\u3089"
1375
1427
  },
1376
1428
  temporal: {
@@ -1462,7 +1514,10 @@ var ar = {
1462
1514
  hide: "\u0627\u062E\u0641",
1463
1515
  show: "\u0627\u0638\u0647\u0631",
1464
1516
  if: "\u0625\u0630\u0627",
1465
- unless: "\u0625\u0644\u0627 \u0625\u0630\u0627",
1517
+ // Single-token form: the semantic ar tokenizer splits the two-word `إلا إذا`
1518
+ // into `إلا` + `إذا`(if), which derails the `unless` block. `إلا` alone is the
1519
+ // conventional Arabic shorthand and matches the ar profile's unless keyword.
1520
+ unless: "\u0625\u0644\u0627",
1466
1521
  repeat: "\u0643\u0631\u0631",
1467
1522
  for: "\u0644\u0643\u0644",
1468
1523
  while: "\u0628\u064A\u0646\u0645\u0627",
@@ -1492,19 +1547,22 @@ var ar = {
1492
1547
  js: "\u062C\u0627\u0641\u0627\u0633\u0643\u0631\u0628\u062A",
1493
1548
  async: "\u0645\u062A\u0632\u0627\u0645\u0646",
1494
1549
  render: "\u0627\u0631\u0633\u0645",
1495
- swap: "\u0628\u062F\u0651\u0644",
1550
+ swap: "\u0627\u0633\u062A\u0628\u062F\u0644",
1551
+ // profile primary; 'بدّل' is toggle's word (parsed as toggle)
1496
1552
  morph: "\u062D\u0648\u0651\u0644",
1497
1553
  settle: "\u0627\u0633\u062A\u0642\u0631",
1498
1554
  append: "\u0623\u0644\u062D\u0642",
1499
1555
  exit: "\u0627\u062E\u0631\u062C",
1500
1556
  install: "\u062B\u0628\u0651\u062A",
1501
1557
  breakpoint: "\u0646\u0642\u0637\u0629-\u062A\u0648\u0642\u0641",
1502
- clear: "\u0627\u0645\u0633\u062D",
1558
+ clear: "\u0646\u0638\u0651\u0641",
1559
+ // امسح is a remove alternative in the profile
1503
1560
  close: "\u0623\u063A\u0644\u0642",
1504
1561
  open: "\u0627\u0641\u062A\u062D",
1505
1562
  select: "\u0627\u062E\u062A\u0631",
1506
1563
  clone: "\u0627\u0633\u062A\u0646\u0633\u062E",
1507
- prepend: "\u0633\u0628\u0642"
1564
+ prepend: "\u0633\u0628\u0642",
1565
+ socket: "\u0645\u0642\u0628\u0633"
1508
1566
  },
1509
1567
  modifiers: {
1510
1568
  to: "\u0625\u0644\u0649",
@@ -1571,6 +1629,7 @@ var ar = {
1571
1629
  otherwise: "\u062E\u0644\u0627\u0641 \u0630\u0644\u0643",
1572
1630
  end: "\u0627\u0644\u0646\u0647\u0627\u064A\u0629",
1573
1631
  live: "\u062D\u064A",
1632
+ bind: "\u0627\u0631\u0628\u0637",
1574
1633
  changes: "\u064A\u062A\u063A\u064A\u0631"
1575
1634
  },
1576
1635
  temporal: {
@@ -1652,7 +1711,8 @@ var tr = {
1652
1711
  tell: "s\xF6yle",
1653
1712
  trigger: "tetikle",
1654
1713
  send: "g\xF6nder",
1655
- take: "al",
1714
+ take: "tut",
1715
+ // auditor: dict emitted a word the profile reads differently
1656
1716
  put: "koy",
1657
1717
  set: "ayarla",
1658
1718
  get: "al",
@@ -1665,7 +1725,11 @@ var tr = {
1665
1725
  unless: "de\u011Filse",
1666
1726
  repeat: "tekrarla",
1667
1727
  for: "i\xE7in",
1668
- while: "iken",
1728
+ // `süresince` (the semantic tr profile's while primary), not `iken`: `iken`
1729
+ // is the profile's WHEN primary (logical.when below also emits it), so a
1730
+ // fronted repeat-while head tokenized as `when` and the condition dropped
1731
+ // wholesale. Same dict↔profile homonym disambiguation as pl get/pobierz.
1732
+ while: "s\xFCresince",
1669
1733
  until: "kadar",
1670
1734
  continue: "devam",
1671
1735
  break: "dur",
@@ -1695,7 +1759,8 @@ var tr = {
1695
1759
  swap: "takas",
1696
1760
  morph: "d\xF6n\xFC\u015Ft\xFCr",
1697
1761
  settle: "sabitlen",
1698
- append: "ekle",
1762
+ append: "ili\u015Ftir",
1763
+ // profile primary; 'ekle' is add's word (parsed as add)
1699
1764
  exit: "\xE7\u0131k",
1700
1765
  install: "kur",
1701
1766
  breakpoint: "kesme-noktas\u0131",
@@ -1704,7 +1769,8 @@ var tr = {
1704
1769
  open: "a\xE7",
1705
1770
  select: "se\xE7",
1706
1771
  clone: "klonla",
1707
- prepend: "ba\u015F\u0131naekle"
1772
+ prepend: "ba\u015F\u0131naekle",
1773
+ socket: "soket"
1708
1774
  },
1709
1775
  modifiers: {
1710
1776
  to: "e",
@@ -1727,8 +1793,11 @@ var tr = {
1727
1793
  events: {
1728
1794
  click: "t\u0131klama",
1729
1795
  dblclick: "\xE7ift_t\u0131klama",
1730
- mousedown: "fare_bas",
1731
- mouseup: "fare_b\u0131rak",
1796
+ // Fused (no `_`): the semantic tokenizer splits on `_`, breaking event
1797
+ // recognition (mousedown → "bas" / mouseup mis-captured). Mirrors the #535
1798
+ // ru/uk fuse + #510 resize fix.
1799
+ mousedown: "farebas",
1800
+ mouseup: "fareb\u0131rak",
1732
1801
  mouseenter: "fare_gir",
1733
1802
  mouseleave: "fare_\xE7\u0131k",
1734
1803
  mouseover: "fare_\xFCst\xFC",
@@ -1745,7 +1814,7 @@ var tr = {
1745
1814
  reset: "s\u0131f\u0131rla",
1746
1815
  load: "y\xFCkle",
1747
1816
  unload: "y\xFCkle_kald\u0131r",
1748
- resize: "boyut_de\u011Fi\u015Ftir",
1817
+ resize: "boyutland\u0131rma",
1749
1818
  scroll: "kayd\u0131r",
1750
1819
  touchstart: "dokunma_ba\u015Fla",
1751
1820
  touchend: "dokunma_bitir",
@@ -1766,7 +1835,7 @@ var tr = {
1766
1835
  equals: "e\u015Fittir",
1767
1836
  has: "var",
1768
1837
  have: "var",
1769
- then: "sonra",
1838
+ then: "ard\u0131ndan",
1770
1839
  else: "yoksa",
1771
1840
  otherwise: "aksi_halde",
1772
1841
  end: "son",
@@ -1822,13 +1891,18 @@ var tr = {
1822
1891
  },
1823
1892
  expressions: {
1824
1893
  first: "ilk",
1825
- last: "son",
1894
+ // 'son' is also the END keyword emission (block terminator), and the
1895
+ // parser's end-recognizers match it by value — so a positional `last`
1896
+ // emission of 'son' terminated the enclosing block mid-condition
1897
+ // (focus-trap's `eşleşir son <button/>` dropped the branch body; the sw
1898
+ // mwisho class). 'sonuncu' ("the last one") is unambiguous.
1899
+ last: "sonuncu",
1826
1900
  next: "sonraki",
1827
1901
  previous: "\xF6nceki",
1828
1902
  prev: "\xF6nc",
1829
1903
  at: "de",
1830
1904
  random: "rastgele",
1831
- closest: "en_yak\u0131n",
1905
+ closest: "enyak\u0131n",
1832
1906
  parent: "ebeveyn",
1833
1907
  children: "\xE7ocuklar",
1834
1908
  within: "i\xE7inde",
@@ -1858,7 +1932,7 @@ var id = {
1858
1932
  get: "dapatkan",
1859
1933
  add: "tambah",
1860
1934
  remove: "hapus",
1861
- toggle: "ganti",
1935
+ toggle: "alihkan",
1862
1936
  hide: "sembunyikan",
1863
1937
  show: "tampilkan",
1864
1938
  if: "jika",
@@ -1871,7 +1945,10 @@ var id = {
1871
1945
  break: "hentikan",
1872
1946
  halt: "berhenti",
1873
1947
  wait: "tunggu",
1874
- fetch: "ambil",
1948
+ // profile primary; 'ambil' is take's word — emitting it for fetch made every
1949
+ // fetch parse as take once the fused take-event pattern came alive (the de
1950
+ // holen/abrufen bug class)
1951
+ fetch: "muat",
1875
1952
  call: "panggil",
1876
1953
  return: "kembali",
1877
1954
  make: "buat",
@@ -1880,7 +1957,11 @@ var id = {
1880
1957
  catch: "tangkap",
1881
1958
  measure: "ukur",
1882
1959
  transition: "transisi",
1883
- increment: "tambahkan",
1960
+ // naikkan (raise), not tambahkan — tambahkan is the semantic profile's
1961
+ // `add` alternative, so emitting it made increment-counter parse as ADD
1962
+ // (the #373 collision family). naikkan is the profile's increment
1963
+ // alternative, pairing naturally with the decrement side.
1964
+ increment: "naikkan",
1884
1965
  decrement: "kurangi",
1885
1966
  default: "bawaan",
1886
1967
  go: "pergi",
@@ -1891,15 +1972,20 @@ var id = {
1891
1972
  beep: "bunyi",
1892
1973
  js: "js",
1893
1974
  async: "asinkron",
1894
- render: "tampilkan",
1975
+ render: "olah",
1976
+ // auditor: dict emitted a word the profile reads differently
1895
1977
  swap: "tukar",
1896
- morph: "ubah_bentuk",
1897
- settle: "stabil",
1898
- append: "tambah_akhir",
1978
+ morph: "ubah",
1979
+ // auditor: dict emitted a word the profile reads differently
1980
+ settle: "stabilkan",
1981
+ // auditor: dict emitted a word the profile reads differently
1982
+ append: "sisipkan",
1983
+ // profile primary; 'tambah_akhir' splits and is unrecognized
1899
1984
  exit: "keluar",
1900
1985
  install: "pasang",
1901
1986
  breakpoint: "titik-henti",
1902
- clear: "hapus",
1987
+ clear: "bersihkan",
1988
+ // hapus is the remove PRIMARY in the profile
1903
1989
  close: "tutup",
1904
1990
  open: "buka",
1905
1991
  select: "pilih",
@@ -2052,20 +2138,34 @@ var qu = {
2052
2138
  tell: "niy",
2053
2139
  trigger: "kichay",
2054
2140
  send: "kachay",
2055
- take: "hurquy",
2141
+ take: "hapiy",
2142
+ // auditor: dict emitted a word the profile reads differently
2056
2143
  put: "churay",
2057
- set: "churay",
2058
- get: "chaskiy",
2144
+ // churay is the semantic qu profile's `put` primary; `set` is churanay. Emitting
2145
+ // churay for set made the semantic parser read a transformed `set` as `put`.
2146
+ // See ZH_BLOCK_BODY_SCOPE.md (#2 sweep — keyword realignment, cf. zh fetch).
2147
+ set: "churanay",
2148
+ // Align with the semantic quechua profile's `get` primary (`taripay`); the
2149
+ // previous `chaskiy` had no profile entry, so the transformed `get` dropped
2150
+ // (get-value parsed degenerate). Same dict↔profile alignment as id `toggle`.
2151
+ get: "taripay",
2059
2152
  add: "yapay",
2060
2153
  remove: "qichuy",
2061
2154
  toggle: "tikray",
2062
2155
  hide: "pakay",
2063
2156
  show: "rikuchiy",
2064
2157
  if: "sichus",
2065
- unless: "mana_sichus",
2066
- repeat: "kutichiy",
2067
- for: "rayku",
2068
- while: "kay_kaq",
2158
+ unless: "mana sichus",
2159
+ // spaced phrase ("if not"); `_` form split to `mana`+`sichus`(=if) at parse time
2160
+ repeat: "kutipay",
2161
+ for: "sapankaq",
2162
+ // profile's for word — rayku doubles as `by`
2163
+ // `kaykamaqa` (the semantic qu profile's while primary), not `kay_kaq`: the
2164
+ // `_` form is unknown to the profile (and `_` words split at parse time, cf.
2165
+ // qhipaman_yapay), so the fronted repeat-while head never formed a `while`
2166
+ // node — the condition dropped wholesale. Same dict↔profile alignment as
2167
+ // vi render / de abrufen.
2168
+ while: "kaykamaqa",
2069
2169
  until: "hayk_akama",
2070
2170
  continue: "purichiy",
2071
2171
  break: "p_akiy",
@@ -2075,12 +2175,18 @@ var qu = {
2075
2175
  call: "qayay",
2076
2176
  return: "kutimuy",
2077
2177
  make: "ruray",
2078
- log: "qillqay",
2178
+ // qillqay is the semantic qu profile's `copy` primary; `log` is qillqakuy.
2179
+ // Emitting qillqay for log made the parser read every transformed log as
2180
+ // copy (log-value/log-element/get-value lossy) — same realign as set above.
2181
+ log: "qillqakuy",
2079
2182
  throw: "wikchuy",
2080
2183
  catch: "hapsiy",
2081
2184
  measure: "tupuy",
2082
- transition: "tikray",
2083
- increment: "yapay",
2185
+ // pasay, not tikray: the semantic qu profile's toggle keyword is
2186
+ // t'ikray/tikray, so a tikray render collided with toggle and the
2187
+ // transition command never anchored (sw kama precedent, #569).
2188
+ transition: "pasay",
2189
+ increment: "yapachiy",
2084
2190
  decrement: "pisiyachiy",
2085
2191
  default: "\xF1awpaq_kaq",
2086
2192
  go: "riy",
@@ -2091,20 +2197,26 @@ var qu = {
2091
2197
  beep: "waqay",
2092
2198
  js: "js",
2093
2199
  async: "mana_suyaspa",
2094
- render: "rikuchiy",
2095
- swap: "rantin_tikray",
2096
- morph: "tikrachiy",
2097
- settle: "tiyay",
2098
- append: "qhipaman_yapay",
2200
+ render: "rikurichiy",
2201
+ // auditor: dict emitted a word the profile reads differently
2202
+ swap: "t'inkuy",
2203
+ // profile primary; 'rantin_tikray' splits, 'tikray' is toggle's word
2204
+ morph: "tukunay",
2205
+ // auditor: dict emitted a word the profile reads differently
2206
+ settle: "tiyakuy",
2207
+ // auditor: dict emitted a word the profile reads differently
2208
+ append: "qatichiy",
2209
+ // profile's append primary (single token); `qhipaman_yapay` `_`-split to qhipaman+yapay(=add) at parse time
2099
2210
  exit: "lluqsiy",
2100
- install: "churay",
2211
+ install: "tarpuy",
2101
2212
  breakpoint: "sayachinay",
2102
2213
  clear: "pichay",
2103
2214
  close: "wichqay",
2104
2215
  open: "kichay",
2105
2216
  select: "akllay",
2106
2217
  clone: "kikinchay",
2107
- prepend: "\xF1awpachiy"
2218
+ prepend: "\xF1awpachiy",
2219
+ socket: "tinkina"
2108
2220
  },
2109
2221
  modifiers: {
2110
2222
  to: "man",
@@ -2127,8 +2239,10 @@ var qu = {
2127
2239
  events: {
2128
2240
  click: "\xF1itiy",
2129
2241
  dblclick: "iskay_\xF1itiy",
2130
- mousedown: "rat_\xF1itiy",
2131
- mouseup: "rat_huqariy",
2242
+ // Fused (no `_`): the semantic tokenizer splits on `_` — and `rat_ñitiy` then
2243
+ // mis-captured as the `click` event (ñitiy→click). Mirrors the #535 ru/uk fuse.
2244
+ mousedown: "rat\xF1itiy",
2245
+ mouseup: "rathuqariy",
2132
2246
  mouseenter: "rat_yaykuy",
2133
2247
  mouseleave: "rat_lluqsiy",
2134
2248
  mouseover: "rat_hawapi",
@@ -2167,7 +2281,11 @@ var qu = {
2167
2281
  has: "kachkan",
2168
2282
  have: "kachkani",
2169
2283
  then: "chayqa",
2170
- else: "mana_chayqa",
2284
+ // Align to the semantic profile's else word `manachus`. The old `mana_chayqa`
2285
+ // tokenized as `mana`(false) + `_` + `chayqa`(then) — no else keyword formed,
2286
+ // so qu conditionals never split their else branch. `manachus` is a single
2287
+ // token the profile-derived keyword map reads as `else` (dict↔profile align).
2288
+ else: "manachus",
2171
2289
  otherwise: "huk_kaqpi",
2172
2290
  end: "tukuy",
2173
2291
  live: "kawsay",
@@ -2190,7 +2308,7 @@ var qu = {
2190
2308
  values: {
2191
2309
  true: "cheqaq",
2192
2310
  false: "llulla",
2193
- null: "ch_usaq",
2311
+ null: "chusaq",
2194
2312
  undefined: "mana_riqsisqa",
2195
2313
  it: "chay",
2196
2314
  its: "chaypaq",
@@ -2228,12 +2346,12 @@ var qu = {
2228
2346
  prev: "\xF1awpaq",
2229
2347
  at: "pi",
2230
2348
  random: "imaymanata",
2231
- closest: "aswan_kaylla",
2349
+ closest: "kaylla",
2232
2350
  parent: "mama_tayta",
2233
2351
  children: "wawakuna",
2234
2352
  within: "ukupi",
2235
2353
  no: "mana_kanchu",
2236
- empty: "ch_usaq",
2354
+ empty: "chusaq",
2237
2355
  some: "wakin",
2238
2356
  "starts with": "qallarisqa wan",
2239
2357
  "ends with": "tukusqa wan",
@@ -2254,11 +2372,17 @@ var sw = {
2254
2372
  send: "tuma",
2255
2373
  take: "chukua",
2256
2374
  put: "weka",
2257
- set: "weka",
2375
+ // weka is the semantic sw profile's `put` primary; `set` is seti. Emitting weka
2376
+ // for set made the semantic parser read a transformed `set` as `put`.
2377
+ // See ZH_BLOCK_BODY_SCOPE.md (#2 sweep — keyword realignment, cf. zh fetch).
2378
+ set: "seti",
2258
2379
  get: "pata",
2259
2380
  add: "ongeza",
2260
2381
  remove: "ondoa",
2261
2382
  toggle: "badilisha",
2383
+ // command blur (the events section has the blur EVENT word; without this
2384
+ // entry the transformer fell back to it and no profile read it as the verb)
2385
+ blur: "blur",
2262
2386
  hide: "ficha",
2263
2387
  show: "onyesha",
2264
2388
  if: "kama",
@@ -2274,13 +2398,14 @@ var sw = {
2274
2398
  fetch: "leta",
2275
2399
  call: "ita",
2276
2400
  return: "rudi",
2277
- make: "fanya",
2401
+ make: "tengeneza",
2402
+ // auditor: dict emitted a word the profile reads differently
2278
2403
  log: "andika",
2279
2404
  throw: "tupa",
2280
2405
  catch: "shika",
2281
2406
  measure: "pima",
2282
2407
  transition: "mpito",
2283
- increment: "ongeza",
2408
+ increment: "ongezeko",
2284
2409
  decrement: "punguza",
2285
2410
  default: "msingi",
2286
2411
  go: "nenda",
@@ -2293,18 +2418,23 @@ var sw = {
2293
2418
  async: "sainkroni",
2294
2419
  render: "chora",
2295
2420
  swap: "badilishana",
2296
- morph: "badilishaUmbo",
2421
+ morph: "geuza",
2422
+ // auditor: dict emitted a word the profile reads differently
2297
2423
  settle: "tulia",
2298
- append: "ongezaMwisho",
2424
+ append: "ambatanisha",
2425
+ // profile primary; 'ongezaMwisho' is unrecognized
2299
2426
  exit: "toka",
2300
2427
  install: "sakinisha",
2301
2428
  breakpoint: "nukta-simama",
2302
- clear: "futa",
2429
+ clear: "safisha",
2430
+ // futa is a remove alternative in the profile
2303
2431
  close: "funga",
2304
2432
  open: "fungua",
2305
2433
  select: "chagua",
2306
2434
  clone: "nakili",
2307
- prepend: "tanguliza"
2435
+ prepend: "tanguliza",
2436
+ focus: "lenga",
2437
+ socket: "soketi"
2308
2438
  },
2309
2439
  modifiers: {
2310
2440
  to: "kwa",
@@ -2314,7 +2444,14 @@ var sw = {
2314
2444
  at: "katika",
2315
2445
  in: "ndani",
2316
2446
  of: "ya",
2317
- as: "kama",
2447
+ // `kuwa` ("to be/become" — the conversion sense, cf. `badilisha kuwa`), not
2448
+ // `kama`: sw `kama` is the IF keyword (commands.if above and the semantic sw
2449
+ // profile's if primary), so emitting it for `as` grew a phantom `if` command
2450
+ // out of every transformed `as <Type>` tail (`kama JSON`, `kama Number`) when
2451
+ // the semantic parser split event-body statements. Same dict↔profile homonym
2452
+ // disambiguation as pl get/pobierz. The semantic fetch-sw pattern still
2453
+ // tolerates hand-written `kama` in as-marker position.
2454
+ as: "kuwa",
2318
2455
  by: "na",
2319
2456
  before: "kabla",
2320
2457
  after: "baada",
@@ -2370,7 +2507,7 @@ var sw = {
2370
2507
  else: "sivyo",
2371
2508
  otherwise: "vinginevyo",
2372
2509
  end: "mwisho",
2373
- live: "moja_kwa_moja",
2510
+ live: "mubashara",
2374
2511
  changes: "inabadilika"
2375
2512
  },
2376
2513
  temporal: {
@@ -2422,13 +2559,25 @@ var sw = {
2422
2559
  },
2423
2560
  expressions: {
2424
2561
  first: "kwanza",
2425
- last: "mwisho",
2562
+ // 'mwisho' is the END keyword (block terminator) — the tokenizer's keyword
2563
+ // map is last-wins, so a positional `last` emission of 'mwisho' reads as
2564
+ // `end` and terminates the enclosing block mid-condition (focus-trap's
2565
+ // `… inafanana mwisho <button/>` dropped the whole branch body). Emit the
2566
+ // concatenated adjective form instead (wa mwisho — the saufsi/wennnicht/
2567
+ // enyakın single-token class); the tokenizer reads it as `last`.
2568
+ last: "wamwisho",
2426
2569
  next: "ijayo",
2427
2570
  previous: "iliyopita",
2428
2571
  prev: "awali",
2429
2572
  at: "katika",
2430
2573
  random: "nasibu",
2431
- closest: "karibu_zaidi",
2574
+ // Natural Swahili: `karibu` ("near/close") is the ordinary word and already
2575
+ // maps to closest. The earlier `karibu_zaidi` ("nearer") underscore-split to
2576
+ // karibu/_/zaidi (the stray `_ zaidi` broke positional capture); the fused
2577
+ // `karibuzaidi` parsed but isn't real Swahili. `karibu` alone is both natural
2578
+ // and correct (the sw tokenizer is single-word-only, so a spaced `karibu
2579
+ // zaidi` would strand `zaidi` regardless).
2580
+ closest: "karibu",
2432
2581
  parent: "mzazi",
2433
2582
  children: "watoto",
2434
2583
  within: "ndani_ya",
@@ -2459,17 +2608,22 @@ var pt = {
2459
2608
  add: "adicionar",
2460
2609
  remove: "remover",
2461
2610
  toggle: "alternar",
2611
+ // command blur (the events section has the blur EVENT word; without this
2612
+ // entry the transformer fell back to it and no profile read it as the verb)
2613
+ blur: "desfocar",
2462
2614
  hide: "esconder",
2463
2615
  show: "mostrar",
2464
2616
  if: "se",
2465
- unless: "a_menos",
2617
+ unless: "salvo",
2618
+ // a_menos splits at _ in the pt extractor (see profile)
2466
2619
  repeat: "repetir",
2467
2620
  for: "para",
2468
2621
  while: "enquanto",
2469
2622
  until: "at\xE9",
2470
2623
  continue: "continuar",
2471
- break: "parar",
2472
- halt: "interromper",
2624
+ // un-crossed: the profile/tokenizer read parar=halt, interromper=break
2625
+ break: "interromper",
2626
+ halt: "parar",
2473
2627
  wait: "esperar",
2474
2628
  fetch: "buscar",
2475
2629
  call: "chamar",
@@ -2504,7 +2658,9 @@ var pt = {
2504
2658
  open: "abrir",
2505
2659
  select: "selecionar",
2506
2660
  clone: "clonar",
2507
- prepend: "preceder"
2661
+ prepend: "preceder",
2662
+ focus: "focar",
2663
+ socket: "soquete"
2508
2664
  },
2509
2665
  modifiers: {
2510
2666
  to: "para",
@@ -2628,7 +2784,7 @@ var pt = {
2628
2784
  prev: "ant",
2629
2785
  at: "em",
2630
2786
  random: "aleat\xF3rio",
2631
- closest: "mais_pr\xF3ximo",
2787
+ closest: "maispr\xF3ximo",
2632
2788
  parent: "pai",
2633
2789
  children: "filhos",
2634
2790
  within: "dentro",
@@ -2662,7 +2818,7 @@ var it = {
2662
2818
  hide: "nascondere",
2663
2819
  show: "mostrare",
2664
2820
  if: "se",
2665
- unless: "a meno che",
2821
+ unless: "salvo",
2666
2822
  repeat: "ripetere",
2667
2823
  for: "per",
2668
2824
  while: "mentre",
@@ -2695,7 +2851,8 @@ var it = {
2695
2851
  swap: "scambiare",
2696
2852
  morph: "trasformare",
2697
2853
  settle: "stabilizzare",
2698
- append: "aggiungere",
2854
+ append: "accodare",
2855
+ // profile primary; 'aggiungere' is add's word (parsed as add)
2699
2856
  exit: "uscire",
2700
2857
  install: "installare",
2701
2858
  breakpoint: "punto-interruzione",
@@ -2704,7 +2861,10 @@ var it = {
2704
2861
  open: "aprire",
2705
2862
  select: "selezionare",
2706
2863
  clone: "clonare",
2707
- prepend: "anteporre"
2864
+ prepend: "anteporre",
2865
+ // profile primary; without a commands entry the transformer fell back to
2866
+ // the EVENTS noun 'fuoco', which generated focus patterns can't match
2867
+ focus: "focalizzare"
2708
2868
  },
2709
2869
  modifiers: {
2710
2870
  to: "a",
@@ -2828,7 +2988,7 @@ var it = {
2828
2988
  prev: "prec",
2829
2989
  at: "a",
2830
2990
  random: "casuale",
2831
- closest: "pi\xF9vicino",
2991
+ closest: "vicino",
2832
2992
  parent: "genitore",
2833
2993
  children: "figli",
2834
2994
  within: "dentro",
@@ -2891,7 +3051,8 @@ var vi = {
2891
3051
  beep: "beep",
2892
3052
  js: "js",
2893
3053
  async: "b\u1EA5t \u0111\u1ED3ng b\u1ED9",
2894
- render: "hi\u1EC3n th\u1ECB",
3054
+ render: "k\u1EBFt xu\u1EA5t",
3055
+ // distinct from `show` (was `hiển thị`, which collides with show: the semantic profile reads `hiển thị` as show, `kết xuất` as render)
2895
3056
  swap: "ho\xE1n \u0111\u1ED5i",
2896
3057
  morph: "bi\u1EBFn \u0111\u1ED5i",
2897
3058
  settle: "\u1ED5n \u0111\u1ECBnh",
@@ -2906,7 +3067,8 @@ var vi = {
2906
3067
  prepend: "th\xEAm \u0111\u1EA7u",
2907
3068
  else: "kh\xF4ng th\xEC",
2908
3069
  breakpoint: "\u0111i\u1EC3m-d\u1EEBng",
2909
- clear: "x\xF3a",
3070
+ clear: "t\u1EA9y",
3071
+ // xóa is the remove PRIMARY in the profile
2910
3072
  close: "\u0111\xF3ng",
2911
3073
  open: "m\u1EDF",
2912
3074
  select: "ch\u1ECDn"
@@ -2970,7 +3132,7 @@ var vi = {
2970
3132
  else: "kh\xF4ng th\xEC",
2971
3133
  end: "k\u1EBFt th\xFAc",
2972
3134
  then: "r\u1ED3i",
2973
- live: "tr\u1EF1c ti\u1EBFp",
3135
+ live: "live",
2974
3136
  changes: "thay \u0111\u1ED5i"
2975
3137
  },
2976
3138
  temporal: {
@@ -3052,15 +3214,23 @@ var pl = {
3052
3214
  commands: {
3053
3215
  on: "gdy",
3054
3216
  tell: "powiedz",
3055
- trigger: "wywo\u0142aj",
3217
+ trigger: "wyzw\xF3l",
3218
+ // auditor: dict emitted a word the profile reads differently
3056
3219
  send: "wy\u015Blij",
3057
3220
  take: "we\u017A",
3058
3221
  put: "umie\u015B\u0107",
3059
3222
  set: "ustaw",
3060
- get: "pobierz",
3223
+ // `uzyskaj` (the semantic pl profile's get primary), not `pobierz`: pl `pobierz`
3224
+ // ("download") is the profile's FETCH primary, so emitting it for get made the
3225
+ // parser read every transformed get as fetch (get-value lossy + a phantom fetch).
3226
+ // Same dict↔profile homonym disambiguation as tr load/install, qu get.
3227
+ get: "uzyskaj",
3061
3228
  add: "dodaj",
3062
3229
  remove: "usu\u0144",
3063
3230
  toggle: "prze\u0142\u0105cz",
3231
+ // command blur (the events section has the blur EVENT word; without this
3232
+ // entry the transformer fell back to it and no profile read it as the verb)
3233
+ blur: "rozmyj",
3064
3234
  hide: "ukryj",
3065
3235
  show: "poka\u017C",
3066
3236
  if: "je\u015Bli",
@@ -3101,12 +3271,14 @@ var pl = {
3101
3271
  exit: "wyjd\u017A",
3102
3272
  install: "zainstaluj",
3103
3273
  breakpoint: "punkt-przerwania",
3104
- clear: "wyczy\u015B\u0107",
3274
+ clear: "zeruj",
3275
+ // wyczyść is a remove alternative in the profile
3105
3276
  close: "zamknij",
3106
3277
  open: "otw\xF3rz",
3107
3278
  select: "wybierz",
3108
3279
  clone: "sklonuj",
3109
- prepend: "poprzed\u017A"
3280
+ prepend: "poprzed\u017A",
3281
+ focus: "skup"
3110
3282
  },
3111
3283
  modifiers: {
3112
3284
  to: "do",
@@ -3252,7 +3424,8 @@ var russianDictionary = {
3252
3424
  commands: {
3253
3425
  on: "\u043F\u0440\u0438",
3254
3426
  tell: "\u0441\u043A\u0430\u0437\u0430\u0442\u044C",
3255
- trigger: "\u0432\u044B\u0437\u0432\u0430\u0442\u044C",
3427
+ trigger: "\u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u044C",
3428
+ // auditor: dict emitted a word the profile reads differently
3256
3429
  send: "\u043E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C",
3257
3430
  take: "\u0432\u0437\u044F\u0442\u044C",
3258
3431
  put: "\u043F\u043E\u043B\u043E\u0436\u0438\u0442\u044C",
@@ -3263,8 +3436,12 @@ var russianDictionary = {
3263
3436
  toggle: "\u043F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C",
3264
3437
  hide: "\u0441\u043A\u0440\u044B\u0442\u044C",
3265
3438
  show: "\u043F\u043E\u043A\u0430\u0437\u0430\u0442\u044C",
3439
+ // command verb; the events section keeps the noun прокрутка for `on scroll`.
3440
+ // Without this entry the transformer fell back to the event noun, which the
3441
+ // parser doesn't read as the scroll command (#321 focus family).
3442
+ scroll: "\u043F\u0440\u043E\u043A\u0440\u0443\u0442\u0438\u0442\u044C",
3266
3443
  if: "\u0435\u0441\u043B\u0438",
3267
- unless: "\u0435\u0441\u043B\u0438_\u043D\u0435",
3444
+ unless: "\u043A\u0440\u043E\u043C\u0435",
3268
3445
  repeat: "\u043F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u044C",
3269
3446
  for: "\u0434\u043B\u044F",
3270
3447
  while: "\u043F\u043E\u043A\u0430",
@@ -3297,10 +3474,12 @@ var russianDictionary = {
3297
3474
  swap: "\u043F\u043E\u043C\u0435\u043D\u044F\u0442\u044C",
3298
3475
  morph: "\u0442\u0440\u0430\u043D\u0441\u0444\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u0442\u044C",
3299
3476
  settle: "\u0441\u0442\u0430\u0431\u0438\u043B\u0438\u0437\u0438\u0440\u043E\u0432\u0430\u0442\u044C",
3300
- append: "\u0434\u043E\u0431\u0430\u0432\u0438\u0442\u044C_\u0432_\u043A\u043E\u043D\u0435\u0446",
3477
+ append: "\u0434\u043E\u043F\u0438\u0441\u0430\u0442\u044C",
3478
+ // profile alternative; the compound splits and добавить parses as add
3301
3479
  exit: "\u0432\u044B\u0439\u0442\u0438",
3302
3480
  else: "\u0438\u043D\u0430\u0447\u0435",
3303
- install: "\u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C",
3481
+ install: "\u0438\u043D\u0441\u0442\u0430\u043B\u043B\u0438\u0440\u043E\u0432\u0430\u0442\u044C",
3482
+ // loanword — `установить` is `set` (homonym); see russian profile
3304
3483
  init: "\u0438\u043D\u0438\u0446\u0438\u0430\u043B\u0438\u0437\u0438\u0440\u043E\u0432\u0430\u0442\u044C",
3305
3484
  behavior: "\u043F\u043E\u0432\u0435\u0434\u0435\u043D\u0438\u0435",
3306
3485
  focus: "\u0441\u0444\u043E\u043A\u0443\u0441\u0438\u0440\u043E\u0432\u0430\u0442\u044C",
@@ -3335,8 +3514,11 @@ var russianDictionary = {
3335
3514
  events: {
3336
3515
  click: "\u043A\u043B\u0438\u043A",
3337
3516
  dblclick: "\u0434\u0432\u043E\u0439\u043D\u043E\u0439_\u043A\u043B\u0438\u043A",
3338
- mousedown: "\u043C\u044B\u0448\u044C_\u0432\u043D\u0438\u0437",
3339
- mouseup: "\u043C\u044B\u0448\u044C_\u0432\u0432\u0435\u0440\u0445",
3517
+ // Fused (no `_`): the semantic tokenizer splits on `_`, so an underscore form
3518
+ // breaks event recognition (mousedown → bare expression). Mirrors the #510 tr
3519
+ // resize fix (boyut_değiştir → boyutlandırma) and the enyakın superlative.
3520
+ mousedown: "\u043C\u044B\u0448\u044C\u0432\u043D\u0438\u0437",
3521
+ mouseup: "\u043C\u044B\u0448\u044C\u0432\u0432\u0435\u0440\u0445",
3340
3522
  mouseenter: "\u043C\u044B\u0448\u044C_\u0432\u0445\u043E\u0434",
3341
3523
  mouseleave: "\u043C\u044B\u0448\u044C_\u0432\u044B\u0445\u043E\u0434",
3342
3524
  mouseover: "\u043D\u0430\u0432\u0435\u0434\u0435\u043D\u0438\u0435",
@@ -3353,7 +3535,8 @@ var russianDictionary = {
3353
3535
  reset: "\u0441\u0431\u0440\u043E\u0441",
3354
3536
  load: "\u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0430",
3355
3537
  unload: "\u0432\u044B\u0433\u0440\u0443\u0437\u043A\u0430",
3356
- resize: "\u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0435_\u0440\u0430\u0437\u043C\u0435\u0440\u0430",
3538
+ resize: "\u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0435\u0440\u0430\u0437\u043C\u0435\u0440\u0430",
3539
+ // fused (no `_`) — see mousedown note above
3357
3540
  scroll: "\u043F\u0440\u043E\u043A\u0440\u0443\u0442\u043A\u0430",
3358
3541
  touchstart: "\u043A\u0430\u0441\u0430\u043D\u0438\u0435_\u043D\u0430\u0447\u0430\u043B\u043E",
3359
3542
  touchend: "\u043A\u0430\u0441\u0430\u043D\u0438\u0435_\u043A\u043E\u043D\u0435\u0446",
@@ -3478,7 +3661,8 @@ var ukrainianDictionary = {
3478
3661
  commands: {
3479
3662
  on: "\u043F\u0440\u0438",
3480
3663
  tell: "\u0441\u043A\u0430\u0437\u0430\u0442\u0438",
3481
- trigger: "\u0432\u0438\u043A\u043B\u0438\u043A\u0430\u0442\u0438",
3664
+ trigger: "\u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u0438",
3665
+ // auditor: dict emitted a word the profile reads differently
3482
3666
  send: "\u043D\u0430\u0434\u0456\u0441\u043B\u0430\u0442\u0438",
3483
3667
  take: "\u0432\u0437\u044F\u0442\u0438",
3484
3668
  put: "\u043F\u043E\u043A\u043B\u0430\u0441\u0442\u0438",
@@ -3489,8 +3673,12 @@ var ukrainianDictionary = {
3489
3673
  toggle: "\u043F\u0435\u0440\u0435\u043C\u043A\u043D\u0443\u0442\u0438",
3490
3674
  hide: "\u0441\u0445\u043E\u0432\u0430\u0442\u0438",
3491
3675
  show: "\u043F\u043E\u043A\u0430\u0437\u0430\u0442\u0438",
3676
+ // command verb; the events section keeps the noun прокрутка for `on scroll`.
3677
+ // Without this entry the transformer fell back to the event noun, which the
3678
+ // parser doesn't read as the scroll command (#321 focus family).
3679
+ scroll: "\u043F\u0440\u043E\u043A\u0440\u0443\u0442\u0438\u0442\u0438",
3492
3680
  if: "\u044F\u043A\u0449\u043E",
3493
- unless: "\u044F\u043A\u0449\u043E_\u043D\u0435",
3681
+ unless: "\u043A\u0440\u0456\u043C",
3494
3682
  repeat: "\u043F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0438",
3495
3683
  for: "\u0434\u043B\u044F",
3496
3684
  while: "\u043F\u043E\u043A\u0438",
@@ -3523,10 +3711,12 @@ var ukrainianDictionary = {
3523
3711
  swap: "\u043F\u043E\u043C\u0456\u043D\u044F\u0442\u0438",
3524
3712
  morph: "\u0442\u0440\u0430\u043D\u0441\u0444\u043E\u0440\u043C\u0443\u0432\u0430\u0442\u0438",
3525
3713
  settle: "\u0441\u0442\u0430\u0431\u0456\u043B\u0456\u0437\u0443\u0432\u0430\u0442\u0438",
3526
- append: "\u0434\u043E\u0434\u0430\u0442\u0438_\u0432_\u043A\u0456\u043D\u0435\u0446\u044C",
3714
+ append: "\u0434\u043E\u043F\u0438\u0441\u0430\u0442\u0438",
3715
+ // profile alternative; the compound splits and додати parses as add
3527
3716
  exit: "\u0432\u0438\u0439\u0442\u0438",
3528
3717
  else: "\u0456\u043D\u0430\u043A\u0448\u0435",
3529
- install: "\u0432\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0438",
3718
+ install: "\u0456\u043D\u0441\u0442\u0430\u043B\u044E\u0432\u0430\u0442\u0438",
3719
+ // loanword — `встановити` is `set` (homonym); see ukrainian profile
3530
3720
  init: "\u0456\u043D\u0456\u0446\u0456\u0430\u043B\u0456\u0437\u0443\u0432\u0430\u0442\u0438",
3531
3721
  behavior: "\u043F\u043E\u0432\u0435\u0434\u0456\u043D\u043A\u0430",
3532
3722
  focus: "\u0441\u0444\u043E\u043A\u0443\u0441\u0443\u0432\u0430\u0442\u0438",
@@ -3561,8 +3751,10 @@ var ukrainianDictionary = {
3561
3751
  events: {
3562
3752
  click: "\u043A\u043B\u0456\u043A",
3563
3753
  dblclick: "\u043F\u043E\u0434\u0432\u0456\u0439\u043D\u0438\u0439_\u043A\u043B\u0456\u043A",
3564
- mousedown: "\u043C\u0438\u0448\u0430_\u0432\u043D\u0438\u0437",
3565
- mouseup: "\u043C\u0438\u0448\u0430_\u0432\u0433\u043E\u0440\u0443",
3754
+ // Fused (no `_`): the semantic tokenizer splits on `_`, so an underscore form
3755
+ // breaks event recognition. Mirrors the #510 tr resize fix + enyakın.
3756
+ mousedown: "\u043C\u0438\u0448\u0430\u0432\u043D\u0438\u0437",
3757
+ mouseup: "\u043C\u0438\u0448\u0430\u0432\u0433\u043E\u0440\u0443",
3566
3758
  mouseenter: "\u043C\u0438\u0448\u0430_\u0432\u0445\u0456\u0434",
3567
3759
  mouseleave: "\u043C\u0438\u0448\u0430_\u0432\u0438\u0445\u0456\u0434",
3568
3760
  mouseover: "\u043D\u0430\u0432\u0435\u0434\u0435\u043D\u043D\u044F",
@@ -3579,7 +3771,8 @@ var ukrainianDictionary = {
3579
3771
  reset: "\u0441\u043A\u0438\u0434\u0430\u043D\u043D\u044F",
3580
3772
  load: "\u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u044F",
3581
3773
  unload: "\u0432\u0438\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u044F",
3582
- resize: "\u0437\u043C\u0456\u043D\u0430_\u0440\u043E\u0437\u043C\u0456\u0440\u0443",
3774
+ resize: "\u0437\u043C\u0456\u043D\u0430\u0440\u043E\u0437\u043C\u0456\u0440\u0443",
3775
+ // fused (no `_`) — see mousedown note above
3583
3776
  scroll: "\u043F\u0440\u043E\u043A\u0440\u0443\u0442\u043A\u0430",
3584
3777
  touchstart: "\u0434\u043E\u0442\u0438\u043A_\u043F\u043E\u0447\u0430\u0442\u043E\u043A",
3585
3778
  touchend: "\u0434\u043E\u0442\u0438\u043A_\u043A\u0456\u043D\u0435\u0446\u044C",
@@ -3716,10 +3909,12 @@ var hindiDictionary = {
3716
3909
  hide: "\u091B\u093F\u092A\u093E\u090F\u0902",
3717
3910
  show: "\u0926\u093F\u0916\u093E\u090F\u0902",
3718
3911
  if: "\u0905\u0917\u0930",
3719
- unless: "\u091C\u092C_\u0924\u0915_\u0928\u0939\u0940\u0902",
3912
+ unless: "\u091C\u092C \u0924\u0915 \u0928\u0939\u0940\u0902",
3913
+ // spaced (not जब_तक_नहीं) → one multi-word `unless` token
3720
3914
  repeat: "\u0926\u094B\u0939\u0930\u093E\u090F\u0902",
3721
- for: "\u0915\u0947_\u0932\u093F\u090F",
3722
- while: "\u091C\u092C_\u0924\u0915",
3915
+ for: "\u0939\u0947\u0924\u0941",
3916
+ // single token — के_लिए splits at _ in the hi extractor
3917
+ while: "\u091C\u092C \u0924\u0915",
3723
3918
  until: "\u0924\u0915",
3724
3919
  continue: "\u091C\u093E\u0930\u0940",
3725
3920
  break: "\u0930\u094B\u0915\u0947\u0902",
@@ -3746,10 +3941,10 @@ var hindiDictionary = {
3746
3941
  js: "\u091C\u0947\u090F\u0938",
3747
3942
  async: "\u0905\u0938\u093F\u0902\u0915",
3748
3943
  render: "\u0930\u0947\u0902\u0921\u0930",
3749
- swap: "\u092C\u0926\u0932\u0947\u0902",
3944
+ swap: "\u0935\u093F\u0928\u093F\u092E\u092F",
3750
3945
  morph: "\u0930\u0942\u092A\u093E\u0902\u0924\u0930",
3751
3946
  settle: "\u0938\u094D\u0925\u093F\u0930",
3752
- append: "\u091C\u094B\u0921\u093C\u0947\u0902_\u0905\u0902\u0924",
3947
+ append: "\u0938\u0902\u0932\u0917\u094D\u0928",
3753
3948
  exit: "\u092C\u093E\u0939\u0930",
3754
3949
  else: "\u0935\u0930\u0928\u093E",
3755
3950
  install: "\u0907\u0902\u0938\u094D\u091F\u0949\u0932",
@@ -3763,7 +3958,8 @@ var hindiDictionary = {
3763
3958
  clear: "\u0938\u093E\u092B\u093C-\u0915\u0930\u0947\u0902",
3764
3959
  close: "\u092C\u0902\u0926-\u0915\u0930\u0947\u0902",
3765
3960
  open: "\u0916\u094B\u0932\u0947\u0902",
3766
- select: "\u091A\u0941\u0928\u0947\u0902"
3961
+ select: "\u091A\u0941\u0928\u0947\u0902",
3962
+ socket: "\u0938\u0949\u0915\u0947\u091F"
3767
3963
  },
3768
3964
  modifiers: {
3769
3965
  to: "\u0915\u094B",
@@ -3775,8 +3971,8 @@ var hindiDictionary = {
3775
3971
  of: "\u0915\u093E",
3776
3972
  as: "\u0915\u0947_\u0930\u0942\u092A_\u092E\u0947\u0902",
3777
3973
  by: "\u0926\u094D\u0935\u093E\u0930\u093E",
3778
- before: "\u0938\u0947_\u092A\u0939\u0932\u0947",
3779
- after: "\u0915\u0947_\u092C\u093E\u0926",
3974
+ before: "\u0938\u0947 \u092A\u0939\u0932\u0947",
3975
+ after: "\u0915\u0947 \u092C\u093E\u0926",
3780
3976
  over: "\u0915\u0947_\u090A\u092A\u0930",
3781
3977
  under: "\u0915\u0947_\u0928\u0940\u091A\u0947",
3782
3978
  between: "\u0915\u0947_\u092C\u0940\u091A",
@@ -3787,8 +3983,10 @@ var hindiDictionary = {
3787
3983
  events: {
3788
3984
  click: "\u0915\u094D\u0932\u093F\u0915",
3789
3985
  dblclick: "\u0921\u092C\u0932_\u0915\u094D\u0932\u093F\u0915",
3790
- mousedown: "\u092E\u093E\u0909\u0938_\u0928\u0940\u091A\u0947",
3791
- mouseup: "\u092E\u093E\u0909\u0938_\u090A\u092A\u0930",
3986
+ // Fused (no `_`): the semantic tokenizer splits on `_`, breaking event
3987
+ // recognition (mousedown → "नीचे"). Mirrors the #535 ru/uk fuse.
3988
+ mousedown: "\u092E\u093E\u0909\u0938\u0928\u0940\u091A\u0947",
3989
+ mouseup: "\u092E\u093E\u0909\u0938\u090A\u092A\u0930",
3792
3990
  mouseenter: "\u092E\u093E\u0909\u0938_\u092A\u094D\u0930\u0935\u0947\u0936",
3793
3991
  mouseleave: "\u092E\u093E\u0909\u0938_\u092C\u093E\u0939\u0930",
3794
3992
  mouseover: "\u092E\u093E\u0909\u0938_\u0913\u0935\u0930",
@@ -3820,7 +4018,11 @@ var hindiDictionary = {
3820
4018
  not: "\u0928\u0939\u0940\u0902",
3821
4019
  is: "\u0939\u0948",
3822
4020
  exists: "\u092E\u094C\u091C\u0942\u0926",
3823
- matches: "\u092E\u0947\u0932_\u0916\u093E\u0924\u093E",
4021
+ // Natural spaced phrase `मेल खाता` ("matches") — how Hindi writes it. The base
4022
+ // tokenizer now matches multi-word profile keywords, so the hindi profile maps
4023
+ // `मेल खाता`→matches without the underscore (`मेल_खाता` split) or the
4024
+ // concatenated `मेलखाता` (parsed, but unnatural) workarounds.
4025
+ matches: "\u092E\u0947\u0932 \u0916\u093E\u0924\u093E",
3824
4026
  contains: "\u0936\u093E\u092E\u093F\u0932",
3825
4027
  includes: "\u092E\u0947\u0902_\u0939\u0948",
3826
4028
  equals: "\u092C\u0930\u093E\u092C\u0930",
@@ -3957,7 +4159,7 @@ var bengaliDictionary = {
3957
4159
  throw: "\u09A8\u09BF\u0995\u09CD\u09B7\u09C7\u09AA",
3958
4160
  continue: "\u099A\u09BE\u09B2\u09BF\u09AF\u09BC\u09C7 \u09AF\u09BE\u09A8",
3959
4161
  make: "\u09A4\u09C8\u09B0\u09BF \u0995\u09B0\u09C1\u09A8",
3960
- append: "\u09B6\u09C7\u09B7\u09C7 \u09AF\u09CB\u0997",
4162
+ append: "\u099C\u09C1\u09A1\u09BC\u09C1\u09A8",
3961
4163
  prepend: "\u09B6\u09C1\u09B0\u09C1\u09A4\u09C7 \u09AF\u09CB\u0997",
3962
4164
  focus: "\u09AB\u09CB\u0995\u09BE\u09B8",
3963
4165
  blur: "\u099D\u09BE\u09AA\u09B8\u09BE",
@@ -3985,7 +4187,8 @@ var bengaliDictionary = {
3985
4187
  clear: "\u09AA\u09B0\u09BF\u09B7\u09CD\u0995\u09BE\u09B0",
3986
4188
  close: "\u09AC\u09A8\u09CD\u09A7",
3987
4189
  open: "\u0996\u09C1\u09B2\u09C1\u09A8",
3988
- select: "\u09A8\u09BF\u09B0\u09CD\u09AC\u09BE\u099A\u09A8"
4190
+ select: "\u09A8\u09BF\u09B0\u09CD\u09AC\u09BE\u099A\u09A8",
4191
+ socket: "\u09B8\u0995\u09C7\u099F"
3989
4192
  },
3990
4193
  modifiers: {
3991
4194
  to: "\u0995\u09C7",
@@ -4044,6 +4247,7 @@ var bengaliDictionary = {
4044
4247
  end: "\u09B6\u09C7\u09B7",
4045
4248
  then: "\u09A4\u09BE\u09B0\u09AA\u09B0",
4046
4249
  live: "\u09B2\u09BE\u0987\u09AD",
4250
+ bind: "\u09AC\u09BE\u0987\u09A8\u09CD\u09A1",
4047
4251
  changes: "\u09AA\u09B0\u09BF\u09AC\u09B0\u09CD\u09A4\u09BF\u09A4 \u09B9\u09B2\u09C7"
4048
4252
  },
4049
4253
  temporal: {
@@ -4137,7 +4341,9 @@ var thaiDictionary = {
4137
4341
  prepend: "\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E2B\u0E19\u0E49\u0E32",
4138
4342
  focus: "\u0E42\u0E1F\u0E01\u0E31\u0E2A",
4139
4343
  blur: "\u0E40\u0E1A\u0E25\u0E2D",
4140
- transition: "\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19",
4344
+ // เปลี่ยนผ่าน, not เปลี่ยน: the semantic th profile's `change` keyword is
4345
+ // เปลี่ยน, so a เปลี่ยน render could never anchor a transition command.
4346
+ transition: "\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E1C\u0E48\u0E32\u0E19",
4141
4347
  settle: "\u0E04\u0E07\u0E17\u0E35\u0E48",
4142
4348
  measure: "\u0E27\u0E31\u0E14",
4143
4349
  async: "\u0E2D\u0E30\u0E0B\u0E34\u0E07\u0E04\u0E4C",
@@ -4338,10 +4544,13 @@ var malayDictionary = {
4338
4544
  init: "mula",
4339
4545
  clone: "klon",
4340
4546
  breakpoint: "titik-henti",
4341
- clear: "padam",
4547
+ clear: "bersihkan",
4548
+ // padam is a remove alternative in the profile
4342
4549
  close: "tutup",
4343
4550
  open: "buka",
4344
- select: "pilih"
4551
+ select: "pilih",
4552
+ socket: "soket"
4553
+ // derived from the ms profile (socket.primary); see generate-i18n-dictionaries
4345
4554
  },
4346
4555
  modifiers: {
4347
4556
  to: "ke",
@@ -4512,10 +4721,14 @@ var tagalogDictionary = {
4512
4721
  tell: "sabihin",
4513
4722
  trigger: "palitawin",
4514
4723
  send: "ipadala",
4515
- take: "kunin",
4724
+ take: "kumuha",
4725
+ // auditor: dict emitted a word the profile reads differently
4516
4726
  put: "ilagay",
4517
4727
  set: "itakda",
4518
- get: "kuhanin",
4728
+ // Align with the semantic tl profile's `get` primary (`kunin`); the previous
4729
+ // `kuhanin` is the base of fetch's `kuhanin_mula`, so the transformed `get`
4730
+ // dropped (get-value parsed degenerate). Same dict↔profile alignment as id `toggle`.
4731
+ get: "kunin",
4519
4732
  add: "idagdag",
4520
4733
  remove: "alisin",
4521
4734
  toggle: "palitan",
@@ -4539,7 +4752,7 @@ var tagalogDictionary = {
4539
4752
  throw: "ihagis",
4540
4753
  catch: "hulihin",
4541
4754
  measure: "sukatin",
4542
- transition: "baguhin",
4755
+ transition: "lumipat",
4543
4756
  increment: "dagdagan",
4544
4757
  decrement: "bawasan",
4545
4758
  default: "pamantayan",
@@ -4551,10 +4764,13 @@ var tagalogDictionary = {
4551
4764
  beep: "tunog",
4552
4765
  js: "js",
4553
4766
  async: "sabay",
4554
- render: "ipakita",
4767
+ render: "irender",
4768
+ // auditor: dict emitted a word the profile reads differently
4555
4769
  swap: "palitan_pwesto",
4556
- morph: "baguhin_hugis",
4557
- settle: "ayusin",
4770
+ morph: "baguhin",
4771
+ // auditor: dict emitted a word the profile reads differently
4772
+ settle: "magpatahimik",
4773
+ // auditor: dict emitted a word the profile reads differently
4558
4774
  append: "idagdag_sa_dulo",
4559
4775
  prepend: "idagdag_sa_simula",
4560
4776
  exit: "lumabas",
@@ -4582,7 +4798,11 @@ var tagalogDictionary = {
4582
4798
  as: "bilang",
4583
4799
  by: "sa_pamamagitan_ng",
4584
4800
  before: "bago",
4585
- after: "pagkatapos",
4801
+ // `matapos` (not `pagkatapos`) for the positional "after": `pagkatapos` is
4802
+ // also Tagalog "then", so emitting it for the position modifier collides with
4803
+ // the sequence connector. `matapos` is the unambiguous positional form and
4804
+ // matches the semantic tl profile's `after`.
4805
+ after: "matapos",
4586
4806
  over: "sa_ibabaw",
4587
4807
  under: "sa_ilalim",
4588
4808
  between: "sa_pagitan",
@@ -4742,6 +4962,8 @@ var he = {
4742
4962
  beep: "\u05D1\u05D9\u05E4",
4743
4963
  break: "\u05E9\u05D1\u05D5\u05E8",
4744
4964
  call: "\u05E7\u05E8\u05D0",
4965
+ clear: "\u05E0\u05E7\u05D4",
4966
+ // profile's clear word — was untranslated (parsed as nothing)
4745
4967
  continue: "\u05D4\u05DE\u05E9\u05DA",
4746
4968
  copy: "\u05D4\u05E2\u05EA\u05E7",
4747
4969
  decrement: "\u05D4\u05E7\u05D8\u05DF",
@@ -4754,6 +4976,7 @@ var he = {
4754
4976
  halt: "\u05E2\u05E6\u05D5\u05E8",
4755
4977
  hide: "\u05D4\u05E1\u05EA\u05E8",
4756
4978
  if: "\u05D0\u05DD",
4979
+ unless: "\u05D0\u05DC\u05D0",
4757
4980
  increment: "\u05D4\u05D2\u05D3\u05DC",
4758
4981
  install: "\u05D4\u05EA\u05E7\u05DF",
4759
4982
  js: "js",
@@ -4768,6 +4991,7 @@ var he = {
4768
4991
  render: "\u05E8\u05E0\u05D3\u05E8",
4769
4992
  repeat: "\u05D7\u05D6\u05D5\u05E8",
4770
4993
  return: "\u05D4\u05D7\u05D6\u05E8",
4994
+ scroll: "\u05D2\u05DC\u05D5\u05DC",
4771
4995
  send: "\u05E9\u05DC\u05D7",
4772
4996
  set: "\u05E7\u05D1\u05E2",
4773
4997
  settle: "\u05D4\u05EA\u05D9\u05D9\u05E6\u05D1",
@@ -4805,6 +5029,7 @@ var he = {
4805
5029
  end: "\u05E1\u05D5\u05E3",
4806
5030
  then: "\u05D0\u05D6",
4807
5031
  live: "\u05D7\u05D9",
5032
+ bind: "\u05E7\u05E9\u05D5\u05E8",
4808
5033
  changes: "\u05DE\u05E9\u05EA\u05E0\u05D4",
4809
5034
  when: "\u05DB\u05D0\u05E9\u05E8",
4810
5035
  where: "\u05D0\u05D9\u05E4\u05D4"
@@ -4823,7 +5048,9 @@ var he = {
4823
5048
  your: "\u05E9\u05DC\u05DA"
4824
5049
  },
4825
5050
  attributes: {},
4826
- expressions: {}
5051
+ expressions: {
5052
+ last: "\u05D0\u05D7\u05E8\u05D5\u05DF"
5053
+ }
4827
5054
  };
4828
5055
 
4829
5056
  // src/dictionaries/index.ts