henkan 0.1.3 → 0.2.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/index.cjs.js +87 -57
- package/dist/index.cjs.js.map +3 -3
- package/dist/index.mjs +85 -57
- package/dist/index.mjs.map +3 -3
- package/dist/types/types.d.ts +24 -3
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/utils.d.ts.map +1 -1
- package/docs/api/README.md +1 -0
- package/docs/api/functions/capitalizeString.md +1 -1
- package/docs/api/functions/convertJMdict.md +1 -1
- package/docs/api/functions/convertKanjiDic.md +1 -1
- package/docs/api/functions/convertKradFile.md +1 -1
- package/docs/api/functions/convertRadkFile.md +1 -1
- package/docs/api/functions/convertTanakaCorpus.md +1 -1
- package/docs/api/functions/generateAnkiNote.md +1 -1
- package/docs/api/functions/generateAnkiNotesFile.md +1 -1
- package/docs/api/functions/getKanji.md +1 -1
- package/docs/api/functions/getKanjiExtended.md +1 -1
- package/docs/api/functions/getWord.md +1 -1
- package/docs/api/functions/isStringArray.md +1 -1
- package/docs/api/functions/isValidArray.md +1 -1
- package/docs/api/functions/isValidArrayWithFirstElement.md +1 -1
- package/docs/api/functions/makeSSML.md +1 -1
- package/docs/api/functions/shuffleArray.md +1 -1
- package/docs/api/functions/synthesizeSpeech.md +1 -1
- package/docs/api/interfaces/DictKanji.md +14 -4
- package/docs/api/interfaces/DictKanjiForm.md +4 -4
- package/docs/api/interfaces/DictKanjiMisc.md +5 -5
- package/docs/api/interfaces/DictKanjiReading.md +3 -3
- package/docs/api/interfaces/DictKanjiReadingMeaning.md +3 -3
- package/docs/api/interfaces/DictKanjiReadingMeaningGroup.md +3 -3
- package/docs/api/interfaces/DictKanjiWithRadicals.md +3 -3
- package/docs/api/interfaces/DictMeaning.md +11 -11
- package/docs/api/interfaces/DictRadical.md +4 -4
- package/docs/api/interfaces/DictReading.md +5 -5
- package/docs/api/interfaces/DictWord.md +8 -8
- package/docs/api/interfaces/ExamplePart.md +7 -7
- package/docs/api/interfaces/Grammar.md +15 -15
- package/docs/api/interfaces/GrammarMeaning.md +3 -3
- package/docs/api/interfaces/Kana.md +11 -11
- package/docs/api/interfaces/Kanji.md +31 -21
- package/docs/api/interfaces/KanjiComponent.md +3 -3
- package/docs/api/interfaces/KanjiForm.md +3 -3
- package/docs/api/interfaces/NoteAndTag.md +31 -0
- package/docs/api/interfaces/Phrase.md +4 -4
- package/docs/api/interfaces/Radical.md +16 -16
- package/docs/api/interfaces/Reading.md +4 -4
- package/docs/api/interfaces/ResultEntry.md +7 -7
- package/docs/api/interfaces/TanakaExample.md +7 -7
- package/docs/api/interfaces/Translation.md +3 -3
- package/docs/api/interfaces/UsefulRegExps.md +9 -9
- package/docs/api/interfaces/Word.md +14 -14
- package/docs/api/type-aliases/Dict.md +1 -1
- package/docs/api/type-aliases/DictName.md +1 -1
- package/docs/api/type-aliases/EntryType.md +1 -1
- package/docs/api/type-aliases/JLPT.md +1 -1
- package/docs/api/type-aliases/Result.md +1 -1
- package/package.json +3 -3
package/dist/index.mjs
CHANGED
|
@@ -1343,8 +1343,11 @@ function convertKanjiDic(xmlString) {
|
|
|
1343
1343
|
}
|
|
1344
1344
|
if (isValidArray(group.meaning)) {
|
|
1345
1345
|
for (const meaning of group.meaning)
|
|
1346
|
-
if (typeof meaning === "string")
|
|
1346
|
+
if (typeof meaning === "string") {
|
|
1347
|
+
if (kanjiObj.isKokuji === void 0 && meaning === "(kokuji)")
|
|
1348
|
+
kanjiObj.isKokuji = true;
|
|
1347
1349
|
groupObj.meanings.push(meaning);
|
|
1350
|
+
}
|
|
1348
1351
|
}
|
|
1349
1352
|
if (groupObj.readings.length > 0 || groupObj.meanings.length > 0)
|
|
1350
1353
|
rmObj.groups.push(groupObj);
|
|
@@ -1526,11 +1529,12 @@ function lookupWordNote(key, notes, tags, required, fallback) {
|
|
|
1526
1529
|
);
|
|
1527
1530
|
if (!info) {
|
|
1528
1531
|
if (required) throw new Error(`Invalid note info for ${key}`);
|
|
1529
|
-
notes.push(fallback ?? key);
|
|
1530
|
-
return;
|
|
1532
|
+
if (notes) notes.push(fallback ?? key);
|
|
1533
|
+
return { note: fallback ?? key };
|
|
1531
1534
|
}
|
|
1532
|
-
tags.push(info[0]);
|
|
1533
|
-
notes.push(info[1]);
|
|
1535
|
+
if (tags) tags.push(`word::${info[0]}`);
|
|
1536
|
+
if (notes) notes.push(info[1]);
|
|
1537
|
+
return { note: info[1], tag: `word::${info[0]}` };
|
|
1534
1538
|
}
|
|
1535
1539
|
var wordAddNoteArray = (arr, cb) => {
|
|
1536
1540
|
if (!arr) return;
|
|
@@ -1547,40 +1551,48 @@ function getWord(dict, id, kanjiDic, examples, dictWord, noteTypeName, deckPath)
|
|
|
1547
1551
|
translations: [],
|
|
1548
1552
|
noteID: `word_${dictWord.id}`,
|
|
1549
1553
|
...noteTypeName ? { noteTypeName } : {},
|
|
1550
|
-
...deckPath ? { deckPath } : {}
|
|
1554
|
+
...deckPath ? { deckPath } : {},
|
|
1555
|
+
tags: []
|
|
1551
1556
|
};
|
|
1557
|
+
if (dictWord.isCommon === true) word.common = true;
|
|
1552
1558
|
if (dictWord.kanjiForms)
|
|
1553
1559
|
word.kanjiForms = dictWord.kanjiForms.map(
|
|
1554
|
-
(dictKanjiForm) => {
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1560
|
+
(dictKanjiForm) => ({
|
|
1561
|
+
kanjiForm: dictKanjiForm.form,
|
|
1562
|
+
...dictKanjiForm.notes ? {
|
|
1563
|
+
notes: dictKanjiForm.notes.map((note) => {
|
|
1564
|
+
const noteAndTag = lookupWordNote(
|
|
1565
|
+
note,
|
|
1566
|
+
void 0,
|
|
1567
|
+
word.tags,
|
|
1568
|
+
false,
|
|
1569
|
+
note
|
|
1570
|
+
);
|
|
1571
|
+
return capitalizeString(noteAndTag.note ?? note);
|
|
1572
|
+
})
|
|
1573
|
+
} : {}
|
|
1574
|
+
})
|
|
1566
1575
|
);
|
|
1567
|
-
word.readings = dictWord.readings.map((dictReading) => {
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1576
|
+
word.readings = dictWord.readings.map((dictReading) => ({
|
|
1577
|
+
reading: dictReading.reading,
|
|
1578
|
+
...dictReading.kanjiFormRestrictions || dictReading.notes ? {
|
|
1579
|
+
notes: [
|
|
1580
|
+
...dictReading.kanjiFormRestrictions ? dictReading.kanjiFormRestrictions.map(
|
|
1581
|
+
(restriction) => `Reading restricted to ${restriction}`
|
|
1582
|
+
) : [],
|
|
1583
|
+
...dictReading.notes ? dictReading.notes.map((note) => {
|
|
1584
|
+
const noteAndTag = lookupWordNote(
|
|
1585
|
+
note,
|
|
1586
|
+
void 0,
|
|
1587
|
+
word.tags,
|
|
1588
|
+
false,
|
|
1589
|
+
note
|
|
1590
|
+
);
|
|
1591
|
+
return capitalizeString(noteAndTag.note ?? note);
|
|
1592
|
+
}) : []
|
|
1593
|
+
]
|
|
1594
|
+
} : {}
|
|
1595
|
+
}));
|
|
1584
1596
|
let usuallyInKanaMeanings = 0;
|
|
1585
1597
|
word.translations = dictWord.meanings.map((dictMeaning) => {
|
|
1586
1598
|
if (!dictMeaning.translations)
|
|
@@ -1601,7 +1613,6 @@ function getWord(dict, id, kanjiDic, examples, dictWord, noteTypeName, deckPath)
|
|
|
1601
1613
|
}
|
|
1602
1614
|
);
|
|
1603
1615
|
const notes = [];
|
|
1604
|
-
word.tags = [];
|
|
1605
1616
|
wordAddNoteArray(
|
|
1606
1617
|
dictMeaning.kanjiFormRestrictions,
|
|
1607
1618
|
(restriction) => notes.push(`Meaning restricted to ${restriction}`)
|
|
@@ -1672,7 +1683,7 @@ function getWord(dict, id, kanjiDic, examples, dictWord, noteTypeName, deckPath)
|
|
|
1672
1683
|
}
|
|
1673
1684
|
if (word.kanji.length === 0) delete word.kanji;
|
|
1674
1685
|
}
|
|
1675
|
-
if (examples) {
|
|
1686
|
+
if (examples && dictWord.hasPhrases === true) {
|
|
1676
1687
|
const readings = new Set(
|
|
1677
1688
|
word.readings.filter(
|
|
1678
1689
|
(reading) => !reading.notes || reading.notes && !reading.notes.some(
|
|
@@ -1741,6 +1752,7 @@ function getWord(dict, id, kanjiDic, examples, dictWord, noteTypeName, deckPath)
|
|
|
1741
1752
|
}
|
|
1742
1753
|
}
|
|
1743
1754
|
function getKanji(kanjiChar, dict, jmDict, svgList, noteTypeName, deckPath) {
|
|
1755
|
+
var _a, _b, _c, _d;
|
|
1744
1756
|
try {
|
|
1745
1757
|
const dictKanji = dict.find(
|
|
1746
1758
|
(entry) => entry.kanji === kanjiChar
|
|
@@ -1855,26 +1867,28 @@ function getKanji(kanjiChar, dict, jmDict, svgList, noteTypeName, deckPath) {
|
|
|
1855
1867
|
let codePoint = kanji.kanji.codePointAt(0);
|
|
1856
1868
|
if (codePoint !== void 0) {
|
|
1857
1869
|
codePoint = codePoint.toString(16);
|
|
1870
|
+
const fileNames = [
|
|
1871
|
+
`0${codePoint}.svg`,
|
|
1872
|
+
`${codePoint}.svg`
|
|
1873
|
+
];
|
|
1858
1874
|
const svg = svgList.find(
|
|
1859
|
-
(svgFile) =>
|
|
1875
|
+
(svgFile) => fileNames.includes(svgFile.toLowerCase())
|
|
1860
1876
|
);
|
|
1861
1877
|
if (svg) kanji.svg = svg;
|
|
1862
1878
|
}
|
|
1863
1879
|
}
|
|
1864
1880
|
kanji.tags = [];
|
|
1865
|
-
if (
|
|
1866
|
-
kanji.
|
|
1867
|
-
kanji.
|
|
1868
|
-
(meaning) => meaning !== "(kokuji)"
|
|
1869
|
-
);
|
|
1881
|
+
if (dictKanji.isKokuji === true) {
|
|
1882
|
+
kanji.kokuji = true;
|
|
1883
|
+
kanji.tags.push("kanji::kokuji");
|
|
1870
1884
|
}
|
|
1871
1885
|
kanji.tags.push(
|
|
1872
|
-
|
|
1873
|
-
|
|
1874
|
-
|
|
1875
|
-
|
|
1876
|
-
|
|
1877
|
-
...kanji.
|
|
1886
|
+
`kanji::onyomi::${((_a = kanji.onyomi) == null ? void 0 : _a.length) ?? 0}`,
|
|
1887
|
+
`kanji::kunyomi::${((_b = kanji.kunyomi) == null ? void 0 : _b.length) ?? 0}`,
|
|
1888
|
+
`kanji::nanori::${((_c = kanji.nanori) == null ? void 0 : _c.length) ?? 0}`,
|
|
1889
|
+
`kanji::strokes::${kanji.strokes ?? "unknown"}`,
|
|
1890
|
+
`kanji::words::${((_d = kanji.words) == null ? void 0 : _d.length) ?? 0}`,
|
|
1891
|
+
...kanji.svg ? ["kanji::has_svg"] : []
|
|
1878
1892
|
);
|
|
1879
1893
|
return kanji;
|
|
1880
1894
|
} else throw new Error(`Kanji ${kanjiChar} not found`);
|
|
@@ -1883,6 +1897,7 @@ function getKanji(kanjiChar, dict, jmDict, svgList, noteTypeName, deckPath) {
|
|
|
1883
1897
|
}
|
|
1884
1898
|
}
|
|
1885
1899
|
function getKanjiExtended(kanjiChar, info, dict, useJpdbWords, jmDict, svgList, noteTypeName, deckPath) {
|
|
1900
|
+
var _a, _b;
|
|
1886
1901
|
try {
|
|
1887
1902
|
const kanji = getKanji(
|
|
1888
1903
|
kanjiChar,
|
|
@@ -1898,12 +1913,25 @@ function getKanjiExtended(kanjiChar, info, dict, useJpdbWords, jmDict, svgList,
|
|
|
1898
1913
|
kanji.mnemonic = info.mnemonic;
|
|
1899
1914
|
if (useJpdbWords === true && info.words && info.words.length > 0)
|
|
1900
1915
|
kanji.words = info.words;
|
|
1901
|
-
if (kanji.
|
|
1902
|
-
kanji.tags.push(
|
|
1903
|
-
|
|
1904
|
-
|
|
1905
|
-
|
|
1906
|
-
|
|
1916
|
+
if (kanji.tags) {
|
|
1917
|
+
kanji.tags.push(`kanji::components::${((_a = kanji.components) == null ? void 0 : _a.length) ?? 0}`);
|
|
1918
|
+
if (kanji.mnemonic && kanji.mnemonic.length > 0)
|
|
1919
|
+
kanji.tags.push("kanji::has_mnemonic");
|
|
1920
|
+
if (useJpdbWords === true && kanji.words) {
|
|
1921
|
+
if (!kanji.tags.some((tag, index) => {
|
|
1922
|
+
var _a2;
|
|
1923
|
+
if (tag.startsWith("kanji::words::")) {
|
|
1924
|
+
kanji.tags.splice(
|
|
1925
|
+
index,
|
|
1926
|
+
1,
|
|
1927
|
+
`kanji::words::${((_a2 = kanji.words) == null ? void 0 : _a2.length) ?? 0}`
|
|
1928
|
+
);
|
|
1929
|
+
return true;
|
|
1930
|
+
} else return false;
|
|
1931
|
+
}))
|
|
1932
|
+
kanji.tags.push(`kanji::words::${((_b = kanji.words) == null ? void 0 : _b.length) ?? 0}`);
|
|
1933
|
+
}
|
|
1934
|
+
}
|
|
1907
1935
|
if (kanji.fromJpdb === true && (kanji.mnemonic || kanji.components && kanji.components.length > 0 || kanji.words))
|
|
1908
1936
|
kanji.source = `https://jpdb.io/kanji/${kanji.kanji}#a`;
|
|
1909
1937
|
return kanji;
|
|
@@ -2108,12 +2136,12 @@ function generateAnkiNote(entry) {
|
|
|
2108
2136
|
(onyomiEntry) => createEntry(
|
|
2109
2137
|
`<span class="kanji kanji-onyomi">${onyomiEntry}</span>`
|
|
2110
2138
|
)
|
|
2111
|
-
).join("") :
|
|
2139
|
+
).join("") : `<span class="kanji kanji-onyomi">(no onyomi) ${entry.kokuji === true ? "(kokuji)" : ""}</span`,
|
|
2112
2140
|
entry.kunyomi ? entry.kunyomi.map(
|
|
2113
2141
|
(kunyomiEntry) => createEntry(
|
|
2114
2142
|
`<span class="kanji kanji-kunyomi">${kunyomiEntry}</span>`
|
|
2115
2143
|
)
|
|
2116
|
-
).join("") :
|
|
2144
|
+
).join("") : `<span class="kanji kanji-kunyomi">(no kunyomi) ${entry.kokuji === true ? "(kokuji)" : ""}</span>`,
|
|
2117
2145
|
entry.nanori ? entry.nanori.map(
|
|
2118
2146
|
(nanoriEntry) => createEntry(
|
|
2119
2147
|
`<span class="kanji kanji-nanori">${nanoriEntry}</span>`
|