Monika is a Japanese strings microlibrary for Nim. It provides a clean, "implicit-style" API for handling characters, strings, and conversions. Ported from JpnUtils.
- Implicit Conversions: Treat standard strings as Japanese objects via Nim converters.
- Script Detection: Easily check for Hiragana, Katakana, and Kanji.
- Diacritics: Detect Dakuten (voiced) and Handakuten (semi-voiced) marks.
- Half-Width Conversion: Efficiently convert between full-width and half-width forms.
- Punctuation Wrappers: Scala-style string wrapping for Japanese quotes.
Add Monika to your .nimble file:
requires "monika >= 0.1.0"Or install via command line:
nimble install https://github.com/AranaDeDoros/MonikaMonika uses a converter to extend standard strings. Simply import Monika and start using the utility methods.
import monika/japaneseutils
import monika/punctuation
import monika/halfwidthconverter
if "こんにちは".hasHiragana:
echo "Contains Hiragana!"
if "モニカ".hasKatakana:
echo "Contains Katakana!"
if "学校".hasKanji:
echo "Contains Kanji!"
# full-width to half-width
echo "ハロー、ワールド!".toHalfWidth
# Output: ハロー、ワールド!
# Check for voiced marks
if "が".hasDakuten:
echo "This character is voiced."
let msg = "Hello"
echo msg.wrapInSingleQuotes # Output: 「Hello」
echo msg.wrapInDoubleQuotes # Output: 『Hello』
let s = "ガキ"
let h = "が".asRune()
let k = "エ".asRune()
if h.isSome:
echo h.get.hiraToKata() # Output: カ
else:
echo "empty string"
if k.isSome:
echo k.get.kataToHira() # Output: え
else:
echo "empty string"
let str = "日本語abcカナ"
echo str.containsOnly({Kanji, Katakana}) # false
let summary = str.scriptSummary()
echo summary.hiragana # 0
echo summary.katakana # 2
echo summary.kanji # 3
echo summary.other # 3nimble test- monika/japaneseutils: Core logic and string converters.
- monika/kanadiacritics: Logic for voiced and semi-voiced marks.
- monika/punctuation: Japanese-specific punctuation utilities.
- monika/halfwidthconverter: Japanese-specific halfwidthconverter utilities.
