diff options
Diffstat (limited to 'ext/bg/js')
-rw-r--r-- | ext/bg/js/anki-note-builder.js | 10 | ||||
-rw-r--r-- | ext/bg/js/settings/anki-controller.js | 1 | ||||
-rw-r--r-- | ext/bg/js/template-renderer.js | 31 |
3 files changed, 32 insertions, 10 deletions
diff --git a/ext/bg/js/anki-note-builder.js b/ext/bg/js/anki-note-builder.js index 33cd3a0b..b6114e4b 100644 --- a/ext/bg/js/anki-note-builder.js +++ b/ext/bg/js/anki-note-builder.js @@ -108,9 +108,19 @@ class AnkiNoteBuilder { _createNoteData(definition, mode, context, resultOutputMode, glossaryLayoutMode, compactTags) { const pitches = DictionaryDataUtil.getPitchAccentInfos(definition); const pitchCount = pitches.reduce((i, v) => i + v.pitches.length, 0); + const uniqueExpressions = new Set(); + const uniqueReadings = new Set(); + if (definition.type !== 'kanji') { + for (const {expression, reading} of definition.expressions) { + uniqueExpressions.add(expression); + uniqueReadings.add(reading); + } + } return { marker: null, definition, + uniqueExpressions: [...uniqueExpressions], + uniqueReadings: [...uniqueReadings], pitches, pitchCount, group: resultOutputMode === 'group', diff --git a/ext/bg/js/settings/anki-controller.js b/ext/bg/js/settings/anki-controller.js index d9b1591e..957f86d9 100644 --- a/ext/bg/js/settings/anki-controller.js +++ b/ext/bg/js/settings/anki-controller.js @@ -83,6 +83,7 @@ class AnkiController { 'dictionary', 'document-title', 'expression', + 'frequencies', 'furigana', 'furigana-plain', 'glossary', diff --git a/ext/bg/js/template-renderer.js b/ext/bg/js/template-renderer.js index 5dd33814..c1995acd 100644 --- a/ext/bg/js/template-renderer.js +++ b/ext/bg/js/template-renderer.js @@ -117,13 +117,13 @@ class TemplateRenderer { return this._escape(dump); } - _furigana(context, options) { - const definition = options.fn(context); - const segs = jp.distributeFurigana(definition.expression, definition.reading); + _furigana(context, ...args) { + const {expression, reading} = this._getFuriganaExpressionAndReading(context, ...args); + const segs = jp.distributeFurigana(expression, reading); let result = ''; for (const seg of segs) { - if (seg.furigana) { + if (seg.furigana.length > 0) { result += `<ruby>${seg.text}<rt>${seg.furigana}</rt></ruby>`; } else { result += seg.text; @@ -133,20 +133,31 @@ class TemplateRenderer { return result; } - _furiganaPlain(context, options) { - const definition = options.fn(context); - const segs = jp.distributeFurigana(definition.expression, definition.reading); + _furiganaPlain(context, ...args) { + const {expression, reading} = this._getFuriganaExpressionAndReading(context, ...args); + const segs = jp.distributeFurigana(expression, reading); let result = ''; for (const seg of segs) { - if (seg.furigana) { - result += ` ${seg.text}[${seg.furigana}]`; + if (seg.furigana.length > 0) { + if (result.length > 0) { result += ' '; } + result += `${seg.text}[${seg.furigana}]`; } else { result += seg.text; } } - return result.trimLeft(); + return result; + } + + _getFuriganaExpressionAndReading(context, ...args) { + const options = args[args.length - 1]; + if (args.length >= 3) { + return {expression: args[0], reading: args[1]}; + } else { + const {expression, reading} = options.fn(context); + return {expression, reading}; + } } _kanjiLinks(context, options) { |