data(kana): Mozc's romaji table

hira.map and kata.map knew 152 keys of the 320 every Japanese IME
accepts: no nn, no small kana by x or l (xtu, xya, la, ...), no sya, tya,
zya, jya, dya, cya, tsa, thi, dhi, twu, kye, ye, fya, wha, and zi gave ぢ.
Both are now Mozc's default table in full, kata.map in Katakana, so that
they agree (kata.map alone had di → ディ and a lone v).  With Mozc, wi
and we are うぃ and うぇ (wyi and wye the old kana), the v row is ゔ, nn
is ん, and [ ] ~ and the z-prefixed symbols type 「 」 〜 ・ … ← ↓ ↑ →.

n' is a row now, not a case in transjp.  A row whose value is っ keeps
its consonant pending only when it is a doubled consonant or tch: xtu
and ltu are っ itself, so a lone っ can finally be typed.
This commit is contained in:
2026-08-17 00:58:36 +09:00
parent b77400fa86
commit 221117f93d
6 changed files with 536 additions and 181 deletions

View File

@@ -89,6 +89,7 @@ check-stress: $(PROG)
test: check test: check
verify-map: verify-map:
test "$$(cut -f1 map/hira.map)" = "$$(cut -f1 map/kata.map)"
python3 map/mktelex.py | cmp - map/telex.map python3 map/mktelex.py | cmp - map/telex.map
python3 -B map/mkemoji | cmp - map/emoji.dict python3 -B map/mkemoji | cmp - map/emoji.dict
python3 -B map/mkhanja | cmp - map/hanja.dict python3 -B map/mkhanja | cmp - map/hanja.dict

View File

@@ -38,6 +38,14 @@ are omitted. The import preserves the upstream license header and row order.
The retained data is BSD 3-Clause licensed by Choe Hwanjin; the complete text The retained data is BSD 3-Clause licensed by Choe Hwanjin; the complete text
is in `LICENSES/BSD-3-Clause-libhangul-hanja.txt`. is in `LICENSES/BSD-3-Clause-libhangul-hanja.txt`.
## Japanese romaji
`hira.map` and `kata.map` are Mozc's default romaji table, one row per key,
in gojūon order; `kata.map` is the same table in Katakana, and
`make verify-map` checks that the two have the same keys. A doubled
consonant, or `tch`, maps to っ and keeps the consonant pending; the engine
knows that rule, the table only lists the rows.
## Japanese dictionary data ## Japanese dictionary data
`kanji.dict` is the historical dictionary bundled with strans. Its own header `kanji.dict` is the historical dictionary bundled with strans. Its own header

View File

