/* */ state = 0 kana = '' DO FOREVER CALL KeyPress END RETURN 0 KeyPress: inputchar = SysGetKey('NOECHO') /* In the future, we'll simply return if we're in ascii mode */ /* IF LEFT( inputchar, 1 ) == '{' THEN DO RETURN 0 END */ IF ( VERIFY( inputchar, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz') > 0 ) THEN DO IF kana \= '' THEN DO CALL ConvertKana kana END IF C2X( inputchar ) == '0D' THEN SAY CALL ConvertKana inputchar state = 0 kana = '' END ELSE IF state == 0 THEN DO /* Start entering a new character */ IF ( VERIFY( inputchar, 'AEIOUaeiou') == 0 ) THEN DO CALL ConvertKana inputchar kana = '' END ELSE DO state = 1 kana = inputchar END END ELSE DO /* Process a character already underway */ IF inputchar == LEFT( kana, 1 ) THEN DO IF TRANSLATE( kana ) == 'N' THEN DO /* Handle double 'N' kana */ CALL ConvertKana kana kana = inputchar END ELSE DO /* Handle other double consonants */ IF VERIFY( inputchar, 'ABCDEFGHIJKLMOPQRSTUVWXYZ') == 0 THEN CALL CHAROUT, 'ッ' ELSE CALL CHAROUT, 'っ' END END ELSE DO /* If this is a valid trailing character, append it to the current * "in progress" kana. */ IF ( VERIFY( inputchar, 'AEIOUHYSZaeiouhysz') == 0 ) THEN DO kana = kana || inputchar IF ( VERIFY( inputchar, 'HYSZhysz') > 0 ) THEN DO CALL ConvertKana kana kana = '' state = 0 END END /* Otherwise, if the "in progress" kana is N, assume it's the * standalone N, convert it, and start a new "in progress" kana * using the new character. */ ELSE IF TRANSLATE( kana ) == 'N' THEN DO CALL ConvertKana kana IF VERIFY( inputchar, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz') == 0 THEN kana = inputchar ELSE DO kana = '' state = 0 END END END END RETURN ConvertKana: PARSE ARG wapuro SELECT /* ideographic punctuation characters */ WHEN wapuro == ' ' THEN out = ' ' WHEN wapuro == ',' THEN out = '、' WHEN wapuro == '.' THEN out = '。' WHEN wapuro == ':' THEN out = ':' WHEN wapuro == ';' THEN out = ';' WHEN wapuro == '?' THEN out = '?' WHEN wapuro == '!' THEN out = '!' WHEN wapuro == '-' THEN out = 'ー' WHEN wapuro == '/' THEN out = '/' WHEN wapuro == '\' THEN out = '\' WHEN wapuro == '(' THEN out = '(' WHEN wapuro == ')' THEN out = ')' /* hiragana */ WHEN wapuro == 'a' THEN out = 'あ' WHEN wapuro == 'i' THEN out = 'い' WHEN wapuro == 'u' THEN out = 'う' WHEN wapuro == 'e' THEN out = 'え' WHEN wapuro == 'o' THEN out = 'お' WHEN wapuro == 'ka' THEN out = 'か' WHEN wapuro == 'ki' THEN out = 'き' WHEN wapuro == 'ku' THEN out = 'く' WHEN wapuro == 'ke' THEN out = 'け' WHEN wapuro == 'ko' THEN out = 'こ' WHEN wapuro == 'ga' THEN out = 'が' WHEN wapuro == 'gi' THEN out = 'ぎ' WHEN wapuro == 'gu' THEN out = 'ぐ' WHEN wapuro == 'ge' THEN out = 'げ' WHEN wapuro == 'go' THEN out = 'ご' WHEN wapuro == 'sa' THEN out = 'さ' WHEN wapuro == 'shi' | wapuro = 'si' THEN out = 'し' WHEN wapuro == 'su' THEN out = 'す' WHEN wapuro == 'se' THEN out = 'せ' WHEN wapuro == 'so' THEN out = 'そ' WHEN wapuro == 'za' THEN out = 'ざ' WHEN wapuro == 'zi' THEN out = 'じ' WHEN wapuro == 'zu' THEN out = 'ず' WHEN wapuro == 'ze' THEN out = 'ぜ' WHEN wapuro == 'zo' THEN out = 'ぞ' WHEN wapuro == 'ta' THEN out = 'た' WHEN wapuro == 'chi' | wapuro = 'ti' THEN out = 'ち' WHEN wapuro == 'tsu' | wapuro = 'tu' THEN out = 'つ' WHEN wapuro == 'te' THEN out = 'て' WHEN wapuro == 'to' THEN out = 'と' WHEN wapuro == 'da' THEN out = 'だ' WHEN wapuro == 'ji' | wapuro = 'di' THEN out = 'ぢ' WHEN wapuro == 'du' | wapuro = 'dzu' THEN out = 'づ' WHEN wapuro == 'de' THEN out = 'で' WHEN wapuro == 'do' THEN out = 'ど' WHEN wapuro == 'na' THEN out = 'な' WHEN wapuro == 'ni' THEN out = 'に' WHEN wapuro == 'nu' THEN out = 'ぬ' WHEN wapuro == 'ne' THEN out = 'ね' WHEN wapuro == 'no' THEN out = 'の' WHEN wapuro == 'ha' THEN out = 'は' WHEN wapuro == 'hi' THEN out = 'ひ' WHEN wapuro == 'fu' | wapuro = 'hu' THEN out = 'ふ' WHEN wapuro == 'he' THEN out = 'へ' WHEN wapuro == 'ho' THEN out = 'ほ' WHEN wapuro == 'ba' THEN out = 'ば' WHEN wapuro == 'bi' THEN out = 'び' WHEN wapuro == 'bu' THEN out = 'ぶ' WHEN wapuro == 'be' THEN out = 'べ' WHEN wapuro == 'bo' THEN out = 'ぼ' WHEN wapuro == 'pa' THEN out = 'ぱ' WHEN wapuro == 'pi' THEN out = 'ぴ' WHEN wapuro == 'pu' THEN out = 'ぷ' WHEN wapuro == 'pe' THEN out = 'ぺ' WHEN wapuro == 'po' THEN out = 'ぽ' WHEN wapuro == 'ma' THEN out = 'ま' WHEN wapuro == 'mi' THEN out = 'み' WHEN wapuro == 'mu' THEN out = 'む' WHEN wapuro == 'me' THEN out = 'め' WHEN wapuro == 'mo' THEN out = 'も' WHEN wapuro == 'ya' THEN out = 'や' WHEN wapuro == 'yu' THEN out = 'ゆ' WHEN wapuro == 'yo' THEN out = 'よ' WHEN wapuro == 'ra' THEN out = 'ら' WHEN wapuro == 'ri' THEN out = 'り' WHEN wapuro == 'ru' THEN out = 'る' WHEN wapuro == 're' THEN out = 'れ' WHEN wapuro == 'ro' THEN out = 'ろ' WHEN wapuro == 'wa' THEN out = 'わ' WHEN wapuro == 'wo' THEN out = 'を' WHEN wapuro == 'n' THEN out = 'ん' WHEN wapuro == 'kya' THEN out = 'きゃ' WHEN wapuro == 'kyu' THEN out = 'きゅ' WHEN wapuro == 'kyo' THEN out = 'きょ' WHEN wapuro == 'gya' THEN out = 'ぎゃ' WHEN wapuro == 'gyu' THEN out = 'きゅ' WHEN wapuro == 'gyo' THEN out = 'ぎょ' WHEN wapuro == 'sha' | wapuro = 'sya' THEN out = 'しゃ' WHEN wapuro == 'shu' | wapuro = 'syu' THEN out = 'しゅ' WHEN wapuro == 'sho' | wapuro = 'syo' THEN out = 'しょ' WHEN wapuro == 'ja' | wapuro = 'zya' THEN out = 'じゃ' WHEN wapuro == 'ju' | wapuro = 'zyu' THEN out = 'じゅ' WHEN wapuro == 'jo' | wapuro = 'zyo' THEN out = 'じょ' WHEN wapuro == 'cha' THEN out = 'ちゃ' WHEN wapuro == 'chu' THEN out = 'ちゅ' WHEN wapuro == 'cho' THEN out = 'ちょ' WHEN wapuro == 'nya' THEN out = 'にゃ' WHEN wapuro == 'nyu' THEN out = 'にゅ' WHEN wapuro == 'nyo' THEN out = 'にょ' WHEN wapuro == 'hya' THEN out = 'ひゃ' WHEN wapuro == 'hyu' THEN out = 'ひゅ' WHEN wapuro == 'hyo' THEN out = 'ひょ' WHEN wapuro == 'bya' THEN out = 'びゃ' WHEN wapuro == 'byu' THEN out = 'びゅ' WHEN wapuro == 'byo' THEN out = 'びょ' WHEN wapuro == 'pya' THEN out = 'ぴゃ' WHEN wapuro == 'pyu' THEN out = 'ぴゅ' WHEN wapuro == 'pyo' THEN out = 'ぴょ' WHEN wapuro == 'mya' THEN out = 'みゃ' WHEN wapuro == 'myu' THEN out = 'みゅ' WHEN wapuro == 'myo' THEN out = 'みょ' WHEN wapuro == 'rya' THEN out = 'りゃ' WHEN wapuro == 'ryu' THEN out = 'りゅ' WHEN wapuro == 'ryo' THEN out = 'りょ' /* katakana */ WHEN wapuro == 'A' THEN out = 'ア' WHEN wapuro == 'I' THEN out = 'イ' WHEN wapuro == 'U' THEN out = 'ウ' WHEN wapuro == 'E' THEN out = 'エ' WHEN wapuro == 'O' THEN out = 'オ' WHEN wapuro == 'KA' THEN out = 'カ' WHEN wapuro == 'KI' THEN out = 'キ' WHEN wapuro == 'KU' THEN out = 'ク' WHEN wapuro == 'KE' THEN out = 'ケ' WHEN wapuro == 'KO' THEN out = 'コ' WHEN wapuro == 'GA' THEN out = 'ガ' WHEN wapuro == 'GI' THEN out = 'ギ' WHEN wapuro == 'GU' THEN out = 'グ' WHEN wapuro == 'GE' THEN out = 'ゲ' WHEN wapuro == 'GO' THEN out = 'ゴ' WHEN wapuro == 'SA' THEN out = 'サ' WHEN wapuro == 'SHI' | wapuro == 'SI' THEN out = 'シ' WHEN wapuro == 'SU' THEN out = 'ス' WHEN wapuro == 'SE' THEN out = 'セ' WHEN wapuro == 'SO' THEN out = 'ソ' WHEN wapuro == 'ZA' THEN out = 'ザ' WHEN wapuro == 'ZI' | wapuro == 'JI' THEN out = 'ジ' WHEN wapuro == 'ZU' THEN out = 'ズ' WHEN wapuro == 'ZE' THEN out = 'ゼ' WHEN wapuro == 'ZO' THEN out = 'ゾ' WHEN wapuro == 'TA' THEN out = 'タ' WHEN wapuro == 'CHI' | wapuro == 'TI' THEN out = 'チ' WHEN wapuro == 'TSU' | wapuro == 'TU' THEN out = 'ツ' WHEN wapuro == 'TE' THEN out = 'テ' WHEN wapuro == 'TO' THEN out = 'ト' WHEN wapuro == 'DA' THEN out = 'ダ' WHEN wapuro == 'DI' THEN out = 'ヂ' WHEN wapuro == 'DU' | wapuro == 'DZU' THEN out = 'ヅ' WHEN wapuro == 'DE' THEN out = 'デ' WHEN wapuro == 'DO' THEN out = 'ド' WHEN wapuro == 'NA' THEN out = 'ナ' WHEN wapuro == 'NI' THEN out = 'ニ' WHEN wapuro == 'NU' THEN out = 'ヌ' WHEN wapuro == 'NE' THEN out = 'ネ' WHEN wapuro == 'NO' THEN out = 'ノ' WHEN wapuro == 'HA' THEN out = 'ハ' WHEN wapuro == 'HI' THEN out = 'ヒ' WHEN wapuro == 'FU' | wapuro = 'HU' THEN out = 'フ' WHEN wapuro == 'HE' THEN out = 'ヘ' WHEN wapuro == 'HO' THEN out = 'ホ' WHEN wapuro == 'BA' THEN out = 'バ' WHEN wapuro == 'BI' THEN out = 'ビ' WHEN wapuro == 'BU' THEN out = 'ブ' WHEN wapuro == 'BE' THEN out = 'ベ' WHEN wapuro == 'BO' THEN out = 'ボ' WHEN wapuro == 'PA' THEN out = 'パ' WHEN wapuro == 'PI' THEN out = 'ピ' WHEN wapuro == 'PU' THEN out = 'プ' WHEN wapuro == 'PE' THEN out = 'ペ' WHEN wapuro == 'PO' THEN out = 'ポ' WHEN wapuro == 'MA' THEN out = 'マ' WHEN wapuro == 'MI' THEN out = 'ミ' WHEN wapuro == 'MU' THEN out = 'ム' WHEN wapuro == 'ME' THEN out = 'メ' WHEN wapuro == 'MO' THEN out = 'モ' WHEN wapuro == 'YA' THEN out = 'ヤ' WHEN wapuro == 'YU' THEN out = 'ユ' WHEN wapuro == 'YO' THEN out = 'ヨ' WHEN wapuro == 'RA' THEN out = 'ラ' WHEN wapuro == 'RI' THEN out = 'リ' WHEN wapuro == 'RU' THEN out = 'ル' WHEN wapuro == 'RE' THEN out = 'レ' WHEN wapuro == 'RO' THEN out = 'ロ' WHEN wapuro == 'WA' THEN out = 'ワ' WHEN wapuro == 'WO' THEN out = 'ヲ' WHEN wapuro == 'N' THEN out = 'ン' WHEN wapuro == 'KYA' THEN out = 'キャ' WHEN wapuro == 'KYU' THEN out = 'キュ' WHEN wapuro == 'KYO' THEN out = 'キョ' WHEN wapuro == 'GYA' THEN out = 'ギャ' WHEN wapuro == 'GYU' THEN out = 'ギュ' WHEN wapuro == 'GYO' THEN out = 'ギョ' WHEN wapuro == 'SHA' | wapuro = 'SYA' THEN out = 'シャ' WHEN wapuro == 'SHU' | wapuro = 'SYU' THEN out = 'シュ' WHEN wapuro == 'SHO' | wapuro = 'SYO' THEN out = 'ショ' WHEN wapuro == 'JA' | wapuro = 'ZYA' THEN out = 'ジャ' WHEN wapuro == 'JU' | wapuro = 'ZYU' THEN out = 'ジュ' WHEN wapuro == 'JO' | wapuro = 'ZYO' THEN out = 'ジョ' WHEN wapuro == 'CHA' THEN out = 'チャ' WHEN wapuro == 'CHU' THEN out = 'チュ' WHEN wapuro == 'CHO' THEN out = 'チョ' WHEN wapuro == 'NYA' THEN out = 'ニャ' WHEN wapuro == 'NYU' THEN out = 'ニュ' WHEN wapuro == 'NYO' THEN out = 'ニョ' WHEN wapuro == 'HYA' THEN out = 'ヒャ' WHEN wapuro == 'HYU' THEN out = 'ヒュ' WHEN wapuro == 'HYO' THEN out = 'ヒョ' WHEN wapuro == 'BYA' THEN out = 'ビャ' WHEN wapuro == 'BYU' THEN out = 'ビュ' WHEN wapuro == 'BYO' THEN out = 'ビョ' WHEN wapuro == 'PYA' THEN out = 'ピャ' WHEN wapuro == 'PYU' THEN out = 'ピュ' WHEN wapuro == 'PYO' THEN out = 'ピョ' WHEN wapuro == 'MYA' THEN out = 'ミャ' WHEN wapuro == 'MYU' THEN out = 'ミュ' WHEN wapuro == 'MYO' THEN out = 'ミョ' WHEN wapuro == 'RYA' THEN out = 'リャ' WHEN wapuro == 'RYU' THEN out = 'リュ' WHEN wapuro == 'RYO' THEN out = 'リョ' /* special katakana forms */ WHEN wapuro = '' THEN out = '' OTHERWISE out = wapuro END CALL CHAROUT, out RETURN 1