indickit 0.5.0 → 0.8.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.
package/dist/phonetic.js CHANGED
@@ -1,11 +1,14 @@
1
1
  // phonetic/rules.json
2
2
  var rules_default = {
3
- version: "2026-10-06.1",
3
+ version: "2026-10-07",
4
4
  folds: [
5
5
  "bn-case",
6
+ "brahmic-av-u",
6
7
  "drop-vowels",
7
8
  "drop-y",
9
+ "flap-r",
8
10
  "gu-case",
11
+ "latin-ngh",
9
12
  "latin-w-u",
10
13
  "ml-case",
11
14
  "nasal-all",
@@ -100,7 +103,13 @@ var rules_default = {
100
103
  },
101
104
  virama_offset: 77,
102
105
  candrabindu_offset: 1,
103
- candrabindu_class: "ṁ"
106
+ candrabindu_class: "ṁ",
107
+ nukta_offset: 60,
108
+ flap_offsets: [
109
+ 33,
110
+ 34
111
+ ],
112
+ flap_class: "ṛ"
104
113
  },
105
114
  extra: {
106
115
  ৎ: "t",
@@ -117,7 +126,14 @@ var rules_default = {
117
126
  ൿ: "k",
118
127
  ൔ: "m",
119
128
  ൕ: "y",
120
- ൖ: "l"
129
+ ൖ: "l",
130
+ ड़: "ṛ",
131
+ ढ़: "ṛ",
132
+ ড়: "ṛ",
133
+ ঢ়: "ṛ",
134
+ ଡ଼: "ṛ",
135
+ ଢ଼: "ṛ",
136
+ ੜ: "ṛ"
121
137
  },
122
138
  urdu: {
123
139
  from: 1536,
@@ -139,7 +155,7 @@ var rules_default = {
139
155
  ڈ: "ṭ",
140
156
  ذ: "c",
141
157
  ر: "r",
142
- ڑ: "ṭ",
158
+ ڑ: "ṛ",
143
159
  ز: "c",
144
160
  ژ: "c",
145
161
  س: "s",
@@ -181,7 +197,7 @@ var rules_default = {
181
197
  ڌ: "t",
182
198
  ڍ: "ṭ",
183
199
  ڏ: "t",
184
- ڙ: "ṭ",
200
+ ڙ: "ṛ",
185
201
  ڦ: "p",
186
202
  ڪ: "k",
187
203
  ڱ: "ṅ",
@@ -301,7 +317,7 @@ var rules_default = {
301
317
  ᱯ: "p",
302
318
  ᱰ: "ṭ",
303
319
  ᱱ: "n",
304
- ᱲ: "ṭ",
320
+ ᱲ: "ṛ",
305
321
  ᱳ: "o",
306
322
  ᱴ: "ṭ",
307
323
  ᱵ: "p",
@@ -313,6 +329,10 @@ var rules_default = {
313
329
  },
314
330
  latin: {
315
331
  groups: [
332
+ [
333
+ "ngh",
334
+ "nĝ"
335
+ ],
316
336
  [
317
337
  "chh",
318
338
  "c"
@@ -420,9 +440,11 @@ var rules_default = {
420
440
  v: "p",
421
441
  w: "p",
422
442
  ñ: "n",
443
+ ĝ: "k",
423
444
  ṁ: "n",
424
445
  ṅ: "n",
425
446
  ṇ: "n",
447
+ ṛ: "t",
426
448
  ṭ: "t"
427
449
  },
428
450
  vowels: "aeiou",
@@ -436,6 +458,26 @@ var rules_default = {
436
458
  "drop-final-vowel": false
437
459
  },
438
460
  branches: [
461
+ {
462
+ from: 2304,
463
+ to: 3455,
464
+ class: "v",
465
+ also: "u",
466
+ after: "aṁ",
467
+ not_before: "aieo"
468
+ },
469
+ {
470
+ from: 1536,
471
+ to: 7295,
472
+ class: "ṛ",
473
+ also: "r"
474
+ },
475
+ {
476
+ from: 0,
477
+ to: 127,
478
+ class: "ĝ",
479
+ also: "h"
480
+ },
439
481
  {
440
482
  from: 0,
441
483
  to: 127,
@@ -455,6 +497,10 @@ var rules_default = {
455
497
  also: "u"
456
498
  }
457
499
  ],
500
+ joined: {
501
+ min_classes: 8,
502
+ when: "the strict keys find nobody"
503
+ },
458
504
  digit_zeros: [
459
505
  48,
460
506
  1632,
@@ -565,6 +611,7 @@ var rules_default = {
565
611
  };
566
612
 
567
613
  // js/phonetic.ts
614
+ var DELETED = "\x00";
568
615
  function compile(rules) {
569
616
  const b = rules.brahmic;
570
617
  const byOffset = new Array(128);
@@ -588,26 +635,31 @@ function compile(rules) {
588
635
  }
589
636
  function readBrahmic(word) {
590
637
  let out = "";
638
+ let last = -1;
591
639
  for (let i = 0;i < word.length; i++) {
592
640
  const ch = word[i];
593
641
  const x = extra.get(ch);
594
642
  if (x !== undefined) {
595
643
  out += x;
644
+ last = -1;
596
645
  continue;
597
646
  }
598
647
  const o = word.charCodeAt(i);
599
648
  if (o < b.from || o > b.to)
600
649
  continue;
601
650
  const off = o & 127;
602
- if (off === b.virama_offset)
603
- continue;
604
- if (off === b.candrabindu_offset) {
651
+ const c = byOffset[off];
652
+ if (off === b.nukta_offset && b.flap_offsets.includes(last) && out) {
653
+ out = out.slice(0, -1) + b.flap_class;
654
+ } else if (off === b.virama_offset) {} else if (off === b.candrabindu_offset) {
605
655
  out += b.candrabindu_class;
606
- continue;
656
+ } else if (c !== undefined) {
657
+ out += c;
607
658
  }
608
- const c = byOffset[off];
609
659
  if (c !== undefined)
610
- out += c;
660
+ last = off;
661
+ else if (off !== b.nukta_offset && off !== b.virama_offset)
662
+ last = -1;
611
663
  }
612
664
  return out;
613
665
  }
@@ -728,6 +780,11 @@ function compile(rules) {
728
780
  runs += out[i];
729
781
  return runs;
730
782
  }
783
+ function fits(classes, i, br) {
784
+ const prev = i > 0 ? classes[i - 1] : "^";
785
+ const next = i + 1 < classes.length ? classes[i + 1] : "$";
786
+ return (br.after === undefined || br.after.includes(prev)) && (br.before === undefined || br.before.includes(next)) && !(br.not_before ?? "").includes(next);
787
+ }
731
788
  function variants(word) {
732
789
  const classes = read(word);
733
790
  let vs = [classes];
@@ -745,12 +802,13 @@ function compile(rules) {
745
802
  if (!inScript)
746
803
  continue;
747
804
  for (let i = 0;i < classes.length; i++) {
748
- if (classes[i] === br.class && vs.length * 2 <= rules.max_keys) {
749
- vs = vs.concat(vs.map((v) => v.slice(0, i) + br.also + v.slice(i + 1)));
805
+ if (classes[i] === br.class && vs.length * 2 <= rules.max_keys && fits(classes, i, br)) {
806
+ const also = br.also || DELETED;
807
+ vs = vs.concat(vs.map((v) => v.slice(0, i) + also + v.slice(i + 1)));
750
808
  }
751
809
  }
752
810
  }
753
- return vs;
811
+ return vs.map((v) => v.replaceAll(DELETED, ""));
754
812
  }
755
813
  function number(word) {
756
814
  let out = "";
@@ -788,6 +846,7 @@ function compile(rules) {
788
846
  };
789
847
  }
790
848
  var engine = compile(rules_default);
849
+ var _internal = { compile: (r) => compile(r), normalize: (w) => normalize(w), engine };
791
850
  var RULES_VERSION = rules_default.version;
792
851
  var MAX_NAME_KEYS = 256;
793
852
  function normalize(word) {
@@ -817,6 +876,13 @@ function nameKeys(name) {
817
876
  }
818
877
  return out[0] === "" ? [] : out;
819
878
  }
879
+ var JOINED_MIN_CLASSES = rules_default.joined.min_classes;
880
+ function joinedKeys(name) {
881
+ const joined = words(name).map(normalize).join("");
882
+ if (!joined)
883
+ return [];
884
+ return engine(joined).filter((k) => [...k].length >= JOINED_MIN_CLASSES);
885
+ }
820
886
  function match(a, b) {
821
887
  const wa = words(a), wb = words(b);
822
888
  if (!wa.length || wa.length !== wb.length)
@@ -831,6 +897,9 @@ export {
831
897
  nameKeys,
832
898
  match,
833
899
  keys,
900
+ joinedKeys,
901
+ _internal,
834
902
  RULES_VERSION,
835
- MAX_NAME_KEYS
903
+ MAX_NAME_KEYS,
904
+ JOINED_MIN_CLASSES
836
905
  };