@@ -1,152 +1,321 @@
a あ a あ
- ー
i い i い
u う u う
e え e え
o お o お
ka か
ga が
ki き
kya きゃ kya きゃ
kyi きぃ
kyu きゅ kyu きゅ
kye きぇ
kyo きょ kyo きょ
gi ぎ ka か
gya ぎゃ ki き
gyu ぎゅ
gyo ぎょ
ku く ku く
gu ぐ
ke け ke け
ge げ
ko こ ko こ
kwa くぁ
kwi くぃ
kwu くぅ
kwe くぇ
kwo くぉ
gya ぎゃ
gyi ぎぃ
gyu ぎゅ
gye ぎぇ
gyo ぎょ
ga が
gi ぎ
gu ぐ
ge げ
go ご go ご
sa さ gwa ぐぁ
za ざ gwi ぐぃ
si し gwu ぐぅ
shi し gwe ぐぇ
gwo ぐぉ
sya しゃ
syi しぃ
syu しゅ
sye しぇ
syo しょ
sha しゃ sha しゃ
shi し
shu しゅ shu しゅ
she しぇ she しぇ
sho しょ sho しょ
syo しょ sa さ
zi si
su す
se せ
so そ
swa すぁ
swi すぃ
swu すぅ
swe すぇ
swo すぉ
z/ ・
z. …
z, ‥
zh ←
zj ↓
zk ↑
zl →
z- 〜
z[ 『
z] 』
zya じゃ
zyi じぃ
zyu じゅ
zye じぇ
zyo じょ
zwa ずぁ
zwi ずぃ
zwu ずぅ
zwe ずぇ
zwo ずぉ
za ざ
zi じ
zu ず
ze ぜ
zo ぞ
ja じゃ ja じゃ
ji じ
ju じゅ ju じゅ
je じぇ je じぇ
jo じょ jo じょ
su す jya じゃ
zu ず jyi じぃ
se せ jyu じゅ
ze ぜ jye じぇ
so そ jyo じょ
zo ぞ tya ちゃ
ta た tyi ちぃ
da だ
di ぢ
ti ち
chi ち
cha ちゃ
chu ちゅ
che ちぇ
tyu ちゅ tyu ちゅ
cho tye
ji じ tyo ちょ
tsa つぁ
tsi つぃ
tse つぇ
tso つぉ
tha てゃ
thi てぃ
t'i てぃ
thu てゅ
the てぇ
tho てょ
t'yu てゅ
twa とぁ
twi とぃ
twu とぅ
twe とぇ
two とぉ
t'u とぅ
ta た
ti ち
tu つ tu つ
tsu つ tsu つ
du づ
te て te て
de で
to と to と
dya ぢゃ
dyi ぢぃ
dyu ぢゅ
dye ぢぇ
dyo ぢょ
dha でゃ
dhi でぃ
d'i でぃ
dhu でゅ
dhe でぇ
dho でょ
d'yu でゅ
dwa どぁ
dwi どぃ
dwu どぅ
dwe どぇ
dwo どぉ
d'u どぅ
da だ
di ぢ
du づ
de で
do ど do ど
cha ちゃ
chi ち
chu ちゅ
che ちぇ
cho ちょ
cya ちゃ
cyi ちぃ
cyu ちゅ
cye ちぇ
cyo ちょ
ca か
ci し
cu く
ce せ
co こ
nya にゃ
nyi にぃ
nyu にゅ
nye にぇ
nyo にょ
n' ん
nn ん
n ん
na な na な
ni に ni に
nya にゃ
nyu にゅ
nyo にょ
nu ぬ nu ぬ
ne ね ne ね
no の no の
ha は
ba ば
va ば
pa ぱ
hi ひ
hya ひゃ hya ひゃ
hyi ひぃ
hyu ひゅ hyu ひゅ
hye ひぇ
hyo ひょ hyo ひょ
bi び hwa ふぁ
bya びゃ hwi ふぃ
byu びゅ hwe ふぇ
byo びょ hwo ふぉ
vi び hwyu ふゅ
pi ぴ ha は
pya ぴゃ hi ひ
pyu ぴゅ
pyo ぴょ
hu ふ hu ふ
fu ふ he へ
ho ほ
fa ふぁ fa ふぁ
fi ふぃ fi ふぃ
fu ふ
fe ふぇ fe ふぇ
fo ふぉ fo ふぉ
fya ふゃ
fyu ふゅ
fyo ふょ
bya びゃ
byi びぃ
byu びゅ
bye びぇ
byo びょ
ba ば
bi び
bu ぶ bu ぶ
vu ぶ
pu ぷ
he へ
be べ be べ
ve べ
pe ぺ
ho ほ
bo ぼ bo ぼ
vo ぼ pya ぴゃ
pyi ぴぃ
pyu ぴゅ
pye ぴぇ
pyo ぴょ
pa ぱ
pi ぴ
pu ぷ
pe ぺ
po ぽ po ぽ
mya みゃ
myi みぃ
myu みゅ
mye みぇ
myo みょ
ma ま ma ま
mi み mi み
mya みゃ
myu みゅ
myo みょ
mu む mu む
me め me め
mo も mo も
ye いぇ
ya や ya や
yu ゆ yu ゆ
yo よ yo よ
rya りゃ
ryi りぃ
ryu りゅ
rye りぇ
ryo りょ
ra ら ra ら
ri り ri り
rya りゃ
ryu りゅ
ryo りょ
ru る ru る
re れ re れ
ro ろ ro ろ
wu う
wyi ゐ
wye ゑ
wa わ wa わ
wi wi うぃ
we we うぇ
wo を wo を
n ん wha うぁ
whi うぃ
whu う
whe うぇ
who うぉ
va ゔぁ
vi ゔぃ
vu ゔ
ve ゔぇ
vo ゔぉ
vya ゔゃ
vyi ゔぃ
vyu ゔゅ
vye ゔぇ
vyo ゔょ
qa くぁ
qi くぃ
qu く
qe くぇ
qo くぉ
xn ん xn ん
xa ぁ xa ぁ
xi ぃ xi ぃ
xu ぅ xu ぅ
xe ぇ xe ぇ
xo ぉ xo ぉ
xyi ぃ
xye ぇ
xka ヵ
xke ヶ
xtu っ
xtsu っ
xya ゃ
xyu ゅ
xyo ょ
xwa ゎ
la ぁ
li ぃ
lu ぅ
le ぇ
lo ぉ
lyi ぃ
lye ぇ
lka ヵ
lke ヶ
ltu っ
ltsu っ
lya ゃ
lyu ゅ
lyo ょ
lwa ゎ
qq っ
vv っ
ll っ
xx っ
kk っ kk っ
ss っ
tt っ
pp っ
cc っ
gg っ gg っ
ss っ
zz っ zz っ
jj っ jj っ
tt っ
tch っ
dd っ dd っ
bb っ
hh っ hh っ
ff っ ff っ
bb っ
pp っ
mm っ mm っ
yy っ yy っ
rr っ rr っ
ww っ ww っ
vv cc
tch っ - ー
~ 〜
. 。 . 。
, 、 , 、
[ 「
] 」

