nihongo
Version:
Simple Japanese language utility library
130 lines (108 loc) • 3.15 kB
JavaScript
// Author: Darren Lester
// Email: dsslester@gmail.com
// License: MIT
;
const kyouikuKanji = require("kyoiku-kanji");
const jouyouKanji = require("joyo-kanji").kanji;
const isKanji = require("iskanji");
const includes = require("array-includes");
const some = require("string-some");
//////// CHARACTER ANALYSIS ////////
// determine whether a character is a hiragana character
function isHiragana(ch) {
return ch >= "\u3040" && ch <= "\u309f";
}
// determine whether a character is a katakana character
function isKatakana(ch) {
return ch >= "\u30a0" && ch <= "\u30ff";
}
// determine whether a character is a kana character
function isKana(ch) {
return isHiragana(ch) || isKatakana(ch);
}
// determine whether a character is a Japanese character
function isJapanese(ch) {
return isKana(ch) || isKanji(ch);
}
// determine whether a character is a kyouiku kanji character
function isKyouikuKanji(ch) {
return includes(kyouikuKanji.grade1, ch) ||
includes(kyouikuKanji.grade2, ch) ||
includes(kyouikuKanji.grade3, ch) ||
includes(kyouikuKanji.grade4, ch) ||
includes(kyouikuKanji.grade5, ch) ||
includes(kyouikuKanji.grade6, ch);
}
// determine whether a character is a jouyou kanji character
function isJouyouKanji(ch) {
return includes(jouyouKanji, ch);
}
// return the grade of a kyouiku kanji
function getKyouikuGrade(ch) {
let grade;
if (includes(kyouikuKanji.grade1, ch)) {
grade = 1;
}
else if (includes(kyouikuKanji.grade2, ch)) {
grade = 2;
}
else if (includes(kyouikuKanji.grade3, ch)) {
grade = 3;
}
else if (includes(kyouikuKanji.grade4, ch)) {
grade = 4;
}
else if (includes(kyouikuKanji.grade5, ch)) {
grade = 5;
}
else if (includes(kyouikuKanji.grade6, ch)) {
grade = 6;
}
return grade;
}
//////// SENTENCE ANALYSIS ////////
// determine whether a string contains hiragana characters
function hasHiragana(str) {
return some(str, isHiragana);
}
// determine whether a string contains katakana characters
function hasKatakana(str) {
return some(str, isKatakana);
}
// determine whether a string contains kana characters
function hasKana(str) {
return some(str, isKana);
}
function hasKanji(str) {
return some(str, isKanji);
}
// determine whether a string contains Japanese characters
function hasJapanese(str) {
return some(str, isJapanese);
}
// determine whether a string contains hiragana, katakana or kanji characters
function contains(str) {
return {
hiragana: hasHiragana(str),
katakana: hasKatakana(str),
kanji: hasKanji(str)
};
}
module.exports = {
// CHARACTER ANALYSIS
isHiragana: isHiragana,
isKatakana: isKatakana,
isKana: isKana,
isKanji: isKanji,
isJapanese: isJapanese,
isKyouikuKanji: isKyouikuKanji,
isJouyouKanji: isJouyouKanji,
getKyouikuGrade: getKyouikuGrade,
// SENTENCE ANALYSIS
hasHiragana: hasHiragana,
hasKatakana: hasKatakana,
hasKana: hasKana,
hasKanji: hasKanji,
hasJapanese: hasJapanese,
contains: contains
};