〜 テキスト 〜
カタカナをローマ字に変換

主にタイピングゲームなどで活用できることでしょう。
変換テーブルを用いて、片仮名を定義したローマ字に置き換えるモジュールです。
小さい「ッ」のように、ローマ字にすると「LTU」「XTU」「LTSU」等、幾つか存在するものもあります。
どれに変換するか、は初めに定義する変換テーブル側で決めましょう。
タイピングゲームとして作る場合は、利用者に合わせる為、設定できるようにしておくと親切ですね。
尚、対象文字列と変換テーブルとの照合は、テーブル内の文字を総ナメしても構いませんが、
サンプルの様に、片仮名と同じ順番に配置することで条件分岐させる必要がなくなります。
片仮名以外が入っていても動作に問題ありませんが、変換対象文字は片仮名だけです。
元のデータに片仮名以外の平仮名等が混在しており、それら全てをローマ字に変換したい場合は、
コチラコチラなどのスクリプトを併用し、実現させてください。
HSP2は変数の自動拡張が行われません。全角(2バイト)より、大きなものに変換する場合がありますので、
変換後の文字列を入れる変数は、元の文字列分よりも大きめにしておくほうが無難です。
	

lomainit
[パラメータなし]初期化するだけのため、パラメータは必要ない。

lomachg 書込先変数, 読込元変数
書込先変数変換後のテキストを代入する変数を指定する。
読込元変数ローマ字への変換対象変数を指定する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#module
#deffunc lomainit
	sdim tbl, 4, 86
	tbl.0  = "LA", "A",  "LI", "I",  "LU", "U",  "LE", "E",  "LO", "O"		// ァ ア ィ イ ゥ ウ ェ エ ォ オ
	tbl.10 = "KA", "GA", "KI", "GI", "KU", "GU", "KE", "GE", "KO", "GO"		// カ ガ キ ギ ク グ ケ ゲ コ ゴ
	tbl.20 = "SA", "ZA", "SI", "ZI", "SU", "ZU", "SE", "ZE", "SO", "ZO"		// サ ザ シ ジ ス ズ セ ゼ ソ ゾ
	tbl.30 = "TA", "DA", "TI", "DI", "LTU","TU", "DU", "TE", "DE", "TO"		// タ ダ チ ヂ ッ ツ ヅ テ デ ト
	tbl.40 = "DO", "NA", "NI", "NU", "NE", "NO", "HA", "BA", "PA", "HI"		// ド ナ ニ ヌ ネ ノ ハ バ パ ヒ
	tbl.50 = "BI", "PI", "FU", "BU", "PU", "HE", "BE", "PE", "HO", "BO"		// ビ ピ フ ブ プ ヘ ベ ペ ホ ボ
	tbl.60 = "PO", "MA", "MI", "",   "MU", "ME", "MO", "LYA","YA", "LYU"		// ポ マ ミ ・ ム メ モ ャ ヤ ュ
	tbl.70 = "YU", "LYO","YO", "RA", "RI", "RU", "RE", "RO", "LWA","WA"	// ユ ョ ヨ ラ リ ル レ ロ ヮ ワ
	tbl.80 = "WI", "WE", "WO", "NN", "VU", "LKA","LKE"			// ヰ ヱ ヲ ン ヴ ヵ ヶ
	return

#deffunc lomachg val, val
	mref rstr, 24 : mref string, 25
	p = 0
	repeat
		wpeek chk, string, cnt
		// 終了
		if chk = 0 : break
		// 対象が全角の場合
		if (chk & $FF > 128) && (chk & $FF < 160) || (chk & $FF > 223) {
			// 対象が全角カナの場合
			if (chk & $FF = 131) && (chk >> 8 >= 64) && (chk >> 8 <= 150) {
			  chk = (chk >> 8) - 64 // 変換テーブルの要素番号(「ァ(=64)」を0)にする
			  rstr += tbl.chk
			  strlen chk, tbl.chk
			  p += chk
			// それ以外
			} else {
			  wpoke rstr, p, chk
			  p += 2
			}
			continue cnt + 2
		// 半角の場合
		} else {
			poke rstr, p, chk & $FF
			p+
		}
	loop
	return
#global

	sdim string, 64, 2
	string = "アィグセド123ナヒプヘボあいうマミュヨラリルabcワヲンHSP"
	lomainit
	lomachg string.1, string.0
	mes "変換前:" + string.0
	mes "変換後:" + string.1
	stop

lomainit
[パラメータなし]初期化するだけのため、パラメータは必要ない。

書込先 = lomachg(読込元文字列)
書込先変換後のテキスト代入先を指定する。
読込元文字列ローマ字への変換対象文字列定数または変数を指定する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#module
#deffunc lomainit
	sdim tbl, 4, 86
	tbl.0  = "LA", "A",  "LI", "I",  "LU", "U",  "LE", "E",  "LO", "O"		// ァ ア ィ イ ゥ ウ ェ エ ォ オ
	tbl.10 = "KA", "GA", "KI", "GI", "KU", "GU", "KE", "GE", "KO", "GO"		// カ ガ キ ギ ク グ ケ ゲ コ ゴ
	tbl.20 = "SA", "ZA", "SI", "ZI", "SU", "ZU", "SE", "ZE", "SO", "ZO"		// サ ザ シ ジ ス ズ セ ゼ ソ ゾ
	tbl.30 = "TA", "DA", "TI", "DI", "LTU","TU", "DU", "TE", "DE", "TO"		// タ ダ チ ヂ ッ ツ ヅ テ デ ト
	tbl.40 = "DO", "NA", "NI", "NU", "NE", "NO", "HA", "BA", "PA", "HI"		// ド ナ ニ ヌ ネ ノ ハ バ パ ヒ
	tbl.50 = "BI", "PI", "FU", "BU", "PU", "HE", "BE", "PE", "HO", "BO"		// ビ ピ フ ブ プ ヘ ベ ペ ホ ボ
	tbl.60 = "PO", "MA", "MI", "",   "MU", "ME", "MO", "LYA","YA", "LYU"		// ポ マ ミ ・ ム メ モ ャ ヤ ュ
	tbl.70 = "YU", "LYO","YO", "RA", "RI", "RU", "RE", "RO", "LWA","WA"	// ユ ョ ヨ ラ リ ル レ ロ ヮ ワ
	tbl.80 = "WI", "WE", "WO", "NN", "VU", "LKA","LKE"			// ヰ ヱ ヲ ン ヴ ヵ ヶ
	return

#defcfunc lomachg var string, local rstr, local chk
	sdim rstr, strlen(string) * 2
	repeat
		chk = wpeek(string, cnt)
		// 終了
		if chk = 0 : break
		// 対象が全角の場合
		if (chk & $FF) > 128 && (chk & $FF) < 160 || (chk & $FF) > 223 {
			// 対象が全角カナの場合
			if (chk & $FF) = 131 && (chk >> 8) >= 6 && (chk >> 8) <= 150 {
			  rstr += tbl((chk >> 8) - 64)
			// それ以外
			} else {
			  wpoke rstr, strlen(rstr), chk
			}
			continue cnt + 2
		// 半角の場合
		} else {
			poke rstr, strlen(rstr), chk & $FF
		}
	loop
	return rstr
#global

	sdim string, 64
	string = "アィグセド123ナヒプヘボあいうマミュヨラリルabcワヲンHSP"
	lomainit
	mes "変換前:" + string.0
	mes "変換後:" + lomachg(string.0)