corvus-skk: installl and configuration
コンテンツ
概要
corvus-skkをインストールしてazikで入力できるようにする。
azikについて
http://hp.vector.co.jp/authors/VA002116/azik/azikinfo.htm
install
以下のページを参照。
http://code.google.com/p/corvus-skk/
config
どっかにazikの設定ファイルが落ちていないかと探したのだが、残念ながら見つからず。
仕方がないので、自分で書くことに。
を編集する。
全部直打ちするのがいやだったので、config file生成スクリプトを書いたが、思いのほか大変だった(文字入力的な意味で)。
適当に書き始めたのがいけなかったか。
ghc --make -o a.out azik.hs ./a.out > azik.txt
(azik.hsのソースは下)
azik.txtとsymbol.txt(数字と記号の変換表)のencodingを
little-endian utf-16 with CRLF, CR Line terminators
にする。ようはemacsで開いて Ctr-x
その後、2つのファイルを結合。
cat azik.txt > confkana.txt cat symbol.txt >> confkana.txt
あとはできたconfkana.txtを
(変換表を再読み込みさせるために、IMEを切り替える必要がある?)。
azik.hsは基本的なローマ字ひらがな変換を実装して、azikの変換規則はローマ字上での変換として実装している(アルファベットのままのほうが扱いやすいため)。
ローマ字ひらがな変換表を書くのが面倒だったのと、特殊変換の数が多いので、変換規則を直打ちしたほうが早かったかもしれない。
symbol.txt
z 0
z, ‥ ‥ ‥ 0
z. … … … 0
z/ ・ ・ ・ 0
z[ 『 『 『 0
z] 』 』 』 0
z; ; ; ; 0
z: : : : 0
xxh ← ← ← 0
xxj ↓ ↓ ↓ 0
xxk ↑ ↑ ↑ 0
xxl → → → 0
xx' ' ' ' 0
0 0 0 0 0
1 1 1 1 0
2 2 2 2 0
3 3 3 3 0
4 4 4 4 0
5 5 5 5 0
6 6 6 6 0
7 7 7 7 0
8 8 8 8 0
9 9 9 9 0
0
! ! ! ! 0
" ” ” " 0
# # # # 0
$ $ $ $ 0
% % % % 0
& & & & 0
' ’ ’ ' 0
( ( ( ( 0
) ) ) ) 0
* * * * 0
+ + + + 0
, 、 、 、 0
- ー ー ー 0
. 。 。 。 0
/ / / / 0
< < < < 0
= = = = 0
> > > > 0
? ? ? ? 0
@ @ @ @ 0
[ 「 「 「 0
\ \ \ \ 0
] 」 」 」 0
^ ^ ^ ^ 0
_ _ _ _ 0
` ‘ ‘ ` 0
{ { { { 0
| | | | 0
} } } } 0
~ ~ ~ ~ 0
azik.hs
import Data.Maybe (isJust, fromJust)
import Data.List (intercalate, sortBy, groupBy, (\\))
import Data.Ord (comparing)
convert _ [] = []
convert t (c:cs) | isJust r = fromJust r ++ convert t cs
where r = lookup t
convert t (b:c:cs) | isJust r = fromJust r ++ convert t cs
where r = lookup [b,c] t
convert t (a🅱️c:cs) | isJust r = fromJust r ++ convert t cs
where r = lookup [a,b,c] t
convert t (c:cs) = convert t cs
zenkakuHiragana = map (\(a,b,_,_) -> (a,b)) table
zenkakuKatakana = map (\(a,_,b,_) -> (a,b)) table
hankakuKatakana = map (\(a,_,_,b) -> (a,b)) table
vowel = "aiueo"
isVowel c = elem c vowel
extendVowel = vowel ++ map fst syllabicTable ++ map fst doubleVowelTable
isExtendVowel c = elem c extendVowel
consonant = "kstnhmyrwgzdbp"
isConsonant c = elem c consonant
contractedConsonant = map fst contractedTable
isContractedConsonant c = elem c contractedConsonant
syllabic [] = []
syllabic [a] = [a]
syllabic (a🅱️cs) | isVowel a = a:syllabic (b:cs)
syllabic (a🅱️cs) | isJust r = a:fromJust r ++ syllabic cs
| otherwise = a:syllabic (b:cs)
where r = lookup b syllabicTable
syllabicTable = [('z', "ann"), ('n', "ann"), ('k', "inn"), ('j', "unn"), ('d', "enn"), ('l', "onn")]
doubleVowel [] = []
doubleVowel [a] = [a]
doubleVowel (a🅱️cs) | isVowel a = a:doubleVowel (b:cs)
doubleVowel (a🅱️cs) | isJust r = a:fromJust r ++ doubleVowel cs
| otherwise = a:doubleVowel (b:cs)
where r = lookup b doubleVowelTable
doubleVowelTable = [('\'', "ai"), ('h', "uu"), ('w', "ei"), ('p', "ou")]
contracted [] = []
contracted [a] = [a]
contracted (a🅱️cs) | isJust r && isExtendVowel b = fromJust r ++ [b] ++ contracted cs
where r = lookup a contractedTable
contracted (a🅱️c:cs) | isConsonant a && (b == 'y' || b == 'g') && isExtendVowel c = a:"ily" ++ c:contracted cs
contracted (a:cs) = a:contracted cs
contractedTable = [('x', "sily"), ('c', "tily"), ('j', "zily")]
smallChar [] = []
smallChar (a🅱️c:cs) | [a,b] == "xx" && isVowel c = "l" ++ c:smallChar cs
| [a,b] == "xy" && isVowel c = "ly" ++ c:smallChar cs
smallChar (a:cs) = a:smallChar cs
normalize = syllabic.doubleVowel.contracted.smallChar
ruleToStr (cs,as) = intercalate "\t" $ cs: map (\t-> convert t as) [zenkakuHiragana, zenkakuKatakana, hankakuKatakana] ++ ["0"]
-- sort must be stable!
rules = map last.groupBy (\a b -> fst a == fst b).sortBy (comparing fst) $ basicRule ++ contractedRule ++ smallRule ++ specialRule
basicRule = map (\x -> (x, normalize x)) $ [[v] | v <- vowel] ++ [ | c <- consonant, v <- extendVowel]
contractedRule = map (\x -> (x, normalize x)) $ [| c <- consonant \\ "yw" , y <- "yg", v <-extendVowel] ++ [| c <- contractedConsonant, v <-extendVowel]
smallRule = map (\x -> (x, normalize x)) $ ["xx" ++ [v]| v <- vowel] ++ ["xy" ++ [v]| v <- vowel]
main = mapM_ (putStrLn.ruleToStr) rules
specialRule = [
(";", "ltu"), (":", "-"),
("fa", "hula"), ("fi", "huli"), ("fu", "hu"), ("fe", "hule"), ("fo", "hulo"),
("fz", "hulann"), ("fn", "hulann"), ("fk", "hulinn"), ("fj", "hunn"), ("fd", "hulenn"), ("fl", "hulonn"),
("f\'", "hulai"), ("fh", "huu"), ("fw", "hulei"), ("fp", "hulo-"),
("wi", "uli"), ("we", "ule"),
("wk", "ulinn"), ("wd", "ulenn"), ("wl", "ulonn"),
("w\'", "wai"), ("wp", "wolo-"),
("kf", "ki"), ("jf", "zilyu"), ("hf", "hu"), ("yf", "yu"), ("mf", "mu"), ("nf", "nu"), ("df", "de"), ("cf", "tile"), ("pf", "ponn"),
("wso", "ulo"),
("tgi", "teli"), ("tgu", "tolu"), ("dci", "deli"), ("dcu", "dolu"),
("wf", "wai"), ("sf", "sai"), ("ss", "sei"), ("zc", "za"), ("zv", "zai"), ("zf", "ze"), ("zx", "zei"),
("kt", "koto"), ("st", "sita"), ("tt", "tati"), ("ht", "hito"), ("wt", "wata"), ("mn", "mono"), ("ms", "masu"), ("ds", "desu"),
("km", "kamo"), ("tm", "tame"), ("dm", "demo"), ("kr", "kara"), ("sr", "suru"), ("tr", "tara"), ("nr", "naru"), ("yr", "yoru"),
("rr", "rare"), ("zr", "zaru"), ("mt", "mata"), ("tb", "tabi"), ("nb", "neba"), ("bt", "bito"), ("gr", "gara"), ("gt", "goto"),
("nt", "niti"), ("dt", "dati"), ("wr", "ware"),
("nn", "nn")
]
table = [
("a", "あ", "ア", "ア"), ("i", "い", "イ", "イ"), ("u", "う", "ウ", "ウ"), ("e", "え", "エ", "エ"), ("o", "お", "オ", "オ"),
("ka", "か", "カ", "カ"), ("ki", "き", "キ", "キ"), ("ku", "く", "ク", "ク"), ("ke", "け", "ケ", "ケ"), ("ko", "こ", "コ", "コ"),
("sa", "さ", "サ", "サ"), ("si", "し", "シ", "シ"), ("su", "す", "ス", "ス"), ("se", "せ", "セ", "セ"), ("so", "そ", "ソ", "ソ"),
("ta", "た", "タ", "タ"), ("ti", "ち", "チ", "チ"), ("tu", "つ", "ツ", "ツ"), ("te", "て", "テ", "テ"), ("to", "と", "ト", "ト"),
("na", "な", "ナ", "ナ"), ("ni", "に", "ニ", "ニ"), ("nu", "ぬ", "ヌ", "ヌ"), ("ne", "ね", "ネ", "ネ"), ("no", "の", "ノ", "ノ"),
("ha", "は", "ハ", "ハ"), ("hi", "ひ", "ヒ", "ヒ"), ("hu", "ふ", "フ", "フ"), ("he", "へ", "ヘ", "ヘ"), ("ho", "ほ", "ホ", "ホ"),
("ma", "ま", "マ", "マ"), ("mi", "み", "ミ", "ミ"), ("mu", "む", "ム", "ム"), ("me", "め", "メ", "メ"), ("mo", "も", "モ", "モ"),
("ya", "や", "ヤ", "ヤ"), ("yu", "ゆ", "ユ", "ユ"), ("yo", "よ", "ヨ", "ヨ"),
("ra", "ら", "ラ", "ラ"), ("ri", "り", "リ", "リ"), ("ru", "る", "ル", "ル"), ("re", "れ", "レ", "レ"), ("ro", "ろ", "ロ", "ロ"),
("wa", "わ", "ワ", "ワ"), ("wo", "を", "ヲ", "ヲ"), ("nn", "ん", "ン", "ン"),
("ga", "が", "ガ", "ガ"), ("gi", "ぎ", "ギ", "ギ"), ("gu", "ぐ", "グ", "グ"), ("ge", "げ", "ゲ", "ゲ"), ("go", "ご", "ゴ", "ゴ"),
("za", "ざ", "ザ", "ザ"), ("zi", "じ", "ジ", "ジ"), ("zu", "ず", "ズ", "ズ"), ("ze", "ぜ", "ゼ", "ゼ"), ("zo", "ぞ", "ゾ", "ゾ"),
("da", "だ", "ダ", "ダ"), ("di", "ぢ", "ヂ", "ヂ"), ("du", "づ", "ヅ", "ヅ"), ("de", "で", "デ", "デ"), ("do", "ど", "ド", "ド"),
("ba", "ば", "バ", "バ"), ("bi", "び", "ビ", "ビ"), ("bu", "ぶ", "ブ", "ブ"), ("be", "べ", "ベ", "ベ"), ("bo", "ぼ", "ボ", "ボ"),
("pa", "ぱ", "パ", "パ"), ("pi", "ぴ", "ピ", "ピ"), ("pu", "ぷ", "プ", "プ"), ("pe", "ぺ", "ペ", "ペ"), ("po", "ぽ", "ポ", "ポ"),
("la", "ぁ", "ァ", "ァ"), ("li", "ぃ", "ィ", "ィ"), ("lu", "ぅ", "ゥ", "ゥ"), ("le", "ぇ", "ェ", "ェ"), ("lo", "ぉ", "ォ", "ォ"),
("ltu", "っ", "ッ", "ッ"),
("lya", "ゃ", "ャ", "ャ"),("lyi", "ぃ", "ィ", "ィ"), ("lyu", "ゅ", "ゅ", "ュ"), ("lye", "ぇ", "ェ", "ェ"),("lyo", "ょ", "ョ", "ョ"),
("-", "ー", "ー", "ー")
]
作成者 Toru Mano
最終更新時刻 2023-01-01 (c70d5a1)