言語モジュールをつくる

世界文字入力小物を使うと、日本語のかな漢字変換と同様の操作で、世界各国の言語をキーボードから直接入力できます。この仕組みのことをTransGryph(トランスグリフ)といいます。ここでは、ユーザー自身が、それぞれの言語に対応した入力システムを記述するための、言語モジュールの仕組みについて説明します。

■基本概念

TransGryphでは、かな漢字変換システムをユーザーが定義できるよう、スクリプト言語によってかな漢字変換システムを記述することができるようになっています。このスクリプトは、かな漢字変換だけでなく、一般的な多国語入力がサポートできるようになっており、特殊な言語にもユーザー側で対応させることができるようになっています。

このシステムでは、超漢字Vのかな漢字変換に合わせた動作をおこなうため、入力されたキーは、ADD_KEYコマンドを使用して「読み」として取り込みます。「読み」は入力中に加工されますが、これを元に表示用のフィルタ辞書や、確定用のフィルタ辞書を持つことができ、特殊な文字にも対応することができるようになっています。また、確定時には「読み」も入力されます。

かな漢字変換については、文節変換のための専用モードを用意してあります。これは、「読み」を元に文節に分解し、各文節について辞書と候補を選択できるようになっています。

■スクリプトコマンド

以下の説明では、それぞれのスクリプトコマンドについて、スクリプトコマンド名、スクリプトコマンドの機能、構文の順に説明します。必要に応じて、構文の後に図表が添付されます。

∇構文の表記について

それぞれのスクリプトコマンドについて、構文のルールを図で示しています。矢印のない線は左から右に進みます。分岐している箇所は、どちらに進んでもよいことを示します。円、および長円は、その中に書かれている文字をそのまま記述することを示します。長方形の中に書かれてあるものは説明であり、説明に応じて辞書名や文字列などを記述することを示します。

TRANSGRYPH MODE1

モジュール実身に対応するインタプリタを指定します。必ず、先頭に

「TRANSGRYPH MODE1」

と改行を置きます。この前に改行・空白などを入れることはできません。

このあとには、スクリプトセクションが続きます。スクリプトセクションは、キー入力があるたびに実行されます。ここにコマンドを記述することで、各キーが入力されたときの動作を指定することができます。スクリプトは上から下に実行されます。

DICTIONARYからあとは辞書セクションで、辞書ごと分かれています。

モジュール実身の書式

DICTIONARY

辞書セクションの定義を示します。スクリプトセクションは最初のDICTIONARYまでで終了し、以降は辞書の定義になります。

辞書名は、システムスクリプトの文字で記述する必要かあります。間に空白やタブを含むことはできません。最大で26の辞書を登録することができます。登録した辞書は、スクリプトセクションでの指定により、フィルタや文節変換辞書として使用することができます。

なお、同じ名前の辞書を複数回定義することはできません。

DICTIONARY書式

† 辞書の記述

辞書セクションでは、1行に1項目ずつ、読みと表記を記述します。キーから入力された文字の読み替えや、ローマ字カナ変換、かな漢字変換などは、辞書によっておこなうことができます。

[は先頭でのみ有効な候補、<は先頭以外でのみ有効な候補、]は末尾でのみ有効な候補、>は末尾以外でのみ有効な候補を示します。たとえば[]という指定は、読みが全体と一致する場合にのみ有効な候補を意味します。

項目の並びが文字コード順になっていると、より高速に検索がおこなわれます。

項目として@THRUを記述すると、文節変換時には読みをそのまま表記として指定したことになり、無変換の候補を作ることができます。フィルタ動作時には、任意の1文字の読みをそのまま表記として指定したことになり、読みを変換せずに出力することができます。

辞書の記述

#

スクリプトセクション・辞書セクションにおいて、コメントを記述します。#から改行までは読み飛ばされ、スクリプトの実行に影響を与えません。

#書式

IF
ELSEIF

