Saturday, January 11, 2014

プチコンでローマ字入力

プチコンmkIIでローマ字カナ入力するプログラムを作りました。

プログラム自体は1年前にできてて他のプログラムに組み込む予定でした。が忙しくなったり思ったより大変そうだったのでローマ字部分だけ切り出し。

探してみたら、ローマ字変換はいろんな方が作成されていました。見つけていないものもある気がします。

作ったのはサブルーチン的に使うものです。
変換内容がカスタマイズしやすいかもしれません。
他の方と方向性はかぶっていないと思うので公開します。

表示されてるカナも変換結果


QRコード てきとうなプロムラム名 "RK"

使い方
1:準備
 GOSUB @RKSETUP:GOSUB @RK0を実行

2:ローマ字文字列をカナに変換する
 @TITLEのところがサンプルです。
 IN$に変換したいローマ字文字列を入れ、GOSUB @RKで、OUT$にカナ変換された結果が返ります。

3:キー入力を変換する
 @INPTのところがサンプルです。
 K$に入力文字を入れ、GOSUB @RK1で、O$にカナ変換された結果が返ります。
 このとき、文字が足りない場合はO$=""となります。
 例)「チャ」を入力する場合
  K$="C" --> O$=""
  K$="H" --> O$=""
  K$="A" --> O$="チャ"

GOSUB @RK0で入力途中の内容をクリアします。

注意:
  変数AB$、RM$()、RK$()にはカナ変換用データがあり、変数B, C, I$は入力途中の内容を保持しているため書き換えると結果がおかしくなります。
  変数A, D, I, J, L$は保持されません。

補足
ローマ字にはいろんな方式があるのですが、プログラムは今や廃止となったJISX4063:2000の規格+α(Lで始まる変換ほかいろいろ追加)です。