View File

@@ -1,153 +1,321 @@
a ア a ア
- ー
i イ i イ
u ウ u ウ
e エ e エ
o オ o オ
ka カ
ga ガ
ki キ
kya キャ kya キャ
kyi キィ
kyu キュ kyu キュ
kye キェ
kyo キョ kyo キョ
gi ギ ka カ
gya ギャ ki キ
gyu ギュ
gyo ギョ
ku ク ku ク
gu グ
ke ケ ke ケ
ge ゲ
ko コ ko コ
kwa クァ
kwi クィ
kwu クゥ
kwe クェ
kwo クォ
gya ギャ
gyi ギィ
gyu ギュ
gye ギェ
gyo ギョ
ga ガ
gi ギ
gu グ
ge ゲ
go ゴ go ゴ
sa サ gwa グァ
za ザ gwi グィ
si シ gwu グゥ
shi シ gwe グェ
ji ジ gwo グォ
sha シャ sya シャ
she syi
shu シュ syu シュ
je sye
sho ショ
syo ショ syo ショ
ja sha
ju ジュ shi シ
jo ジョ shu シュ
she シェ
sho ショ
sa サ
si シ
su ス su ス
zu ズ
se セ se セ
ze ゼ
so ソ so ソ
swa スァ
swi スィ
swu スゥ
swe スェ
swo スォ
z/ ・
z. …
z, ‥
zh ←
zj ↓
zk ↑
zl →
z- 〜
z[ 『
z] 』
zya ジャ
zyi ジィ
zyu ジュ
zye ジェ
zyo ジョ
zwa ズァ
zwi ズィ
zwu ズゥ
zwe ズェ
zwo ズォ
za ザ
zi ジ
zu ズ
ze ゼ
zo ゾ zo ゾ
ta ja ジャ
da ダ ji ジ
ti ティ ju ジュ
chi チ je ジェ
zi ヂ jo ジョ
cha jya
chu チュ jyi ジィ
jyu ジュ
jye ジェ
jyo ジョ
tya チャ
tyi チィ
tyu チュ tyu チュ
che チェ tye チェ
cho チョ tyo チョ
tsa ツァ
tsi ツィ
tse ツェ
tso ツォ
tha テャ
thi ティ
t'i ティ
thu テュ
the テェ
tho テョ
t'yu テュ
twa トァ
twi トィ
twu トゥ
twe トェ
two トォ
t'u トゥ
ta タ
ti チ
tu ツ tu ツ
tsu ツ tsu ツ
du ヅ
te テ te テ
de デ
to ト to ト
dya ヂャ
dyi ヂィ
dyu ヂュ
dye ヂェ
dyo ヂョ
dha デャ
dhi ディ
d'i ディ
dhu デュ
dhe デェ
dho デョ
d'yu デュ
dwa ドァ
dwi ドィ
dwu ドゥ
dwe ドェ
dwo ドォ
d'u ドゥ
da ダ
di ヂ
du ヅ
de デ
do ド do ド
cha チャ
chi チ
chu チュ
che チェ
cho チョ
cya チャ
cyi チィ
cyu チュ
cye チェ
cyo チョ
ca カ
ci シ
cu ク
ce セ
co コ
nya ニャ
nyi ニィ
nyu ニュ
nye ニェ
nyo ニョ
n' ン
nn ン
n ン
na ナ na ナ
ni ニ ni ニ
nya ニャ
nyu ニュ
nyo ニョ
nu ヌ nu ヌ
ne ネ ne ネ
no no
ha ハ
ba バ
pa パ
hi ヒ
hya ヒャ hya ヒャ
hyi ヒィ
hyu ヒュ hyu ヒュ
hye ヒェ
hyo ヒョ hyo ヒョ
bi ビ hwa ファ
bya ビャ hwi フィ
byu ビュ hwe フェ
byo ビョ hwo フォ
pi ピ hwyu フュ
pya ピャ ha ハ
pyu ピュ hi ヒ
pyo ピョ
hu フ hu フ
fu フ
bu ブ
pu プ
he ヘ he ヘ
be ベ
pe ペ
ho ホ ho ホ
fa ファ
fi フィ
fu フ
fe フェ
fo フォ
fya フャ
fyu フュ
fyo フョ
bya ビャ
byi ビィ
byu ビュ
bye ビェ
byo ビョ
ba バ
bi ビ
bu ブ
be ベ
bo ボ bo ボ
pya ピャ
pyi ピィ
pyu ピュ
pye ピェ
pyo ピョ
pa パ
pi ピ
pu プ
pe ペ
po ポ po ポ
mya ミャ
myi ミィ
myu ミュ
mye ミェ
myo ミョ
ma マ ma マ
mi ミ mi ミ
mya ミャ
myu ミュ
myo ミョ
mu ム mu ム
me メ me メ
mo モ mo モ
ye イェ
ya ヤ ya ヤ
yu ユ yu ユ
yo ヨ yo ヨ
rya リャ
ryi リィ
ryu リュ
rye リェ
ryo リョ
ra ラ ra ラ
ri リ ri リ
rya リャ
ryu リュ
ryo リョ
ru ル ru ル
re レ re レ
ro ロ ro ロ
wu ウ
wyi ヰ
wye ヱ
wa ワ wa ワ
wi wi ウィ
we we ウェ
wo ヲ wo ヲ
n ン wha ウァ
xn ン whi ウィ
v ヴ whu ウ
xa ァ whe ウェ
xi ィ who ウォ
xu ゥ
xe ェ
xo ォ
cc ッ
dd ッ
kk ッ
pp ッ
tt ッ
tch ッ
ss ッ
gg ッ
zz ッ
jj ッ
bb ッ
hh ッ
ff ッ
mm ッ
yy ッ
rr ッ
ww ッ
vv ッ
di ディ
fa ファ
fi フィ
fe フェ
fo フォ
va ヴァ va ヴァ
vi ヴィ vi ヴィ
vu ヴ vu ヴ
ve ヴェ ve ヴェ
vo ヴォ vo ヴォ
vya ヴャ
vyi ヴィ
vyu ヴュ
vye ヴェ
vyo ヴョ
qa クァ
qi クィ
qu ク
qe クェ
qo クォ
xn ン
xa ァ
xi ィ
xu ゥ
xe ェ
xo ォ
xyi ィ
xye ェ
xka ヵ
xke ヶ
xtu ッ
xtsu ッ
xya ャ
xyu ュ
xyo ョ
xwa ヮ
la ァ
li ィ
lu ゥ
le ェ
lo ォ
lyi ィ
lye ェ
lka ヵ
lke ヶ
ltu ッ
ltsu ッ
lya ャ
lyu ュ
lyo ョ
lwa ヮ
qq ッ
vv ッ
ll ッ
xx ッ
kk ッ
gg ッ
ss ッ
zz ッ
jj ッ
tt ッ
tch ッ
dd ッ
hh ッ
ff ッ
bb ッ
pp ッ
mm ッ
yy ッ
rr ッ
ww ッ
cc ッ
- ー
~ 〜
. 。 . 。
, 、 , 、
[ 「
] 」

