コンテンツにスキップ

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 バージョン番号取得