リスト
'ロ-マシ゛ カナ ヘンカン
CLEAR:CLS
GOSUB @RKSETUP
GOSUB @RK0
@TITLE
IN$="RO-MAJI HENNKANN NYUURYOKU"
GOSUB @RK:?OUT$
IN$="TEKITOUNI KI-WO TATTI SITEMITEKUDASAI"
GOSUB @RK:?OUT$
@INPT
VSYNC 1:K$=INKEY$()
IF K$=="" GOTO @INPT
GOSUB @RK1:?O$;:GOTO @INPT
'***************************
@RK
_A=A:_B=B:_C=C:_D=D:_I=I
_I$=I$:_K$=K$:_L$=L$:_O$=O$
OUT$="":GOSUB @RK0
FOR I=0 TO LEN(IN$)-1
K$=MID$(IN$,I,1):GOSUB @RK1
OUT$=OUT$+O$:NEXT
A=_A:B=_B:C=_C:D=_D:I=_I
I$=_I$:K$=_K$:L$=_L$:O$=_O$
RETURN
@RK0
B=0:C=0:I$="":RETURN
@RK1 'B,C,I$ ハ カキカエナイコト!!
IF K$=="^" THEN O$="-":I$="":C=0:RETURN
A=INSTR(RM$(0),K$)
IF A>=0 GOTO @RK2
I$=I$+K$:L$=K$:O$=""
D=B:B=INSTR(RM$(C+1),I$)
IF B>=0 THEN C=C+1:RETURN
IF I$=="NN" THEN O$="ン":I$="":C=0:RETURN
IF I$=="N'" THEN O$="ン":I$="":C=0:RETURN
IF INSTR(AB$,K$)>0 AND C AND K$==L$ THEN O$="ッ":I$=K$:B=D:C=1:RETURN
IF B<0 THEN C=0
O$=K$:I$="":RETURN
@RK2
D=0:IF C THEN D=B/(C+1)
O$=RK$(C*35+D,A):C=0
IF O$=="" THEN O$=I$+K$
I$="":RETURN
@RKSETUP
DIM RM$(4),RK$(35*4,5)
READ AB$:FOR I=0 TO 3:J=0
@RKL
READ A$,B$
IF A$=="-" GOTO @RKLN
RM$(I)=RM$(I)+A$:B=LEN(B$)/5
IF I THEN RM$(I)=RM$(I)+CHR$(176)
FOR K=0 TO 4
C$=MID$(B$,K*B,B)
IF RIGHT$(C$,1)=="." THEN C$=LEFT$(C$,B-1)
IF C$=="." THEN C$=""
RK$(I*35+J,K)=C$
NEXT:J=J+1:GOTO @RKL
@RKLN
NEXT:RETURN
@RKDAT
'JIS X 4063:2000
'*1 Mac:ラリルレロ MS/ATOK:ァィゥェォ
'*2 JISX4063:2000ニハナイ
'*3 チイサイ「カ」「ケ」ノモシ゛フォントカ゛フ゜チコンニナイ
'ッ
DATA .BCDFGHJKLMNPQRSTVWXYZ
'
DATA AIUEO,アイウエオ
DATA -,
DATA B,ハ゛ヒ゛フ゛ヘ゛ホ゛
DATA C,カキクケコ
DATA D,タ゛チ゛ツ゛テ゛ト゛
DATA F,ファフィフ.フェフォ
DATA G,カ゛キ゛ク゛ケ゛コ゛
DATA H,ハヒフヘホ
DATA J,シ゛ャシ゛.シ゛ュシ゛ェシ゛ョ
DATA K,カキクケコ
'*1
DATA L,ラリルレロ
'DATA L,ァィゥェォ
DATA M,マミムメモ
DATA N,ナニヌネノ
DATA P,ハ゜ヒ゜フ゜ヘ゜ホ゜
DATA Q,クァクィクゥクェクォ
DATA R,ラリルレロ
DATA S,サシスセソ
DATA T,タチツテト
DATA V,ウ゛ァウ゛ィウ゛.ウ゛ェウ゛ォ
DATA W,ワ.ウィウ.ウェヲ.
DATA X,ァィゥェォ
DATA Y,ヤ.イ.ユ.イェヨ.
DATA Z,サ゛シ゛ス゛セ゛ソ゛
DATA -,
DATA BY,ヒ゛ャヒ゛ィヒ゛ュヒ゛ェヒ゛ョ
DATA CH,チャチ.チュチェチョ
DATA CY,チャチィチュチェチョ
DATA D',タ゛ァテ゛ィト゛ゥテ゛ェト゛ォ
DATA DH,タ゛ァテ゛ィテ゛ュテ゛ェト゛ォ
DATA DW,ト゛ァト゛ィト゛ゥト゛ェト゛ォ
DATA DY,テ゛ャテ゛ィテ゛ュテ゛ェテ゛ョ
DATA FY,フャフィフュフェフョ
DATA GY,キ゛ャキ゛ィキ゛ュキ゛ェキ゛ョ
DATA HW,ファフィフゥフェフォ
DATA HY,ヒャヒィヒュヒェヒョ
'*2
DATA JY,シ゛ャシ゛ィシ゛ュシ゛ェシ゛ョ
DATA KW,クァクィクゥクェクォ
DATA KY,キャキィキュキェキョ
DATA MY,ミャミィミュミェミョ
DATA NY,ニャニィニュニェニョ
DATA PY,ヒ゜ャヒ゜ィヒ゜ュヒ゜ェヒ゜ョ
DATA RY,リャリィリュリェリョ
DATA SH,シャシ.シュシェショ
DATA SY,シャシィシュシェショ
DATA TH,タァティテュテェトォ
DATA T',タァティトゥテェトォ
DATA TS,ツァツィツ.ツェツォ
DATA TW,トァトィトゥトェトォ
DATA TY,チャチ.チュチェチォ
DATA VY,ウ゛ャウ゛ィウ゛ュウ゛ェウ゛ョ
DATA WH,ウァウィウゥウェウォ
DATA WY,..ウィ..ウェ..
DATA XT,..ッ..
'*3
DATA XK,.....
DATA XW,-....
DATA XY,ャ.ュ.ョ
DATA ZY,シ゛ャシ゛ィシ゛ュシ゛ェシ゛ョ
DATA -,
DATA D'Y,タ゛ァテ゛ィテ゛ュテ゛ェト゛ォ
DATA HWY,フャフィフュフェフョ
DATA T'Y,テャティテュテェテョ
DATA XTS,..ッ..
DATA -,

プログラムは、変換のデータ検索にループを使わず遅くならないようにし、データを人にやさしい感じにしました。データの追加はやりやすいです。