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