スクリプトセクションでの条件分岐をおこないます。条件には、システムフラグ、ユーザーフラグ、キー入力文字を指定することができます。次のIF・ELSEIFまでの区間は、ここで指定した条件が満たされた場合にのみ実行されます。IFだけを記述すると、次のIFまでの区間は常に実行されます。なお、ネストさせることはできません。

フラグがONのときに実行する場合は、+$ENGのように、+のあとにフラグ名を記述します。フラグがOFFのときに実行する場合は、-$ENGのように、-のあとにフラグ名を記述します。

キー入力文字の指定は、[]内に4桁の16進数で文字コードを記述するか、[]内に文字コードの範囲を指定するか、タブのあとに文字そのものを文字列として記述するか、または読みが書いてある辞書の辞書名を記述します。キー入力文字が複数指定されている場合、どれか1つでも条件を満たせば、実行されます。

ELSEIFは、それまでのIF・ELSEIFで条件が満たされなかった場合にのみ実行されます。フラグが複数指定されていたり、フラグ・キー入力文字が組み合わせて指定されている場合は、すべての条件を満たした場合にのみ実行されます。

IF ELSEIF書式

システムフラグ一覧
システムフラグ 内容
$CHR 文字キーの入力のときON
$ENG 英語モードでON
$CAP Caps/カタカナモードでON
$LSH 左[Shift]が押されているとON
$RSH 右[Shift]が押されているとON
$SHT [Shift]が押されているとON
$CMD 左[Ctrl]キーが押されているとON
$EXT [Alt]キーが押されているとON
$RMA ローマ字モードでON
$HLF 半角モードでON
$EMP 未確定文字がなければON
$CNV 変換中ならON
$TOP カーソル・着目文節が先頭でON
$END カーソル・着目文節が末尾でON

SET_FLG
CLR_FLG

スクリプトセクションでユーザーフラグを操作します。+のあとにフラグ名を指定するとフラグがONになり、-のあとにフラグ名を指定するとフラグがOFFになります。

IFで条件分岐する際に、ユーザーフラグを参照することができます。

フラグ名は、システムスクリプトの文字で記述する必要があります。間に空白やタブを含むことはできません。最大で26のユーザーフラグを登録することができます。

ユーザーフラグは、対応するテキスト入力ポートごとに、別々に保持されています。入力モジュールを切り替えた場合、すべてのユーザーフラグはリセットされますので注意してください。

SET_FLG CLR_FLG書式

SET_CNV

スクリプトセクションで、文節変換時に使用されるディフォールト辞書と変換方法を指定します。

変換方法は0~2の数字で指定し、0は最初に見つかった候補を、1はもっとも読みが長く一致する候補を、2は2文節最長一致を示します。省略時は0となります。

辞書に@THRUを指定すると、無変換の候補のみの指定となります。モジュール起動時は@THRU辞書が指定されています。

SET_CNV書式

SET_KEY

スクリプトセクションで、ADD_KEYコマンドの実行時に、キー入力文字を変換するためのフィルタ辞書を指定します。

辞書に@THRUを指定すると、変換はおこなわれずにそのまま入力されます。辞書に@NONEを指定すると、変換の結果は空になり、なにも入力されません。モジュール起動時は@THRU辞書が指定されています。

SET_KEY

SET_FIX
SET_TOP
SET_END

スクリプトセクションで、読みの表示・確定に関する辞書と変換方法を指定します。

SET_FIXは、読み入力時に確定した場合のフィルタ辞書を指定します。読み入力時に、OUTコマンドなどによる確定動作がおこると、この辞書を使って読みがフィルタされ、出力されます。

SET_TOPは、読み入力時に、カーソルから左の部分の読みを表示するためのフィルタ辞書を指定します。同様にSET_ENDは、カーソルから右の部分の読みを表示するためのフィルタ辞書を指定します。

変換方法は0~2の数字で指定し、0は最初に見つかった候補を、1はもっとも読みが長く一致する候補を、2は2文節最長一致を示します。省略時は0となります。

