KIS リファレンス¶
概要¶
華和梨インラインスクリプト(KIS : Kawari Inline Script)は、華和梨の辞書ファイル中で使用できる簡易言語です。インラインスクリプトを使用することにより、華和梨実行中に辞書へ単語を追加したり、本体から通知されるイベントに応じた処理を行ったりすることができます。
書式¶
インラインスクリプトは、単語中に「$(~)」で囲んで記述します。一つの「$(~)」で囲まれた塊を、「インラインスクリプトブロック」と呼びます。一つのブロックの中には、複数の文を記述できます。文と文の間は「;」(セミコロン)で区切ります。一つの文は、一つのコマンドと零個以上の引数から構成されます。コマンド、セミコロン、各引数の間は、それぞれ一つ以上の空白で区切ります。
インラインスクリプト:
ブロック
ブロック:
$(文)
$(文 ; 文 ; …)
文:
コマンド名 引数1 引数2 …
評価、戻り値、真偽の判定¶
ブロックがイベント呼び出し、発話要求等を通じて華和梨に解釈されることを、「評価」と呼びます。ブロックは評価されると、「戻り値」を返します。戻り値は一つの文字列で、どのような戻り値を返すかはコマンドによって異なります。コマンドによっては、つねに「""」(空文字列)を返すこともあります。
ブロックが複数の文から成る場合、ブロックの戻り値は、ブロック中の全ての文の戻り値を順に繋げたものです。なお、ブロックから戻り値を返したくない場合、silentコマンドを使用すれば抑制できます。
華和梨が戻り値を評価し、ブール代数における「真」か「偽」かを判定する際、次のような基準で判定します。
- 空文字列「""」、文字列「"0"」、文字列「"false"」ならば「偽」
- 「偽」以外ならば「真」("ほげ"、"1"、"true"、" "(空白)...)
この真偽の判定は、後述する構文コマンド、関数コマンド問わず共通です。コマンドを独自に追加する場合、真偽の判定はこの基準に合わせて下さい。
コマンドの種類¶
コマンドは大きく分けて、ifコマンドやwhileコマンドのような「構文コマンド」と、adddictコマンドやdateコマンドのような「関数コマンド」の二つに分類できます。構文コマンドは与えられた条件の真偽に従い、処理の流れを制御します。一方、関数コマンドは与えられた引数に従い、実際の処理を行います。注1 注2
混同する恐れの無い場合、構文コマンドは「構文」、関数コマンドは単に「コマンド」と呼ぶことがあります。
構文コマンドと関数コマンドの違い¶
構文と関数の、実用上最も重要な違いは、
- 構文の評価は引数評価以前に行われる
- 関数の評価は引数評価以後に行われる
という点です。引数評価以前は、引数は「${npw}」や「$(echo Hello)」等の「書いたまま」の状態です。一方、引数評価以後は、引数は展開されて、「カルロス・ゴーン」や「Hello」等の「文字列だけ」の状態となります。引数が通常の文字列だけである場合はさほど問題になりませんが、引数にsetコマンド等の、戻り値よりも機能が目的となるコマンドがあった場合、この差が意味を持つことになります。
true : 真です。$(set tmp OK)
# 下記の二つは、表示上は恐らく同じ結果だが…
$(entry true ${cond}) # true文はcondが不成立でも実行されてしまう。
$(if ${cond} else ${true}) # true文はcondが不成立なら実行されない。
インラインスクリプトに渡される引数の数¶
コマンドに引数を与える時、エントリ呼び出しで与える場合を考えます。
$(echo $(entry ${EntryName}) "Hello")
このケースで、EntryNameエントリに何もセットされていない場合を考えます。この場合、echoコマンドの第1引数は""で、第2引数が「Hello」になります。第1引数が「Hello」ということはありません。インラインスクリプトに渡される引数の数と位置は、エントリ解釈の前に確定します。
コマンド一覧¶
構文コマンド¶
| コマンド | 説明 |
|---|---|
if |
条件判断 |
foreach |
指定エントリ中のすべての単語に対しコマンド実行 |
loop |
指定回数ループ |
silent |
ブロックの出力を抑制 |
until |
条件が成立するまでループ |
while |
条件が成立している間ループ |
break |
ループからの脱出 |
continue |
ループ先頭に戻る |
NULL |
空文字列 |
? |
ランダム選択 |
function |
関数定義 |
lambda |
無名関数の定義 |
rmfunc |
ユーザ定義関数の削除 |
return |
関数からの脱出 |
辞書操作¶
辞書操作コマンドに共通の特徴は、辞書操作コマンド共通事項を参照してください。
| コマンド | 説明 |
|---|---|
set |
エントリに単語をセット |
setstr |
エントリに文字列をセット |
adddict |
エントリに単語を追加 |
adddictstr |
エントリに文字列を追加 |
push |
エントリに単語を追加 |
pushstr |
エントリに文字列を追加 |
unshift |
エントリの先頭に単語を挿入 |
unshiftstr |
エントリの先頭に文字列を挿入 |
insert |
エントリ内の指定した位置に単語を挿入 |
insertstr |
エントリ内の指定した位置に文字列を挿入 |
get |
エントリ中の単語を得る |
getcode |
エントリを評価せずに参照 |
getrandom |
エントリ中のいずれかの単語を得る |
pop |
エントリ最後尾の単語を返し、エントリから削除 |
popcode |
エントリ最後尾の単語を評価せずに返し、エントリから削除 |
shift |
エントリ先頭の単語を返し、エントリから削除 |
shiftcode |
エントリ先頭の単語を評価せずに返し、エントリから削除 |
clear |
エントリから単語を削除 |
cleartree |
エントリツリーから単語を削除 |
size |
エントリ中の単語数を数える |
find |
エントリ中の単語の最初の位置を得る |
rfind |
エントリ中の単語の最後の位置を得る |
copy |
エントリ内容のコピー |
copytree |
エントリ内容をエントリ構造ごとコピー |
move |
エントリ内容の移動 |
movetree |
エントリ内容をエントリ構造ごと移動 |
listsub |
サブエントリのリストを得る |
listtree |
エントリツリー全体のリストを得る |
writeprotect |
エントリを書き込み不可にする |
ファイル操作¶
| コマンド | 説明 |
|---|---|
save |
エントリをファイルに保存 |
savecrypt |
エントリをファイルに暗号化して保存 |
load |
華和梨形式辞書ファイルを読み込む |
textload |
テキストファイルを読み込む |
textappend |
テキストファイルを追記 |
textsave |
テキストファイルを保存 |
textload_charset |
文字コードを指定してテキストファイルを読み込む |
textappend_charset |
文字コードを指定してテキストファイルを追記 |
textsave_charset |
文字コードを指定してテキストファイルを保存 |
readdir |
ディレクトリを読み込む |
cncpath |
パス名をシステムで使えるようにする |
dirname |
パス名からディレクトリ名部分を切り出す |
filename |
パス名からファイル名部分を切り出す |
isexist |
指定ファイルが存在するか判定する |
isdir |
指定ファイルがディレクトリか判定する |
isfile |
指定ファイルが通常ファイルか判定する |
カウンタ¶
| コマンド | 説明 |
|---|---|
dec |
指定エントリの単語を数字と見なし減算する |
inc |
指定エントリの単語を数字と見なし加算する |
文字列操作¶
| コマンド | 説明 |
|---|---|
length |
文字列の長さを得る |
match |
ある部分文字列が現れる最初の位置を得る |
rmatch |
ある部分文字列が現れる最後の位置を得る |
match_at |
ある部分文字列が指定位置に存在するか否か判定する |
substr |
部分文字列を得る |
char_at |
指定位置の文字を得る |
sub |
マッチする最初の文字列を置き換える |
gsub |
マッチする全ての文字列を置き換える |
rsub |
マッチする最後尾の文字列を置き換える |
tr |
文字を置き換える |
reverse |
文字列を逆順にする |
tolower |
アルファベットを小文字にする |
toupper |
アルファベットを大文字にする |
chr |
指定した文字コードの一文字を返す |
split |
文字列を区切り文字で分解 |
join |
区切り文字で文字列を結合 |
compare |
文字列を比較する |
正規表現¶
正規表現コマンド共通の仕様(パターン・オプション・サブルーチン呼び出し)は、正規表現コマンド共通の仕様を参照してください。
| コマンド | 説明 |
|---|---|
regex_match |
正規表現にマッチするか調べる |
regex_find |
正規表現にマッチする最初の位置を得る |
regex_findall |
正規表現にマッチする部分すべてをエントリに格納する |
regex_count |
正規表現にマッチする個数を数える |
regex_replace |
マッチする全ての部分を正規表現で置き換える |
regex_replace_first |
マッチする最初の部分だけを正規表現で置き換える |
regex_erase |
マッチする全ての部分を削除する |
regex_erase_first |
マッチする最初の部分だけを削除する |
regex_split |
正規表現にマッチする部分で文字列を分解する |
regex_escape |
正規表現の特殊文字をエスケープする |
SAORI¶
| コマンド | 説明 |
|---|---|
saoriregist |
SAORIを登録する |
saorierase |
SAORIの登録を解除する |
saorilist |
登録中のSAORI一覧を返す |
callsaori |
登録したSAORIを呼び出す |
callsaorix |
登録したSAORIを呼び出す(高機能版) |
本体との連携¶
| コマンド | 説明 |
|---|---|
getproperty |
本体のプロパティシステムから値を取得する |
setproperty |
本体のプロパティシステムに値を設定する |
executesstp |
本体にSSTPのEXECUTEを送る |
executesstpx |
本体にSSTPのEXECUTEを送る(追加データをエントリに格納) |
コミュニケート機能¶
| コマンド | 説明 |
|---|---|
communicate |
あるエントリの全ての単語を評価し、値から一つをランダムで選ぶ |
matchall |
全てのキーワードに対してマッチング |
出力¶
| コマンド | 説明 |
|---|---|
echo |
引数を空白文字で接続して返す |
encode_entryname |
エントリ名に使用できる名前に変換 |
escape |
引数内のさくらスクリプトをエスケープする |
補助機能¶
| コマンド | 説明 |
|---|---|
entry |
エントリを呼び出す |
entrycount |
エントリ総数を返す |
eval |
単語を再評価 |
urllist |
SHIORI/2.5形式のおすすめリストを出力する |
wordcount |
単語総数を返す |
xargs |
引数を展開して実行する |
その他¶
| コマンド | 説明 |
|---|---|
rccharset |
メッセージ文字セット設定 |
date |
日時を指定フォーマットで返す |
mktime |
日時を通算経過秒数に変換する |
getenv |
環境変数の内容を返す |
help |
KISコマンドオンラインヘルプ |
logfile |
ログファイルを指定する |
loglevel |
ログに取る種類を決める |
logprint |
ログに出力する |
debugger |
幸水デバッガのON/OFF |
rand |
ランダムな整数を返す |
srand |
乱数の種を設定する |
securitylevel |
セキュリティレベルの指定 |
ver |
バージョン番号取得 |