henkan 0.3.2 → 0.3.3

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 (55) hide show
  1. package/dist/index.cjs.js +31 -29
  2. package/dist/index.cjs.js.map +3 -3
  3. package/dist/index.mjs +31 -29
  4. package/dist/index.mjs.map +3 -3
  5. package/dist/types/utils.d.ts.map +1 -1
  6. package/docs/api/functions/capitalizeString.md +1 -1
  7. package/docs/api/functions/convertJMdict.md +1 -1
  8. package/docs/api/functions/convertKanjiDic.md +1 -1
  9. package/docs/api/functions/convertKradFile.md +1 -1
  10. package/docs/api/functions/convertRadkFile.md +1 -1
  11. package/docs/api/functions/convertTanakaCorpus.md +1 -1
  12. package/docs/api/functions/generateAnkiNote.md +1 -1
  13. package/docs/api/functions/generateAnkiNotesFile.md +1 -1
  14. package/docs/api/functions/getKanji.md +1 -1
  15. package/docs/api/functions/getKanjiExtended.md +1 -1
  16. package/docs/api/functions/getWord.md +1 -1
  17. package/docs/api/functions/isStringArray.md +1 -1
  18. package/docs/api/functions/isValidArray.md +1 -1
  19. package/docs/api/functions/isValidArrayWithFirstElement.md +1 -1
  20. package/docs/api/functions/makeSSML.md +1 -1
  21. package/docs/api/functions/shuffleArray.md +1 -1
  22. package/docs/api/functions/synthesizeSpeech.md +1 -1
  23. package/docs/api/interfaces/DictKanji.md +5 -5
  24. package/docs/api/interfaces/DictKanjiForm.md +4 -4
  25. package/docs/api/interfaces/DictKanjiMisc.md +5 -5
  26. package/docs/api/interfaces/DictKanjiReading.md +3 -3
  27. package/docs/api/interfaces/DictKanjiReadingMeaning.md +3 -3
  28. package/docs/api/interfaces/DictKanjiReadingMeaningGroup.md +3 -3
  29. package/docs/api/interfaces/DictKanjiWithRadicals.md +3 -3
  30. package/docs/api/interfaces/DictMeaning.md +11 -11
  31. package/docs/api/interfaces/DictRadical.md +4 -4
  32. package/docs/api/interfaces/DictReading.md +5 -5
  33. package/docs/api/interfaces/DictWord.md +7 -7
  34. package/docs/api/interfaces/ExamplePart.md +7 -7
  35. package/docs/api/interfaces/Grammar.md +15 -15
  36. package/docs/api/interfaces/GrammarMeaning.md +3 -3
  37. package/docs/api/interfaces/Kana.md +11 -11
  38. package/docs/api/interfaces/Kanji.md +22 -22
  39. package/docs/api/interfaces/KanjiComponent.md +3 -3
  40. package/docs/api/interfaces/KanjiForm.md +4 -4
  41. package/docs/api/interfaces/NoteAndTag.md +3 -3
  42. package/docs/api/interfaces/Phrase.md +4 -4
  43. package/docs/api/interfaces/Radical.md +16 -16
  44. package/docs/api/interfaces/Reading.md +5 -5
  45. package/docs/api/interfaces/ResultEntry.md +7 -7
  46. package/docs/api/interfaces/TanakaExample.md +5 -5
  47. package/docs/api/interfaces/Translation.md +3 -3
  48. package/docs/api/interfaces/UsefulRegExps.md +9 -9
  49. package/docs/api/interfaces/Word.md +14 -14
  50. package/docs/api/type-aliases/Dict.md +1 -1
  51. package/docs/api/type-aliases/DictName.md +1 -1
  52. package/docs/api/type-aliases/EntryType.md +1 -1
  53. package/docs/api/type-aliases/JLPT.md +1 -1
  54. package/docs/api/type-aliases/Result.md +1 -1
  55. package/package.json +1 -1
package/dist/index.cjs.js CHANGED
@@ -70,7 +70,7 @@ var regexps = {
70
70
  regExChars: /[-\/\\^$*+?.()|[\]{}]/,
71
71
  tanakaID: /#ID=\d+_\d+$/,
72
72
  tanakaPart: /(?<base>[^()\[\]\{\}\s]+)(?:\((?<reading>[\S]+)\))?(?:\[(?<glossnum>[\S]+)\])?(?:\{(?<inflection>[\S]+)\})?/,
73
- tanakaReferenceID: /#([\d]+)/
73
+ tanakaReferenceID: /#(?<entryid>[\d]+)/
74
74
  };
