2004/02/01
Phase 8.2.0
華和梨開発チーム :
NAKAUE.T (Meister), 偽Meister (夢乃), さとー, 酔狂, さくらのにえ
華和梨Phase 8では、かつてないほど大規模な変更が行われているため、 移行には、実質的に新しい栞に乗り換えるのと同等のコストがかかると見込まれます。 その負担を少しでも減らすために、 過去互換性を持たない重要変更点と、移行のヒントを挙げます。 新しい仕様の詳細はユーザーズマニュアルを参照してください。
1. kawari.ini消滅
2. システムエントリ整理/イベントエントリ統合
3. マッチエントリ消滅
4. 内臓piro消滅
5. 履歴参照ルールが小変更
6. expr, test消滅
7. if文の文法変更
8. enumerate消滅
9. get/setの動作変更
10. その他のKISコマンドの変更
11. 複数行対応
kawari.iniは使えなくなりました。 華和梨が読み込む全てのファイルは、単一の「華和梨辞書形式」になります。 華和梨辞書形式では、「ゾーン切り替え」によって、辞書が読み込まれた瞬間にその場で直接実行されるKIS文を書けるようになっています。 つまり、以前kawari.iniでしかできなかったことが、全ての辞書ファイルで可能になりました。
華和梨Phase8が最初に読むファイルは「kawarirc.kis」になりました。 当然、これも普通の辞書ファイルです。
直接KISを書くゾーンに切り替えるには、 そのゾーンを「=kis」のみの行と 「=end」のみの行で囲います。
従来の書式をPhase 8の書式で書き直すと以下のようになります。
システムエントリの構成が大幅に変更されました。 event.イベント名や、 system.OnXXXXX形式のエントリは自動的には呼ばれません。 イベント処理ルーチンを自力で開発していた方は注意してください。
従来華和梨が行っていた作業についても、KISで書くようになっています。 逆に言えば、変更するには華和梨のバイナリを書き換える以外なかった部分まで、 KISで修正が可能です。
詳細はユーザーズマニュアルを参照してください。
マッチエントリ(コミュニケートに用いました)機能が削除されました。 従来のマッチエントリには、ゴースト名やシチュエーションに依存して処理を切り分けることができないという欠点がありました。
Phase 8では、いわゆるコミュニケートイベントは、ほとんどSHIORI仕様に直結した形になっており、華和梨システムが大きなサポートをすることはありません。 その代わり、コミュニケート支援のためのKISコマンドが幾つか追加され、 コミュニケート機能を助けるKISパッケージを作成できるようになっています。 そうしたパッケージを探して利用するのが良いでしょう。
削除しました。 華和梨辞書形式で書いてください。
従来は「履歴参照による置換は履歴参照に追加されない」 「エントリ呼び出し以外は履歴参照に追加されない」でしたが、 Phase 8では、 「$で始まるものは全て履歴参照に入る」 に変更されました。
exprコマンド、testコマンドは削除され、 新たに「演算式」が書けるようになりました。 演算式は$[ 〜 ]という書式になります。 基本的にはexprの機能を引き継いだものです。
幸水の表記で演算式をいくつか示します:
演算式中では、以前のexprやtestが持っていた全ての演算記号に限らず、 常識的な演算記号は全て使えます。 testの持っていた、-gtや-ltと言った演算子はなくなり、 exprのように文字列と数値は自動判別されるようになりました。
$[ 〜 ]の中では自由に空白・改行を入れられます。 空白が全く無くてもかまいません。
( 〜 )によるグルーピングができます。 exprでは、閉じかっこのみクォートが必須という仕様でしたが、 演算式では普通に式が書けます。
ただし、exprの'|'、'&'は、それぞれ、 '||'、'&&'になりました。 比較などに 文字列を使う場合は、必ずクォートしなければならなくなりました。 exprの持っていたsubstr, lengthなどの演算機能(サブコマンド)は、 独立したKISコマンドとして再定義されました。
数値についてはexpr, testと同様、整数しか使えません。 また、数値と見なせるものは強制的に数値扱いになります。 どうしても文字列として比較を行いたい場合は、 KISのcompareコマンドを使ってください。
以下のようになりました。
else や if と、その直前直後の単語との間、また、条件と実行単語の間には、 必ず空白か改行が必要です。 連続して書いてはいけません。
条件はいくらでも並べることができます。 KISが書ける場所は必ず複数行に分けて書けるため、 以下のように見やすく並べることができます。
複数行対応の副作用として、 $( 〜 )の最後以外では、 構文コマンドにおいても、末尾にセミコロン(';')が必要 という点が見過ごされやすくなってしまいました。 気を付けてください。 基本的にセミコロンを付ける習慣にすると良いでしょう。 if文は、elseやelse if節の全てを含めて一つのインラインスクリプト文になるため、 全体の最後にのみセミコロンが必要であり、それは必須です。
極めて例外的な動作を行っていたenumerateコマンドは削除されました。 getcodeやloopコマンドを使ってください。
辞書アクセスコマンドは完全に刷新されました。
従来はエントリ中の単語の順序は非保証(順序が保たれるとは限らない)でしたが、 Phase 8ではエントリ中の単語の順序が保証されるようになったため、 「あるエントリのx番目の単語を取り出す」 という処理が正式にできるようになりました。
それに従い、get/set系コマンドについては、 get リストエントリ[2] のように、 エントリ名に添えられた[ ]によって、 エントリの何番目かを指定できるようになりました。 この書き方はget/setシリーズ、およびinsert/clearコマンドにおいて有効です。
また、 getコマンドを従来どおりに get エントリ名 と呼ぶと、エントリに存在する全ての単語を実行する ようになりました。注意してください。 get エントリ名[0]とするか、 getrandom エントリ名、もしくは entry エントリ名 とすると良いでしょう。
setstr/pushstr/adddictstrコマンドが追加されました。 引数を「必ず文字列として扱うように」追加するコマンドです。 通常の使用では、ほぼxxxstr系を使う形が最適のはずですので、 できるだけこれらを利用するようにしてください。
textload/readdirの引数順が、共に
だったものが、
に変更されました。
textload/splitは、出力が「エントリ名.1」「エントリ名.2」... という風に別エントリに格納されていたものが、 単純に、一つのエントリの0番目の文、1番目の文、... という風に一つのエントリの別の文として格納されるようになりました。
辞書中の幾つかの場所を、複数行に展開して書けるようになりました。 これらは、 従来一行に書かなければならなかったものを、途中で改行できるようにした ものなので、従来通り一行に書いても問題ありません。