Merge pull request #408 from toasted-nutbread/use-code-point

Replace charCodeAt and fromCharCode with codePointAt and fromCodePoint
This commit is contained in:
toasted-nutbread 2020-03-10 19:24:24 -04:00 committed by GitHub
commit f7bbcb6df4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 34 additions and 32 deletions

View File

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
/*global jpIsCharCodeKanji, jpDistributeFurigana, Handlebars*/
/*global jpIsCodePointKanji, jpDistributeFurigana, Handlebars*/
function handlebarsEscape(text) {
return Handlebars.Utils.escapeExpression(text);
@ -62,7 +62,7 @@ function handlebarsFuriganaPlain(options) {
function handlebarsKanjiLinks(options) {
let result = '';
for (const c of options.fn(this)) {
if (jpIsCharCodeKanji(c.charCodeAt(0))) {
if (jpIsCodePointKanji(c.codePointAt(0))) {
result += `<a href="#" class="kanji-link">${c}</a>`;
} else {
result += c;

View File

@ -115,9 +115,9 @@ const JP_JAPANESE_RANGES = [
// Helper functions
function _jpIsCharCodeInRanges(charCode, ranges) {
function _jpIsCodePointInRanges(codePoint, ranges) {
for (const [min, max] of ranges) {
if (charCode >= min && charCode <= max) {
if (codePoint >= min && codePoint <= max) {
return true;
}
}
@ -127,16 +127,16 @@ function _jpIsCharCodeInRanges(charCode, ranges) {
// Character code testing functions
function jpIsCharCodeKanji(charCode) {
return _jpIsCharCodeInRanges(charCode, JP_CJK_RANGES);
function jpIsCodePointKanji(codePoint) {
return _jpIsCodePointInRanges(codePoint, JP_CJK_RANGES);
}
function jpIsCharCodeKana(charCode) {
return _jpIsCharCodeInRanges(charCode, JP_KANA_RANGES);
function jpIsCodePointKana(codePoint) {
return _jpIsCodePointInRanges(codePoint, JP_KANA_RANGES);
}
function jpIsCharCodeJapanese(charCode) {
return _jpIsCharCodeInRanges(charCode, JP_JAPANESE_RANGES);
function jpIsCodePointJapanese(codePoint) {
return _jpIsCodePointInRanges(codePoint, JP_JAPANESE_RANGES);
}
@ -144,8 +144,8 @@ function jpIsCharCodeJapanese(charCode) {
function jpIsStringEntirelyKana(str) {
if (str.length === 0) { return false; }
for (let i = 0, ii = str.length; i < ii; ++i) {
if (!jpIsCharCodeKana(str.charCodeAt(i))) {
for (const c of str) {
if (!jpIsCodePointKana(c.codePointAt(0))) {
return false;
}
}
@ -154,8 +154,8 @@ function jpIsStringEntirelyKana(str) {
function jpIsStringPartiallyJapanese(str) {
if (str.length === 0) { return false; }
for (let i = 0, ii = str.length; i < ii; ++i) {
if (jpIsCharCodeJapanese(str.charCodeAt(i))) {
for (const c of str) {
if (jpIsCodePointJapanese(c.codePointAt(0))) {
return true;
}
}
@ -264,8 +264,8 @@ function jpDistributeFurigana(expression, reading) {
const groups = [];
let modePrev = null;
for (const c of expression) {
const charCode = c.charCodeAt(0);
const modeCurr = jpIsCharCodeKanji(charCode) || charCode === JP_ITERATION_MARK_CHAR_CODE ? 'kanji' : 'kana';
const codePoint = c.codePointAt(0);
const modeCurr = jpIsCodePointKanji(codePoint) || codePoint === JP_ITERATION_MARK_CHAR_CODE ? 'kanji' : 'kana';
if (modeCurr === modePrev) {
groups[groups.length - 1].text += c;
} else {
@ -311,10 +311,11 @@ function jpDistributeFuriganaInflected(expression, reading, source) {
function jpConvertHalfWidthKanaToFullWidth(text, sourceMapping) {
let result = '';
const ii = text.length;
const hasSourceMapping = Array.isArray(sourceMapping);
for (let i = 0; i < ii; ++i) {
// This function is safe to use charCodeAt instead of codePointAt, since all
// the relevant characters are represented with a single UTF-16 character code.
for (let i = 0, ii = text.length; i < ii; ++i) {
const c = text[i];
const mapping = JP_HALFWIDTH_KATAKANA_MAPPING.get(c);
if (typeof mapping !== 'string') {
@ -355,13 +356,13 @@ function jpConvertHalfWidthKanaToFullWidth(text, sourceMapping) {
function jpConvertNumericTofullWidth(text) {
let result = '';
for (let i = 0, ii = text.length; i < ii; ++i) {
let c = text.charCodeAt(i);
for (const char of text) {
let c = char.codePointAt(0);
if (c >= 0x30 && c <= 0x39) { // ['0', '9']
c += 0xff10 - 0x30; // 0xff10 = '0' full width
result += String.fromCharCode(c);
result += String.fromCodePoint(c);
} else {
result += text[i];
result += char;
}
}
return result;
@ -377,9 +378,9 @@ function jpConvertAlphabeticToKana(text, sourceMapping) {
sourceMapping.fill(1);
}
for (let i = 0; i < ii; ++i) {
for (const char of text) {
// Note: 0x61 is the character code for 'a'
let c = text.charCodeAt(i);
let c = char.codePointAt(0);
if (c >= 0x41 && c <= 0x5a) { // ['A', 'Z']
c += (0x61 - 0x41);
} else if (c >= 0x61 && c <= 0x7a) { // ['a', 'z']
@ -395,10 +396,10 @@ function jpConvertAlphabeticToKana(text, sourceMapping) {
result += jpToHiragana(part, sourceMapping, result.length);
part = '';
}
result += text[i];
result += char;
continue;
}
part += String.fromCharCode(c);
part += String.fromCodePoint(c);
}
if (part.length > 0) {

View File

@ -20,7 +20,7 @@
dictTermsMergeBySequence, dictTagBuildSource, dictTermsMergeByGloss, dictTermsSort, dictTagsSort
dictEnabledSet, dictTermsGroup, dictTermsCompressTags, dictTermsUndupe, dictTagSanitize
jpDistributeFurigana, jpConvertHalfWidthKanaToFullWidth, jpConvertNumericTofullWidth
jpConvertAlphabeticToKana, jpHiraganaToKatakana, jpKatakanaToHiragana, jpIsCharCodeJapanese
jpConvertAlphabeticToKana, jpHiraganaToKatakana, jpKatakanaToHiragana, jpIsCodePointJapanese
Database, Deinflector*/
class Translator {
@ -621,13 +621,14 @@ class Translator {
static getSearchableText(text, options) {
if (!options.scanning.alphanumeric) {
const ii = text.length;
for (let i = 0; i < ii; ++i) {
if (!jpIsCharCodeJapanese(text.charCodeAt(i))) {
text = text.substring(0, i);
let newText = '';
for (const c of text) {
if (!jpIsCodePointJapanese(c.codePointAt(0))) {
break;
}
newText += c;
}
text = newText;
}
return text;

View File

@ -298,7 +298,7 @@ class DisplayGenerator {
}
static _isCharacterKanji(c) {
const code = c.charCodeAt(0);
const code = c.codePointAt(0);
return (
code >= 0x4e00 && code < 0x9fb0 ||
code >= 0x3400 && code < 0x4dc0