diff --git a/src/wanikani.ts b/src/wanikani.ts index 68457f0..7503baa 100644 --- a/src/wanikani.ts +++ b/src/wanikani.ts @@ -433,6 +433,7 @@ export class WaniKani { ja: string; en: string; }[]; + meaning: string; } >(); vocabularies.map((v) => { @@ -442,6 +443,10 @@ export class WaniKani { sentenceMap.set(v.data.characters, { ...sent, sentences: v.data.context_sentences, + meaning: v.data.meanings + .sort((m1, m2) => Number(m2.primary) - Number(m1.primary)) + .map((m) => m.meaning) + .join('; '), }); }); if (!sentenceMap.size) return; @@ -476,23 +481,38 @@ export class WaniKani { [fields.sentenceEn]: sent.en, }; - if ( - fields.sentenceCloze && - !n.fields[fields.sentenceCloze]?.value - ) { - const clozeChar = '__'; - let newSent = sent.sentences - .map(({ ja, en }) => `${ja}
${en}`) - .join('
') - .replace(cleanJa, clozeChar); - - cleanJa.split(/[\p{sc=Hiragana}]+/gu).map((c) => { - if (c) { - newSent = newSent.replace(c, clozeChar); - } - }); - - fieldUpdate[fields.sentenceCloze] = newSent; + if (fields.sentenceCloze) { + let clozeSent = n.fields[fields.sentenceCloze]?.value || ''; + + if (!clozeSent && sent.sentences.length) { + const clozeChar = '__'; + let newSent = sent.sentences + .map(({ ja, en }) => `${ja}
${en}`) + .join('
') + .replace(cleanJa, clozeChar); + + cleanJa.split(/[\p{sc=Hiragana}]+/gu).map((c) => { + if (c) { + newSent = newSent.replace(c, clozeChar); + } + }); + + fieldUpdate[fields.sentenceCloze] = newSent; + clozeSent = newSent; + } + + const notJa = '[^\\p{sc=Han}\\p{sc=Katakana}\\p{sc=Hiragana}]+'; + + if ( + clozeSent && + !new RegExp( + `(^${notJa}
|

${notJa}$)`, + 'u', + ).test(clozeSent) + ) { + fieldUpdate[fields.sentenceCloze] = + sent.meaning + '

' + clozeSent; + } } notesToUpdate.push({