;;; roman-to-kana.el --- Roman to Kana converter ;; Copyright (C) 1996,1997 MORIOKA Tomohiko ;; Author: MORIOKA Tomohiko ;; Version: ;; $Id: roman-to-kana.el,v 0.7 1997/02/28 02:28:48 tmorioka Exp $ ;; Keywords: Roman-to-Kana, input, Japanese, mule ;; This file is not part of GNU Emacs. ;; This program is free software; you can redistribute it and/or ;; modify it under the terms of the GNU General Public License as ;; published by the Free Software Foundation; either version 2, or (at ;; your option) any later version. ;; This program is distributed in the hope that it will be useful, but ;; WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ;; General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Code: (require 'cl) (defvar roman-to-kana-translate-table 'hepburn) (defvar hepburn-roman-to-kana-translation-rule-alist '(("a" . "あ") ("i" . "い") ("u" . "う") ("e" . "え") ("o" . "お") ("ka" . "か")("kka" . "っか") ("ki" . "き")("kki" . "っき") ("ku" . "く")("kku" . "っく") ("ke" . "け")("kke" . "っけ") ("ko" . "こ")("kko" . "っこ") ("ga" . "が")("gga" . "っが") ("gi" . "ぎ")("ggi" . "っぎ") ("gu" . "ぐ")("ggu" . "っぐ") ("ge" . "げ")("gge" . "っげ") ("go" . "ご")("ggo" . "っご") ("kya" . "きゃ")("kkya" . "っきゃ") ("kyi" . "きぃ")("kkyi" . "っきぃ") ("kyu" . "きゅ")("kkyu" . "っきゅ") ("kye" . "きぇ")("kkye" . "っきぇ") ("kyo" . "きょ")("kkyo" . "っきょ") ("gya" . "ぎゃ")("ggya" . "っぎゃ") ("gyi" . "ぎぃ")("ggyi" . "っぎぃ") ("gyu" . "ぎゅ")("ggyu" . "っぎゅ") ("gye" . "ぎぇ")("ggye" . "っぎぇ") ("gyo" . "ぎょ")("ggyo" . "っぎょ") ("sa" . "さ")("ssa" . "っさ") ("si" . "し")("ssi" . "っし") ("su" . "す")("ssu" . "っす") ("se" . "せ")("sse" . "っせ") ("so" . "そ")("sso" . "っそ") ("za" . "ざ")("zza" . "っざ") ("zi" . "じ")("zzi" . "っじ") ("zu" . "ず")("zzu" . "っず") ("ze" . "ぜ")("zze" . "っぜ") ("zo" . "ぞ")("zzo" . "っぞ") ("sha" . "しゃ")("ssha" . "っしゃ") ("shi" . "し") ("sshi" . "っし") ("shu" . "しゅ")("sshu" . "っしゅ") ("she" . "しぇ")("sshe" . "っしぇ") ("sho" . "しょ")("ssho" . "っしょ") ("ja" . "じゃ")("jja" . "っじゃ") ("ji" . "じ") ("jji" . "っじ") ("ju" . "じゅ")("jju" . "っじゅ") ("je" . "じぇ")("jje" . "っじぇ") ("jo" . "じょ")("jjo" . "っじょ") ("ta" . "た") ("tta" . "った") ("ti" . "てぃ")("tti" . "ってぃ") ("tu" . "とぅ")("ttu" . "っとぅ") ("te" . "て") ("tte" . "って") ("to" . "と") ("tto" . "っと") ("da" . "だ") ("dda" . "っだ") ("di" . "でぃ")("ddi" . "っでぃ") ("du" . "づ") ("ddu" . "っづ") ("de" . "で") ("dde" . "っで") ("do" . "ど") ("ddo" . "っど") ("tsa" . "つぁ")("ttsa" . "っつぁ") ("tsi" . "つぃ")("ttsi" . "っつぃ") ("tsu" . "つ") ("ttsu" . "っつ") ("tse" . "つぇ")("ttse" . "っつぇ") ("tso" . "つぉ")("ttso" . "っつぉ") ("dza" . "づぁ")("ddza" . "っづぁ") ("dzi" . "づぃ")("ddzi" . "っづぃ") ("dzu" . "づ") ("ddzu" . "っづ") ("dze" . "づぇ")("ddze" . "っづぇ") ("dzo" . "づぉ")("ddzo" . "っづぉ") ("cha" . "ちゃ")("ccha" . "っちゃ") ("chi" . "ち") ("cchi" . "っち") ("chu" . "ちゅ")("cchu" . "っちゅ") ("che" . "ちぇ")("cche" . "っちぇ") ("cho" . "ちょ")("ccho" . "っちょ") ("dja" . "ぢゃ")("ddja" . "っぢゃ") ("dji" . "ぢ") ("ddji" . "っぢ") ("dju" . "ぢゅ")("ddju" . "っぢゅ") ("dje" . "ぢぇ")("ddje" . "っぢぇ") ("djo" . "ぢょ")("ddjo" . "っぢょ") ("na" . "な")("nna" . "んな") ("ni" . "に")("nni" . "んに") ("nu" . "ぬ")("nnu" . "んぬ") ("ne" . "ね")("nne" . "んね") ("no" . "の")("nno" . "んの") ("nya" . "にゃ")("nnya" . "っにゃ") ("nyi" . "にぃ")("nnyi" . "っにぃ") ("nyu" . "にゅ")("nnyu" . "っにゅ") ("nye" . "にぇ")("nnye" . "っにぇ") ("nyo" . "にょ")("nnyo" . "っにょ") ("ha" . "は")("hha" . "っは") ("hi" . "ひ")("hhi" . "っひ") ("hu" . "ふ")("hhu" . "っふ") ("he" . "へ")("hhe" . "っへ") ("ho" . "ほ")("hho" . "っほ") ("pa" . "ぱ")("ppa" . "っぱ") ("pi" . "ぴ")("ppi" . "っぴ") ("pu" . "ぷ")("ppu" . "っぷ") ("pe" . "ぺ")("ppe" . "っぺ") ("po" . "ぽ")("ppo" . "っぽ") ("ba" . "ば")("bba" . "っば") ("bi" . "び")("bbi" . "っび") ("bu" . "ぶ")("bbu" . "っぶ") ("be" . "べ")("bbe" . "っべ") ("bo" . "ぼ")("bbo" . "っぼ") ("hya" . "ひゃ")("hhya" . "っひゃ") ("hyi" . "ひぃ")("hhyi" . "っひぃ") ("hyu" . "ひゅ")("hhyu" . "っひゅ") ("hye" . "ひぇ")("hhye" . "っひぇ") ("hyo" . "ひょ")("hhyo" . "っひょ") ("pya" . "ぴゃ")("ppya" . "っぴゃ") ("pyi" . "ぴぃ")("ppyi" . "っぴぃ") ("pyu" . "ぴゅ")("ppyu" . "っぴゅ") ("pye" . "ぴぇ")("ppye" . "っぴぇ") ("pyo" . "ぴょ")("ppyo" . "っぴょ") ("bya" . "びゃ")("bbya" . "っびゃ") ("byi" . "びぃ")("bbyi" . "っびぃ") ("byu" . "びゅ")("bbyu" . "っびゅ") ("bye" . "びぇ")("bbye" . "っびぇ") ("byo" . "びょ")("bbyo" . "っびょ") ("fa" . "ふぁ")("ffa" . "っふぁ") ("fi" . "ふぃ")("ffi" . "っふぃ") ("fu" . "ふ") ("ffu" . "っふ") ("fe" . "ふぇ")("ffe" . "っふぇ") ("fo" . "ふぉ")("ffo" . "っふぉ") ("pfa" . "ぷぁ")("ppfa" . "っぷぁ") ("pfi" . "ぷぃ")("ppfi" . "っぷぃ") ("pfu" . "ぷ") ("ppfu" . "っぷ") ("pfe" . "ぷぇ")("ppfe" . "っぷぇ") ("pfo" . "ぷぉ")("ppfo" . "っぷぉ") ("va" . "ヴぁ")("vva" . "っヴぁ") ("vi" . "ヴぃ")("vvi" . "っヴぃ") ("vu" . "ヴ") ("vvu" . "っヴ") ("ve" . "ヴぇ")("vve" . "っヴぇ") ("vo" . "ヴぉ")("vvo" . "っヴぉ") ("ma" . "ま")("mma" . "っま") ("mi" . "み")("mmi" . "っみ") ("mu" . "む")("mmu" . "っむ") ("me" . "め")("mme" . "っめ") ("mo" . "も")("mmo" . "っも") ("mya" . "みゃ")("mmya" . "っみゃ") ("myi" . "みぃ")("mmyi" . "っみぃ") ("myu" . "みゅ")("mmyu" . "っみゅ") ("mye" . "みぇ")("mmye" . "っみぇ") ("myo" . "みょ")("mmyo" . "っみょ") ("ya" . "や") ("yya" . "っや") ("yi" . "い") ("yyi" . "っい") ("yu" . "ゆ") ("yyu" . "っゆ") ("ye" . "いぇ")("yye" . "っいぇ") ("yo" . "よ") ("yyo" . "っよ") ("ra" . "ら")("rra" . "っら") ("ri" . "り")("rri" . "っり") ("ru" . "る")("rru" . "っる") ("re" . "れ")("rre" . "っれ") ("ro" . "ろ")("rro" . "っろ") ("rya" . "りゃ")("rrya" . "っりゃ") ("ryi" . "りぃ")("rryi" . "っりぃ") ("ryu" . "りゅ")("rryu" . "っりゅ") ("rye" . "りぇ")("rrye" . "っりぇ") ("ryo" . "りょ")("rryo" . "っりょ") ("wa" . "わ")("wwa" . "っわ") ("wi" . "ゐ")("wwi" . "っゐ") ("wu" . "う")("wwu" . "っう") ("we" . "ゑ")("wwe" . "っゑ") ("wo" . "を")("wwo" . "っを") ("n'" . "ん") ("n" . "ん") ("x" . "ん") ("q" . "っ") ("1" . "1") ("2" . "2") ("3" . "3") ("4" . "4") ("5" . "5") ("6" . "6") ("7" . "7") ("8" . "8") ("9" . "9") ("0" . "0") ("!" . "!") ("@" . "@") ("#" . "#") ("$" . "$") ("%" . "%") ("^" . "^") ("&" . "&") ("*" . "*") ("(" . "(") (")" . ")") ("-" . "ー") ("=" . "=") ("`" . "`") ("\\" . "\")("|" . "|") ("_" . "_") ("+" . "+") ("~" . " ̄") ("[" . "「") ("]" . "」") ("{" . "{") ("}" . "}") (":" . ":") (";" . ";") ("\"" . "”") ("'" . "’") ("." . "。") ("," . "、") ("<" . "<") (">" . ">") ("?" . "?") ("/" . "/") ("z1" . "○") ("z!" . "●") ("z2" . "▽") ("z@" . "▼") ("z3" . "△") ("z#" . "▲") ("z4" . "□") ("z$" . "■") ("z5" . "◇") ("z%" . "◆") ("z6" . "☆") ("z^" . "★") ("z7" . "◎") ("z&" . "£") ("z8" . "¢") ("z*" . "×") ("z9" . "♂") ("z(" . "【") ("z0" . "♀") ("z)" . "】") ("z-" . "〜") ("z_" . "∴") ("z=" . "≠") ("z+" . "±") ("z\\" . "¥")("z|" . "‖") ("z`" . "´") ("z~" . "¨") ("zq" . "《") ("zQ" . "〈") ("zw" . "》") ("zW" . "〉") ("zr" . "々") ("zR" . "仝") ("zt" . "〆") ("zT" . "§") ("zp" . "〒") ("zP" . "↑") ("z[" . "『") ("z{" . "〔") ("z]" . "』") ("z}" . "〕") ("zs" . "ヽ") ("zS" . "ヾ") ("zd" . "ゝ") ("zD" . "ゞ") ("zf" . "〃") ("zF" . "→") ("zg" . "‐") ("zG" . "―") ("zh" . "←") ("zj" . "↓") ("zk" . "↑") ("zl" . "→") ("z;" . "゛") ("z:" . "゜") ("z\'" . "‘")("z\"" . "“") ("zx" . ":-") ("zX" . ":-)") ("zc" . "〇") ("zC" . "℃") ("zv" . "※") ("zV" . "÷") ("zb" . "°") ("zB" . "←") ("zn" . "′") ("zN" . "↓") ("zm" . "″") ("zM" . "〓") ("z," . "‥") ("z<" . "≦") ("z." . "…") ("z>" . "≧") ("z/" . "・") ("z?" . "∞") ("Z " . " ") ("Z!" . "!") ("Z\"" . "″") ("Z#" . "#") ("Z$" . "$") ("Z%" . "%") ("Z&" . "&") ("Z'" . "′") ("Z(" . "(") ("Z)" . ")") ("Z*" . "*") ("Z+" . "+") ("Z," . ",") ("Z-" . "−") ("Z." . ".") ("Z/" . "/") ("Z0" . "0") ("Z1" . "1") ("Z2" . "2") ("Z3" . "3") ("Z4" . "4") ("Z5" . "5") ("Z6" . "6") ("Z7" . "7") ("Z8" . "8") ("Z9" . "9") ("Z:" . ":") ("Z;" . ";") ("Z<" . "<") ("Z=" . "=") ("Z>" . ">") ("Z?" . "?") ("Z@" . "@") ("ZA" . "A") ("ZB" . "B") ("ZC" . "C") ("ZD" . "D") ("ZE" . "E") ("ZF" . "F") ("ZG" . "G") ("ZH" . "H") ("ZI" . "I") ("ZJ" . "J") ("ZK" . "K") ("ZL" . "L") ("ZM" . "M") ("ZN" . "N") ("ZO" . "O") ("ZP" . "P") ("ZQ" . "Q") ("ZR" . "R") ("ZS" . "S") ("ZT" . "T") ("ZU" . "U") ("ZV" . "V") ("ZW" . "W") ("ZX" . "X") ("ZY" . "Y") ("ZZ" . "Z") ("Z[" . "[") ("Z\\" . "\")("Z]" . "]") ("Z^" . "^") ("Z_" . "_") ("Z`" . "‘") ("Za" . "a") ("Zb" . "b") ("Zc" . "c") ("Zd" . "d") ("Ze" . "e") ("Zf" . "f") ("Zg" . "g") ("Zh" . "h") ("Zi" . "i") ("Zj" . "j") ("Zk" . "k") ("Zl" . "l") ("Zm" . "m") ("Zn" . "n") ("Zo" . "o") ("Zp" . "p") ("Zq" . "q") ("Zr" . "r") ("Zs" . "s") ("Zt" . "t") ("Zu" . "u") ("Zv" . "v") ("Zw" . "w") ("Zx" . "x") ("Zy" . "y") ("Zz" . "z") ("Z{" . "{") ("Z|" . "|") ("Z}" . "}") ("Z~" . "〜") )) (defun roman-to-kana-string-1 (str table) (let* (case-fold-search (ret (find-if (function (lambda (rule) (string-match (concat "^" (regexp-quote (car rule))) str) )) table))) (if ret (cons (cdr ret)(substring str (match-end 0))) ) )) (defun roman-to-kana-translate-string (str &optional table) (or table (setq table (symbol-value (intern (concat (symbol-name roman-to-kana-translate-table) "-roman-to-kana-translation-rule-alist")) ))) (let (ret dest) (while (setq ret (roman-to-kana-string-1 str table)) (setq dest (concat dest (car ret))) (setq str (cdr ret)) ) (concat dest str) )) (defun roman-to-kana-translate-region (start end) (save-excursion (let ((str (buffer-substring start end))) (delete-region start end) (goto-char start) (insert (roman-to-kana-translate-string str)) ))) ;;; @ end ;;; (provide 'roman-to-kana) (run-hooks 'roman-to-kana-load-hook) ;;; roman-to-kana.el ends here