View File

@@ -285,10 +285,15 @@ backjp(Im *p)
spopr(&p->pre); spopr(&p->pre);
} }
/*
* kk and the like are a sokuon: っ, and the consonant stays pending, as
* ch does after tch. xtu and ltu are っ itself.
*/
static int static int
issmalltsu(Str *s) issokuon(Str *key, Str *mapped)
{ {
return s->n == 1 && (s->r[0] == L'' || s->r[0] == L''); return mapped->n == 1 && (mapped->r[0] == L'' || mapped->r[0] == L'') &&
(key->r[0] == key->r[1] || (key->r[0] == 't' && key->r[1] == 'c'));
} }
static void static void
@@ -312,17 +317,11 @@ transjp(Im *p, Rune c)
e.eat = 1; e.eat = 1;
e.next = p->pre; e.next = p->pre;
e.raw = p->raw; e.raw = p->raw;
if(c == '\'' && e.raw.n == 1 && e.raw.r[0] == 'n'){
if(mapget(p->l->map, &e.raw, &mapped))
sappend(&e.next, &mapped);
sclear(&e.raw);
return e;
}
key = e.raw; key = e.raw;
sputr(&key, c); sputr(&key, c);
if(mapmatch(p->l->map, &key, &mapped) != TrieMiss){ if(mapmatch(p->l->map, &key, &mapped) != TrieMiss){
e.raw = key; e.raw = key;
if(issmalltsu(&mapped)){ if(issokuon(&key, &mapped)){
sappend(&e.next, &mapped); sappend(&e.next, &mapped);
keeptail(&e.raw); keeptail(&e.raw);
} }

View File

@@ -451,7 +451,7 @@ engine_commit_contract(struct ct *t)
return; return;
im.nkouho = 1; im.nkouho = 1;
im.sel = -1; im.sel = -1;
CT_CHECK(t, !keystroke('q', 0, &com)); CT_CHECK(t, !keystroke('!', 0, &com));
checkstr(t, "uneaten-key commit", "", &com); checkstr(t, "uneaten-key commit", "", &com);
CT_EQ_INT(t, 0, im.pre.n); CT_EQ_INT(t, 0, im.pre.n);
CT_EQ_INT(t, 0, im.raw.n); CT_EQ_INT(t, 0, im.raw.n);
@@ -1061,7 +1061,17 @@ engine_japanese_readings(struct ct *t)
} cases[] = { } cases[] = {
{ "nya", "にゃ" }, { "nya", "にゃ" },
{ "n'ya", "んや" }, { "n'ya", "んや" },
{ "nnya", "にゃ" }, { "nnya", "" },
{ "nnnya", "んにゃ" },
{ "konnnichiha", "こんにちは" },
{ "wi", "うぃ" },
{ "vu", "" },
{ "xtu", "" },
{ "axtu", "あっ" },
{ "lla", "っぁ" },
{ "matcha", "まっちゃ" },
{ "zi", "" },
{ "[", "" },
{ "kin'youbi", "きんようび" }, { "kin'youbi", "きんようび" },
}; };
static const struct { static const struct {