aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/js/background/backend.js2
-rw-r--r--ext/js/display/query-parser.js26
-rw-r--r--ext/js/language/japanese-util.js29
-rw-r--r--test/test-japanese-util.js (renamed from test/test-japanese.js)43
4 files changed, 34 insertions, 66 deletions
diff --git a/ext/js/background/backend.js b/ext/js/background/backend.js
index c797bbf5..af847610 100644
--- a/ext/js/background/backend.js
+++ b/ext/js/background/backend.js
@@ -1066,7 +1066,7 @@ class Backend {
if (
dictionaryEntries.length > 0 &&
originalTextLength > 0 &&
- (originalTextLength !== character.length || this._japaneseUtil.isCodePointJapanese(codePoint))
+ (originalTextLength !== character.length || jp.isCodePointJapanese(codePoint))
) {
previousUngroupedSegment = null;
const {headwords: [{term, reading}]} = dictionaryEntries[0];
diff --git a/ext/js/display/query-parser.js b/ext/js/display/query-parser.js
index 0acf6ec8..cbcf7cff 100644
--- a/ext/js/display/query-parser.js
+++ b/ext/js/display/query-parser.js
@@ -208,8 +208,6 @@ class QueryParser extends EventDispatcher {
}
_createParseResult(data) {
- const jp = this._japaneseUtil;
- const readingMode = this._readingMode;
const fragment = document.createDocumentFragment();
for (const term of data) {
const termNode = document.createElement('span');
@@ -218,7 +216,7 @@ class QueryParser extends EventDispatcher {
if (reading.length === 0) {
termNode.appendChild(document.createTextNode(text));
} else {
- const reading2 = jp.convertReading(text, reading, readingMode);
+ const reading2 = this._convertReading(text, reading);
termNode.appendChild(this._createSegment(text, reading2));
}
}
@@ -245,4 +243,26 @@ class QueryParser extends EventDispatcher {
return segmentNode;
}
+
+ _convertReading(term, reading) {
+ switch (this._readingMode) {
+ case 'hiragana':
+ return this._japaneseUtil.convertKatakanaToHiragana(reading);
+ case 'katakana':
+ return this._japaneseUtil.convertHiraganaToKatakana(reading);
+ case 'romaji':
+ if (this._japaneseUtil.convertToRomajiSupported()) {
+ if (reading.length > 0) {
+ return this._japaneseUtil.convertToRomaji(reading);
+ } else if (this._japaneseUtil.isStringEntirelyKana(term)) {
+ return this._japaneseUtil.convertToRomaji(term);
+ }
+ }
+ return reading;
+ case 'none':
+ return '';
+ default:
+ return reading;
+ }
+ }
}
diff --git a/ext/js/language/japanese-util.js b/ext/js/language/japanese-util.js
index 7ee726b2..9d7ad0d8 100644
--- a/ext/js/language/japanese-util.js
+++ b/ext/js/language/japanese-util.js
@@ -277,6 +277,10 @@ const JapaneseUtil = (() => {
return this._getWanakana().toKana(text);
}
+ convertToKanaSupported() {
+ return this._wanakana !== null;
+ }
+
convertKatakanaToHiragana(text) {
let result = '';
const offset = (HIRAGANA_CONVERSION_RANGE[0] - KATAKANA_CONVERSION_RANGE[0]);
@@ -315,25 +319,8 @@ const JapaneseUtil = (() => {
return wanakana.toRomaji(text);
}
- convertReading(term, reading, readingMode) {
- switch (readingMode) {
- case 'hiragana':
- return this.convertKatakanaToHiragana(reading);
- case 'katakana':
- return this.convertHiraganaToKatakana(reading);
- case 'romaji':
- if (reading.length > 0) {
- return this.convertToRomaji(reading);
- } else if (this.isStringEntirelyKana(term)) {
- return this.convertToRomaji(term);
- } else {
- return reading;
- }
- case 'none':
- return '';
- default:
- return reading;
- }
+ convertToRomajiSupported() {
+ return this._wanakana !== null;
}
convertNumericToFullWidth(text) {
@@ -426,6 +413,10 @@ const JapaneseUtil = (() => {
return result;
}
+ convertAlphabeticToKanaSupported() {
+ return this._wanakana !== null;
+ }
+
// Furigana distribution
distributeFurigana(term, reading) {
diff --git a/test/test-japanese.js b/test/test-japanese-util.js
index 9452a1d1..82abf50b 100644
--- a/test/test-japanese.js
+++ b/test/test-japanese-util.js
@@ -171,48 +171,6 @@ function testConvertToRomaji() {
}
}
-function testConvertReading() {
- const data = [
- [['アリガトウ', 'アリガトウ', 'hiragana'], 'ありがとう'],
- [['アリガトウ', 'アリガトウ', 'katakana'], 'アリガトウ'],
- [['アリガトウ', 'アリガトウ', 'romaji'], 'arigatou'],
- [['アリガトウ', 'アリガトウ', 'none'], ''],
- [['アリガトウ', 'アリガトウ', 'default'], 'アリガトウ'],
-
- [['ありがとう', 'ありがとう', 'hiragana'], 'ありがとう'],
- [['ありがとう', 'ありがとう', 'katakana'], 'アリガトウ'],
- [['ありがとう', 'ありがとう', 'romaji'], 'arigatou'],
- [['ありがとう', 'ありがとう', 'none'], ''],
- [['ありがとう', 'ありがとう', 'default'], 'ありがとう'],
-
- [['有り難う', 'ありがとう', 'hiragana'], 'ありがとう'],
- [['有り難う', 'ありがとう', 'katakana'], 'アリガトウ'],
- [['有り難う', 'ありがとう', 'romaji'], 'arigatou'],
- [['有り難う', 'ありがとう', 'none'], ''],
- [['有り難う', 'ありがとう', 'default'], 'ありがとう'],
-
- // Cases with falsy readings
-
- [['ありがとう', '', 'hiragana'], ''],
- [['ありがとう', '', 'katakana'], ''],
- [['ありがとう', '', 'romaji'], 'arigatou'],
- [['ありがとう', '', 'none'], ''],
- [['ありがとう', '', 'default'], ''],
-
- // Cases with falsy readings and kanji terms
-
- [['有り難う', '', 'hiragana'], ''],
- [['有り難う', '', 'katakana'], ''],
- [['有り難う', '', 'romaji'], ''],
- [['有り難う', '', 'none'], ''],
- [['有り難う', '', 'default'], '']
- ];
-
- for (const [[term, reading, readingMode], expected] of data) {
- assert.strictEqual(jp.convertReading(term, reading, readingMode), expected);
- }
-}
-
function testConvertNumericToFullWidth() {
const data = [
['0123456789', '0123456789'],
@@ -888,7 +846,6 @@ function main() {
testConvertKatakanaToHiragana();
testConvertHiraganaToKatakana();
testConvertToRomaji();
- testConvertReading();
testConvertNumericToFullWidth();
testConvertHalfWidthKanaToFullWidth();
testConvertAlphabeticToKana();