γ―γγ«γ <--> WanaKana <--> γγͺγγͺ
Javascript utility library for checking and converting between Kanji, Hiragana, Katakana, and Romaji
Demo
Visit the website to see WanaKana in action., (*1)
Documentation
Extended API reference, (*2)
Quick Start
Install
yarn add wanakana
# alternatively: npm install wanakana
Or to get the minified browser (umd) bundle
https://unpkg.com/wanakana, (*3)
HTML:
<input type="text" id="wanakana-input" autocapitalize="none" />
<script src="https://unpkg.com/wanakana"></script>
<script>
const textInput = document.querySelector('#wanakana-input');
wanakana.bind(textInput); // uses IMEMode toKana() as default
</script>
JavaScript:
/* UMD/CommonJS */
const wanakana = require('wanakana');
/* ES modules */
import wanakana from 'wanakana';
// with destructuring
import { toKana, isRomaji } from 'wanakana';
// or directly reference single methods for smaller builds:
import isKanji from 'wanakana/isKanji';
/*** DEFAULT OPTIONS ***/
{
// Use obsolete kana characters, such as γ and γ.
useObsoleteKana: false,
// Pass through romaji when using toKatakana() or toHiragana()
passRomaji: false,
// Convert katakana to uppercase when using toRomaji()
upcaseKatakana: false,
// Convert characters from a text input while being typed.
IMEMode: false, // alternatives are: true, 'toHiragana', or 'toKatakana'
}
/*** DOM HELPERS ***/
// Automatically converts text using an eventListener on input
// bind() uses option: { IMEMode: true } with `toKana()` by default
// Alternatives are: 'toHiragana' or 'toKatakana' to enforce kana type
wanakana.bind(domElement [, options]);
// Removes event listener
wanakana.unbind(domElement);
/*** TEXT CHECKING UTILITIES ***/
wanakana.isJapanese('ζ³£γθ«γοΌγοΌοΏ₯')
// => true
wanakana.isKana('γγΌγ’')
// => true
wanakana.isHiragana('γγΌγ')
// => true
wanakana.isKatakana('γ²γΌγ ')
// => true
wanakana.isKanji('εθ
Ή')
// => true
wanakana.isMixed('γθ
ΉA')
// => true
wanakana.isRomaji('TΕkyΕ and Εsaka')
// => true
/*
* toKana notes:
* Lowercase -> Hiragana.
* Uppercase -> Katakana.
* Non-romaji and _English_ punctuation is passed through: 123 @#$%
* Limited Japanese equivalent punctuation is converted:
* !?.:/,~-ββββ[](){}
* οΌοΌγοΌγ»γγγΌγγγγοΌ»οΌ½οΌοΌο½ο½
*/
wanakana.toKana('ONAJI buttsuuji')
// => 'γͺγγΈ γΆγ£γ€γγ'
wanakana.toKana('εΊ§η¦
βzazenβγΉγΏγ€γ«')
// => 'εΊ§η¦
γγγγγγΉγΏγ€γ«'
wanakana.toKana('batsuge-mu')
// => 'γ°γ€γγΌγ'
wanakana.toHiragana('toukyou, γͺγͺγ΅γ«')
// => 'γ¨γγγγγγγγγγ'
wanakana.toHiragana('only γ«γ', { passRomaji: true })
// => 'only γγͺ'
wanakana.toHiragana('wi', { useObsoleteKana: true })
// => 'γ'
wanakana.toKatakana('toukyou, γγγγ')
// => 'γγ¦γγ§γ¦γγγͺγͺγ΅γ«'
wanakana.toKatakana('only γγͺ', { passRomaji: true })
// => 'only γ«γ'
wanakana.toKatakana('wi', { useObsoleteKana: true })
// => 'γ°'
wanakana.toRomaji('γ²γγγͺγγ«γΏγ«γ')
// => 'hiragana katakana'
wanakana.toRomaji('γ²γγγͺγγ«γΏγ«γ', { upcaseKatakana: true })
// => 'hiragana KATAKANA'
/*** EXTRA UTILITIES ***/
wanakana.stripOkurigana('γη₯γ')
// => 'γη₯'
wanakana.stripOkurigana('θΈγΏθΎΌγ')
// => 'θΈγΏθΎΌ'
wanakana.stripOkurigana('θΈγΏθΎΌγ', { all: true })
// => 'θΈθΎΌ'
wanakana.tokenize('γ΅γ΅γγ')
// => ['γ΅γ΅', 'γγ']
wanakana.tokenize('ζγ')
// => ['ζ', 'γ']
wanakana.tokenize('I said "η§γ―ζ²γγ"')
// => ['I said "','η§', 'γ―', 'ζ²', 'γγ', '"']
Contributing
Please see CONTRIBUTING.md, (*4)
Contributors
Credits
Project sponsored by Tofugu & WaniKani, (*5)
Ports
The following are ports created by the community:
- Java (MasterKale/WanaKanaJava), (*6)