aboutsummaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
Diffstat (limited to 'ext')
-rw-r--r--ext/js/language/sandbox/japanese-util.js27
-rw-r--r--ext/js/templates/sandbox/anki-template-renderer.js9
2 files changed, 23 insertions, 13 deletions
diff --git a/ext/js/language/sandbox/japanese-util.js b/ext/js/language/sandbox/japanese-util.js
index 9b58d255..a7542e79 100644
--- a/ext/js/language/sandbox/japanese-util.js
+++ b/ext/js/language/sandbox/japanese-util.js
@@ -297,20 +297,27 @@ const JapaneseUtil = (() => {
return this._wanakana !== null;
}
- convertKatakanaToHiragana(text) {
+ convertKatakanaToHiragana(text, keepProlongedSoundMarks=false) {
let result = '';
const offset = (HIRAGANA_CONVERSION_RANGE[0] - KATAKANA_CONVERSION_RANGE[0]);
for (let char of text) {
const codePoint = char.codePointAt(0);
- if (codePoint === KATAKANA_SMALL_KA_CODE_POINT || codePoint === KATAKANA_SMALL_KE_CODE_POINT) {
- // No change
- } else if (codePoint === KANA_PROLONGED_SOUND_MARK_CODE_POINT) {
- if (result.length > 0) {
- const char2 = getProlongedHiragana(result[result.length - 1]);
- if (char2 !== null) { char = char2; }
- }
- } else if (isCodePointInRange(codePoint, KATAKANA_CONVERSION_RANGE)) {
- char = String.fromCodePoint(codePoint + offset);
+ switch (codePoint) {
+ case KATAKANA_SMALL_KA_CODE_POINT:
+ case KATAKANA_SMALL_KE_CODE_POINT:
+ // No change
+ break;
+ case KANA_PROLONGED_SOUND_MARK_CODE_POINT:
+ if (!keepProlongedSoundMarks && result.length > 0) {
+ const char2 = getProlongedHiragana(result[result.length - 1]);
+ if (char2 !== null) { char = char2; }
+ }
+ break;
+ default:
+ if (isCodePointInRange(codePoint, KATAKANA_CONVERSION_RANGE)) {
+ char = String.fromCodePoint(codePoint + offset);
+ }
+ break;
}
result += char;
}
diff --git a/ext/js/templates/sandbox/anki-template-renderer.js b/ext/js/templates/sandbox/anki-template-renderer.js
index b721fadc..ae89aade 100644
--- a/ext/js/templates/sandbox/anki-template-renderer.js
+++ b/ext/js/templates/sandbox/anki-template-renderer.js
@@ -607,13 +607,16 @@ class AnkiTemplateRenderer {
_hiragana(context, ...args) {
const ii = args.length - 1;
- const value = (ii > 0 ? args[0] : args[ii].fn(context));
- return this._japaneseUtil.convertKatakanaToHiragana(value);
+ const options = args[ii];
+ const {keepProlongedSoundMarks} = options.hash;
+ const value = (ii > 0 ? args[0] : options.fn(context));
+ return this._japaneseUtil.convertKatakanaToHiragana(value, keepProlongedSoundMarks === true);
}
_katakana(context, ...args) {
const ii = args.length - 1;
- const value = (ii > 0 ? args[0] : args[ii].fn(context));
+ const options = args[ii];
+ const value = (ii > 0 ? args[0] : options.fn(context));
return this._japaneseUtil.convertHiraganaToKatakana(value);
}
}