プチコンで遊ぼう! (はてなブログ版)

任天堂3DSのプチコンで遊ぼう! [twitter:@eida_s]

はてなダイアリーから移行しました。 はてなダイアリーのURLを開いても自動的にこちらにリダイレクトされますのでご了承ください。

ひらがな/カタカナの混在表示

フォントエディタでひらがなとカタカナの共存フォントを作ったので、ひらがなとカタカナを混在表示してみます。

ひらがなはもともとのグラフィックキャラに割り当ててあるので、直に入力するのは面倒です。
カタカナの前半部分(176〜207)に相当するひらがなは、前に32ずらして144〜175に定義、カタカナ後半部分(192〜223)に相当するひらがなは、後ろに32ずらして224〜255に定義したのでそれを利用します。
なお、濁点、半濁点、長音記号などはカタカナと重複しますが、ひらがなにも同じフォントを定義しておきます。

文字列中にエスケープシーケンスのように特殊記号を埋め込み、この記号を境に、カタカナとひらがなを切り替えることで、「¥Hヒラガナ¥Kカタカナ」とすると、「ひらがなカタカナ」のように表示されるようにしたのが下のサンプルプログラムです。
英数字、記号などもそのまま使えます。

CLS
SI$="¥Hヒラガナ ト ¥Kカタカナ¥Hヲ コンザイ ヒョウジデキマス!"
GOSUB @HIRAKATA
?SO$
SI$="¥Hモチロン、ALPHABETヲ ¥Kミックス¥Hシテモ¥Kオッケー!"
GOSUB @HIRAKATA
?SO$
END

@HIRAKATA
'SI$: ニュウリョク モジレツ
'SO$: シュツリョク モジレツ
SO$=""
_L=LEN(SI$)-1
_I=0
_HK=0:'0=カタカナ,1=ヒラガナ
@_1HIRA
_T$=MID$(SI$,_I,2)
IF _T$=="¥K" THEN _HK=0:_I=_I+2:GOTO @_1HIRA
IF _T$=="¥H" THEN _HK=1:_I=_I+2:GOTO @_1HIRA
IF _T$=="¥¥" THEN _I=_I+1
_T$=MID$(SI$,_I,1)
IF _T$=="" THEN @_2HIRA
_T=ASC(_T$)
IF _HK==1 AND 160<=_T AND _T<=191 THEN _T=_T-32
IF _HK==1 AND 192<=_T AND _T<=223 THEN _T=_T+32
SO$=SO$+CHR$(_T)
_I=_I+1
GOTO @_1HIRA
@_2HIRA
RETURN