辞書に@THRUを指定すると、変換はおこなわれずにそのまま出力されます。辞書に@NONEを指定すると、変換の結果は空になり、なにも出力されません。モジュール起動時は、いずれも@THRU辞書が設定されています。

SET_FIX SET_TOP SET_END書式

NEXT

スクリプトセクションで、以降のスクリプトを実行せずに処理を終了します。

NEXT

PASS
BEEP

スクリプトセクションで、入力されたキーをエラーにします。

モジュールで処理できない制御キーが入力された場合などには、PASSコマンドを実行すると、アプリケーション側から確定操作がおこなわれたあと、キーが処理されます。

入力された文字キーが不正である場合などには、BEEPコマンドを実行すると、警告音が鳴って、キーが無視されます。

このコマンドを実行すると、以降のスクリプトは実行されません。なお、未確定文字列の操作などをおこなった状態でこのコマンドを実行した場合、動作は保証されません。

PASS BEEP書式

ADD_KEY

スクリプトセクションで、指定された辞書と変換方法を使い、キー入力文字を読みとして取り込みます。文節変換状態のときは、読み入力状態に戻った上で、読みが取り込まれます。変換方法の指定は、SET_CNV等と同じです。

キー入力はまず、SET_KEYにより指定されたフィルタ辞書を通ります。この結果は、カーソルから左の部分の読みに結合され、さらにADD_KEYで指定されたフィルタ辞書を通ります。最後に、カーソルから右の部分の読みに結合され、新たな読みとなります。

フィルタ辞書を指定しなかった場合は、無変換で取り込まれます。

SET_KEYで@NONE辞書を指定した場合、キー入力文字は完全に無視されます。これを利用して、カーソルから左の部分の読みを辞書により加工するようなことも可能です。

ADD_KEY書式

OUT_ALL
OUT_TOP

スクリプトセクションで、未確定文字を確定します。読み入力状態のときは、読みがSET_FIXのフィルタ辞書を通って確定します。確定は何度にも分けておこなうことができます。

OUT_ALLは、未確定文字をすべて確定します。OUT_TOPは、カーソルから左の部分だけを確定します。

文節変換中に文字入力によって確定する場合、OUT_ALLコマンドを使って一度確定してからADD_KEYコマンドを使って読みを入力する必要があります。文節変換中にADD_KEYコマンドを実行すると、文節変換が解除されて読みが追加されますので、注意してください。

OUT_ALL OUT_TOP書式

CUR_TOP
CUR_END
CUR_BAK
CUR_FWD

スクリプトセクションで、カーソル・着目文節の移動をおこないます。読み入力状態の場合はカーソルを移動し、文節変換中は着目文節を移動します。

CUR_TOPは左端に移動し、CUR_ENDは右端に移動します。

CUR_BAKは左に1つ移動し、CUR_FWDは右に1つ移動します。すでに端まで来ていた場合、反対の端に移動します。これを抑止したい場合は、$TOPや$ENDのフラグを見て条件分岐するようにしてください。

CUR_TOP CUR_END CUR_BAK CUR_FWD書式

DEL_BAK
DEL_FWD

スクリプトセクションで、変換中状態であれば読み入力状態に戻した上で、カーソルの前後の1文字を削除します。DEL_BAKはカーソルの直前の1文字を削除します。DEL_FWDはカーソルの直後の1文字を削除します。

DEL_ALL DEL_TOP DEL_END書式

DEL_ALL
DEL_TOP
DEL_END

スクリプトセクションで、変換中状態であれば読み入力状態に戻した上で、読み文字列を削除します。DEL_ALLは読みをすべて削除し、何も入力されていない状態に戻します。DEL_TOPはカーソルから先頭までを、DEL_ENDはカーソルから末尾までを、それぞれ削除します。

DEL_ALL DEL_TOP DEL_END書式

CNV_DIC

スクリプトセクションで、文節変換を開始します。