75
75
  var romajiMap = {
76
76
  A: "\u30A8\u30FC",
@@ -1462,9 +1462,9 @@ async function convertTanakaCorpus(tanakaString, generateFurigana) {
1462
1462
  if (reading)
1463
1463
  if (regexps.tanakaReferenceID.test(reading)) {
1464
1464
  const referenceID = regexps.tanakaReferenceID.exec(reading);
1465
- if (!referenceID)
1465
+ if (!referenceID || !referenceID.groups || !referenceID.groups["entryid"])
1466
1466
  throw new Error(`Invalid reference ID: ${reading}`);
1467
- examplePart.referenceID = referenceID[0];
1467
+ examplePart.referenceID = referenceID.groups["entryid"];
1468
1468
  } else examplePart.reading = reading;
1469
1469
  if (glossNumber)
1470
1470
  examplePart.glossNumber = glossNumber.startsWith("0") ? Number.parseInt(glossNumber.substring(1)) : Number.parseInt(glossNumber);
@@ -1758,13 +1758,6 @@ function getWord(dict, id, kanjiDic, examples, dictWord, noteTypeName, deckPath)
1758
1758
  if (word.kanji.length === 0) delete word.kanji;
1759
1759
  }
1760
1760
  if (examples && dictWord.hasPhrases === true) {
1761
- let pushIfUnique2 = function(ex) {
1762
- if (!seenPhrases.has(ex.phrase)) {
1763
- wordExamples.push(ex);
1764
- seenPhrases.add(ex.phrase);
1765
- }
1766
- };
1767
- var pushIfUnique = pushIfUnique2;
1768
1761
  const readings = new Set(
1769
1762
  word.readings.filter(
1770
1763
  (reading) => (!reading.notes || !reading.notes.some(
@@ -1782,46 +1775,55 @@ function getWord(dict, id, kanjiDic, examples, dictWord, noteTypeName, deckPath)
1782
1775
  const kanjiFormExamples = [];
1783
1776
  const readingMatchingKanjiFormExamples = [];
1784
1777
  const readingExamples = [];
1778
+ const partParts = /* @__PURE__ */ new Set();
1785
1779
  for (const example of examples)
1786
1780
  for (const part of example.parts) {
1787
- const readingMatch = part.reading && readings.has(part.reading) || readings.has(part.baseForm);
1781
+ const readingAsReadingMatch = part.reading !== void 0 && readings.has(part.reading);
1788
1782
  if (kanjiForms && kanjiForms.size > 0 && kanjiForms.has(part.baseForm)) {
1789
- if (readingMatch) readingMatchingKanjiFormExamples.push(example);
1790
- else kanjiFormExamples.push(example);
1783
+ if (readingAsReadingMatch) {
1784
+ readingMatchingKanjiFormExamples.push(example);
1785
+ partParts.add(part.baseForm).add(part.reading);
1786
+ } else {
1787
+ kanjiFormExamples.push(example);
1788
+ partParts.add(part.baseForm);
1789
+ }
1791
1790
  break;
1792
1791
  }
1793
- if (readingMatch || part.referenceID && word.id && part.referenceID === word.id) {
1792
+ const readingAsBaseFormMatch = readings.has(part.baseForm);
1793
+ const referenceIDMatch = part.referenceID !== void 0 && word.id !== void 0 && part.referenceID === word.id;
1794
+ if (readingAsReadingMatch || readingAsBaseFormMatch || referenceIDMatch) {
1794
1795
  readingExamples.push(example);
1796
+ if (readingAsReadingMatch) partParts.add(part.reading);
1797
+ if (readingAsBaseFormMatch) partParts.add(part.baseForm);
1798
+ if (referenceIDMatch) partParts.add(part.referenceID);
1795
1799
  break;
1796
1800
  }
1797
1801
  }
1798
- const exampleSize = (/* @__PURE__ */ new Set([
1799
- ...readingMatchingKanjiFormExamples,
1800
- ...kanjiFormExamples,
1801
- ...readingExamples
1802
- ])).size;
1802
+ const exampleSize = readingMatchingKanjiFormExamples.length + kanjiFormExamples.length + readingExamples.length;
1803
1803
  const includeKanjiFormExamples = readingMatchingKanjiFormExamples.length < Math.max(2, Math.round(exampleSize * 0.05));
1804
1804
  const includeReadingExamples = word.usuallyInKana === void 0 && includeKanjiFormExamples && readingExamples.length >= Math.max(10, Math.round(exampleSize * 0.15)) || word.usuallyInKana === true && readingExamples.length >= Math.max(2, Math.round(exampleSize * 0.5));
1805
- const seenPhrases = /* @__PURE__ */ new Set();
1806
- let wordExamples = [];
1807
- for (const ex of readingMatchingKanjiFormExamples) pushIfUnique2(ex);
1808
- if (includeKanjiFormExamples)
1809
- for (const ex of kanjiFormExamples) pushIfUnique2(ex);
1810
- if (includeReadingExamples)
1811
- for (const ex of readingExamples) pushIfUnique2(ex);
1805
+ let wordExamples = [
1806
+ ...readingMatchingKanjiFormExamples,
1807
+ ...includeKanjiFormExamples ? kanjiFormExamples : [],
1808
+ ...includeReadingExamples ? readingExamples : []
1809
+ ];
1812
1810
  if (word.translations) {
1813
1811
  const glossSpecificExamples = [];
1812
+ const seenPhrases = /* @__PURE__ */ new Set();
1814
1813
  for (let i = 0; i < word.translations.length; i++) {
1815
- outer: for (const example of wordExamples)
1814
+ outer: for (const example of wordExamples) {
1815
+ if (seenPhrases.has(example.phrase)) continue;
1816
1816
  for (const part of example.parts)
1817
- if (part.glossNumber === i + 1) {
1817
+ if (part.glossNumber === i + 1 && (partParts.has(part.baseForm) || part.reading && partParts.has(part.reading) || part.referenceID && partParts.has(part.referenceID))) {
1818
1818
  glossSpecificExamples.push(example);
1819
+ seenPhrases.add(example.phrase);
1819
1820
  break outer;
1820
1821
  }
1822
+ }
1821
1823
  if (glossSpecificExamples.length === 5) break;
1822
1824
  }
1823
1825
  if (glossSpecificExamples.length === 5)
1824
- wordExamples = glossSpecificExamples;
1826
+ wordExamples = [...glossSpecificExamples];
1825
1827
  else if (glossSpecificExamples.length > 0) {
1826
1828
  const seenPhrases2 = new Set(
1827
1829
  glossSpecificExamples.map((ex) => ex.phrase)