読み入力状態であれば、カーソルから左を1文節とし、指定された辞書で変換します。辞書を省略した場合は、SET_CNVの辞書で変換されます。カーソルから右の部分は、SET_CNVの辞書で文節に分解して変換されます。全体を文節に分解して変換したい場合は、CUR_TOPを実行してからCNV_DICを実行してください。

文節変換中であれば、着目文節を指定された辞書に変更します。辞書を省略した場合は、辞書は変更されません。着目文節から右の文節は、SET_CNVの辞書で文節に分解しなおされ、変換されます。

CNV_DIC書式

CNV_FWD
CNV_BAK
CNV_TOP

スクリプトセクションで、文節変換中の着目文節の候補を操作します。文節変換中でなければ、CNV_DICコマンドとまったく同じ動作になります。

CNV_FWDは着目文節に対し、次の候補を選択します。辞書が指定されていて、切り替わった場合は、最初の候補を選択します。CNV_BAKは、同様に前の候補を選択します。

CNV_TOPは着目文節に対し、辞書が指定されていれば指定された辞書に切り替えた上で、最初の候補を選択します。

CNV_FWD CNV_BAK CNV_TOP書式

CNV_SHT
CNV_LNG

スクリプトセクションで、文節変換中の着目文節の候補を操作します。文節変換中でなければ、CNV_DICコマンドとまったく同じ動作になります。

CNV_SHTは着目文節に対し、文節長を1文字短くします。辞書が指定されていれば指定された辞書に切り替えた上で、最初の候補を選択します。文節長が変更されたことにともない、続く文節は自動的にSET_CNVの辞書で文節に分解され、変換しなおされます。

CNV_LNGは同様に、文節長を1文字長くします。

CNV_SHT CNV_LNG書式

CNV_CAN

スクリプトセクションで、文節変換中であれば、読み入力状態に戻します。そうでなければ、何も起こりません。

CNV_CAN書式

■スクリプトの例

入力されたキーを読みとして編集するスクリプトは、以下のようになります。

まず、左[Ctrl]キー(+$CMD)と文字キー(+$CHR)が押された場合はメニューのメニュー文字を示しているので、PASSコマンドを実行してアプリケーションに渡します。またこのスクリプトでは必要ありませんが、変換中(+$CNV)に文字キー(+$CHR)が押された場合は、あらかじめOUT_ALLで確定しておきます。

英語モード(+$ENG)で未入力(+$EMP)のときに文字キー(+$CHR)が押された場合は、ADD_KEYで読みに追加し、ただちにOUT_ALLで確定します。そうでない文字キーの場合は、ADD_KEYで読みに追加します。

あとは、文字キー以外、つまり制御キーの処理になります。未入力(+$EMP)の場合は、制御キーはPASSコマンドでアプリケーションに渡します。

カーソルキーは、[↓]が0100、[↑]が0101、[→]が0102、[←]が0103です。右[Ctrl]または[F10]キーは0004で、[変換]キーは001e、[Shift]+[変換]は001f、[無変換]は1151、[Shift]+[無変換]は1152です。

右[Ctrl]または[F10]キー(0004)の場合は、全体を確定します。

[Delete]キー(007f)や、[Esc]または[F9]キー(0018)は、読みを全削除します。[Shift]キー(+$SHT)と[Backspace](一字消)キー(0008)が押されたときは、DEL_FWDを実行して、カーソルの直後の一文字を削除します。[Backspace]キーだけの場合はDEL_BAKを実行して、カーソルの直前の一文字を削除します。

それ以外のキーは、PASSコマンドでアプリケーションに渡します。

†以下のスクリプトは、基本文章編集で文章実身として入力し、それを世界文字入力小物のウィンドウにドラッグすることで、利用できるようになります。

スクリプト例

前のページへ世界文字入力で欧州文字を入力する 次のページへキー配列変更

ページの先頭へ戻る

HOME > サポート情報 > 取扱説明書 > 言語モジュールをつくる