ukagaka-doc-mcp 0.6.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/data/index.json +98 -45
  2. package/package.json +1 -1
package/data/index.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 1,
3
- "generatedAt": "2026-09-28T01:00:16.448Z",
3
+ "generatedAt": "2026-09-28T09:47:49.815Z",
4
4
  "entries": [
5
5
  {
6
6
  "id": "ukadoc:descript_balloon:charset_2c_6587_5b57_30b3_30fc_30c9:1",
@@ -8220,12 +8220,20 @@
8220
8220
  },
8221
8221
  {
8222
8222
  "id": "ukadoc:list_sakura_script:_5c_21_5bexecute_2cdumpsurface_2c_30c7_30a3_30ec_30af_30c8_30ea_2c_30b9_30b3_30fc_30d7ID_2c_30b5_30fc_30d5_30a7_30b9_30e:1",
8223
- "title": "\\![execute,dumpsurface,ディレクトリ,スコープID,サーフェスリスト,prefix,イベントID,ゼロ位置切り出し]",
8223
+ "title": "\\![execute,dumpsurface,ディレクトリ,スコープID,サーフェスリスト,prefix,イベントID,ゼロ位置切り出し,アニメーションID]",
8224
8224
  "source": "ukadoc",
8225
8225
  "category": "sakurascript",
8226
- "content": "\\![execute,dumpsurface,ディレクトリ,スコープID,サーフェスリスト,prefix,イベントID,ゼロ位置切り出し]\n合成済みのサーフェス画像を指定したディレクトリに出力する。\n\t\t\t\t\tイベントIDを指定しない場合は、処理が完了するまでスクリプトの実行は停止する。\n\t\t\t\t\tスコープID : \\sタグに指定するものと同じIDを指定する。この指定で、着せ替え状態などのスコープに依存する処理が変わる。\n\t\t\t\t\tサーフェスリスト : surface ID指定と同じ書式、または以下を指定する。\n\t\t\t\t\t__system_surface_all__ : シェルとして有効なサーフェスをすべて出力する\n\t\t\t\t\t__system_surface_defined__ : surfaces.txt内で定義されたサーフェスのみすべて出力する\n\t\t\t\t\t参考 SakuraScriptの大かっこパラメータ内でカンマを指定したい場合は \" \" で囲むと良い。\n\t\t\t\t\tprefix : (省略可) 出力したいファイルの頭につける文字列。省略した場合はsurface。\n\t\t\t\t\tイベントID : (省略可) これを指定するとSakuraScriptの続きを実行しながら出力を続け、終わり次第指定したイベントを発生させる。Reference0には出力に成功したファイル数が入る。\n\t\t\t\t\tゼロ位置切り出し : 1を指定すると、アニメーション定義に関わらず必ず0,0からダンプし、負の座標部分を無視する。\n\t\t\t\t\tセキュリティ上の観点から、出力先は、SSP管理下のフォルダ(ghostフォルダ、balloonフォルダなど「フォルダ」設定で指定した場所)以下への展開に制限される。\n\t\t\t\t\tまた、この制限は適宜強化される可能性があるため、ゴースト自身のデータが置かれているフォルダ以下に限定するのが無難。\n\t\t\t\t\t\n\t\t\t\t\t\t [2.5.98]",
8226
+ "content": "\\![execute,dumpsurface,ディレクトリ,スコープID,サーフェスリスト,prefix,イベントID,ゼロ位置切り出し,アニメーションID]\n合成済みのサーフェス画像を指定したディレクトリに出力する。\n\t\t\t\t\tイベントIDを指定しない場合は、処理が完了するまでスクリプトの実行は停止する。\n\t\t\t\t\tスコープID : \\sタグに指定するものと同じIDを指定する。この指定で、着せ替え状態などのスコープに依存する処理が変わる。\n\t\t\t\t\tサーフェスリスト : surface ID指定と同じ書式、または以下を指定する。\n\t\t\t\t\t__system_surface_all__ : シェルとして有効なサーフェスをすべて出力する\n\t\t\t\t\t__system_surface_defined__ : surfaces.txt内で定義されたサーフェスのみすべて出力する\n\t\t\t\t\t参考 SakuraScriptの大かっこパラメータ内でカンマを指定したい場合は \" \" で囲むと良い。\n\t\t\t\t\tprefix : (省略可) 出力したいファイルの頭につける文字列。省略した場合はsurface。\n\t\t\t\t\tイベントID : (省略可) これを指定するとSakuraScriptの続きを実行しながら出力を続け、終わり次第指定したイベントを発生させる。Reference0には出力に成功したファイル数が入る。\n\t\t\t\t\tゼロ位置切り出し : 1を指定すると、アニメーション定義に関わらず必ず0,0からダンプし、負の座標部分を無視する。\n\t\t\t\t\tアニメーションID : (省略可) 指定すると、各サーフェスの通常の画像(prefix+サーフェス番号.png)に続けて、そのアニメーションを\\i[ID]と同様に再生し、パターンが進むたびの画像を prefix+サーフェス番号_0000.png から0始まり4桁の連番で出力する。指定できるIDは1つだけ。詳細は起動オプション --dump-animation と同じ。イベントのReference0には連番の画像も含めたファイル数が入る。[2.9.05]\n\t\t\t\t\tセキュリティ上の観点から、出力先は、SSP管理下のフォルダ(ghostフォルダ、balloonフォルダなど「フォルダ」設定で指定した場所)以下への展開に制限される。\n\t\t\t\t\tまた、この制限は適宜強化される可能性があるため、ゴースト自身のデータが置かれているフォルダ以下に限定するのが無難。\n\t\t\t\t\t出力先が制限範囲外の場合は何も出力せず、エラーログに記録される。\n\t\t\t\t\t\n\t\t\t\t\t\t [2.5.98]",
8227
8227
  "url": "https://ssp.shillest.net/ukadoc/manual/list_sakura_script.html#_5c_21_5bexecute_2cdumpsurface_2c_30c7_30a3_30ec_30af_30c8_30ea_2c_30b9_30b3_30fc_30d7ID_2c_30b5_30fc_30d5_30a7_30b9_30e:1"
8228
8228
  },
8229
+ {
8230
+ "id": "ukadoc:list_sakura_script:_5c_21_5bexecute_2cdumpballoon_2c_30c7_30a3_30ec_30af_30c8_30ea_2c_30b9_30b3_30fc_30d7ID_2cprefix_2c_30a4_30d9_30f3_30c8:1",
8231
+ "title": "\\![execute,dumpballoon,ディレクトリ,スコープID,prefix,イベントID]",
8232
+ "source": "ukadoc",
8233
+ "category": "sakurascript",
8234
+ "content": "\\![execute,dumpballoon,ディレクトリ,スコープID,prefix,イベントID]\n指定したスコープのバルーンの、現在の描画内容を画像として指定したディレクトリに出力する。\n\t\t\t\t\tサーフェスと異なり状態を指定して描き直すことはできず、その時点でバルーンに描かれている内容がそのまま出力される。拡大縮小や半透明(フェード含む)は適用前の等倍の画像になる。\n\t\t\t\t\tバルーンが非表示でも、描画内容が残っていれば出力される。\n\t\t\t\t\t出力ファイル名は prefix+スコープID+.png となる(例 : balloon0.png)。\n\t\t\t\t\tスコープID : \\sタグに指定するものと同じIDを指定する。\n\t\t\t\t\tprefix : (省略可) 出力したいファイルの頭につける文字列。省略した場合はballoon。\n\t\t\t\t\tイベントID : (省略可) 出力が終わり次第指定したイベントを発生させる。Reference0には出力に成功したファイル数(0または1)が入る。\n\t\t\t\t\t出力先の制限は\\![execute,dumpsurface]と同じ。制限範囲外の場合は何も出力せず、エラーログに記録される。\n\t\t\t\t\t\n\t\t\t\t\t\t 2.9.02",
8235
+ "url": "https://ssp.shillest.net/ukadoc/manual/list_sakura_script.html#_5c_21_5bexecute_2cdumpballoon_2c_30c7_30a3_30ec_30af_30c8_30ea_2c_30b9_30b3_30fc_30d7ID_2cprefix_2c_30a4_30d9_30f3_30c8:1"
8236
+ },
8229
8237
  {
8230
8238
  "id": "ukadoc:list_sakura_script:_5c_21_5bexecute_2cinstall_2cpath_2c_30d5_30a1_30a4_30eb_540d_5d:1",
8231
8239
  "title": "\\![execute,install,path,ファイル名]",
@@ -12783,7 +12791,7 @@
12783
12791
  "title": "vanishbuttonvisible",
12784
12792
  "source": "ukadoc",
12785
12793
  "category": "shiori_event",
12786
- "content": "vanishbuttonvisible\n消滅通告の表示。1で表示、0で非表示。",
12794
+ "content": "vanishbuttonvisible\n消滅通告の表示。1で表示、0で非表示。応答がない場合は表示。",
12787
12795
  "url": "https://ssp.shillest.net/ukadoc/manual/list_shiori_resource.html#vanishbuttonvisible:1"
12788
12796
  },
12789
12797
  {
@@ -12791,7 +12799,7 @@
12791
12799
  "title": "sakura.popupmenu.visible",
12792
12800
  "source": "ukadoc",
12793
12801
  "category": "shiori_event",
12794
- "content": "sakura.popupmenu.visible\n本体側のオーナードローメニューの表示。1で表示、0で非表示。",
12802
+ "content": "sakura.popupmenu.visible\n本体側のオーナードローメニューの表示。1で表示、0で非表示。応答がない場合は表示。",
12795
12803
  "url": "https://ssp.shillest.net/ukadoc/manual/list_shiori_resource.html#sakura.popupmenu.visible:1"
12796
12804
  },
12797
12805
  {
@@ -12799,7 +12807,7 @@
12799
12807
  "title": "kero.popupmenu.visible",
12800
12808
  "source": "ukadoc",
12801
12809
  "category": "shiori_event",
12802
- "content": "kero.popupmenu.visible\n相方側のオーナードローメニューの表示。1で表示、0で非表示。",
12810
+ "content": "kero.popupmenu.visible\n相方側のオーナードローメニューの表示。1で表示、0で非表示。応答がない場合は表示。",
12803
12811
  "url": "https://ssp.shillest.net/ukadoc/manual/list_shiori_resource.html#kero.popupmenu.visible:1"
12804
12812
  },
12805
12813
  {
@@ -12807,7 +12815,7 @@
12807
12815
  "title": "char*.popupmenu.visible",
12808
12816
  "source": "ukadoc",
12809
12817
  "category": "shiori_event",
12810
- "content": "char*.popupmenu.visible\n\\p[*]のオーナードローメニューの表示。1で表示、0で非表示。",
12818
+ "content": "char*.popupmenu.visible\n\\p[*]のオーナードローメニューの表示。1で表示、0で非表示。応答がない場合は表示。",
12811
12819
  "url": "https://ssp.shillest.net/ukadoc/manual/list_shiori_resource.html#char_2a.popupmenu.visible:1"
12812
12820
  },
12813
12821
  {
@@ -14487,7 +14495,7 @@
14487
14495
  "title": "CHARSETLIB",
14488
14496
  "source": "yaya_docs",
14489
14497
  "category": "yaya_function",
14490
- "content": "CHARSETLIB\n\nCategory: 外部ライブラリ\n\nSignature\n\nCHARSETLIB(code)\nCHARSETLIB()\nCHARSETLIB\n\nParameters\n\n| Parameter | Description |\n|-----------|-------------|\n| code | (省略可)文字コードIDまたは文字コードを表すテキストで文字エンコーディングを指定する |\n\nReturns\n\n引数なしの場合:現在のDLL文字コード設定を文字列で返す\n引数ありの場合:VOID(何も返さない)\n\n外部ライブラリとのやり取りに使用する文字コードを設定する。LOADLIBの前に呼び出す必要がある。デフォルトのエンコーディングは設定ファイルの charset.extension エントリ(未指定の場合は charset)から取得される。\n\nCHARSETLIBはすべての外部ライブラリにグローバルに適用されるが、CHARSETLIBEXはライブラリごとの設定が可能。\n\nCompatibility\n\n- YAYA: 初版から利用可能。引数省略はTc531以降でサポート\n- AYA: バージョン5.8以降\n\nSee Also\n\n- CHARSETLIBEX\n- CHARSETIDTOTEXT",
14498
+ "content": "CHARSETLIB\n\nCategory: 外部ライブラリ\n\nSignature\n\nCHARSETLIB(code)\nCHARSETLIB()\nCHARSETLIB\n\nParameters\n\n| Parameter | Description |\n|-----------|-------------|\n| code | (省略可)文字コードIDまたは文字コードを表すテキストで文字エンコーディングを指定する(文字コードの名前)。知らない名前なら警告 W0012 を出し、設定を変えない |\n\nReturns\n\n引数なしの場合:現在のDLL文字コード設定を文字列で返す\n引数ありの場合:VOID(何も返さない)\n\n外部ライブラリとのやり取りに使用する文字コードを設定する。LOADLIBの前に呼び出す必要がある。デフォルトのエンコーディングは設定ファイルの charset.extension エントリ(未指定の場合は charset)から取得される。\n\nCHARSETLIBはすべての外部ライブラリにグローバルに適用されるが、CHARSETLIBEXはライブラリごとの設定が可能。\n\nCompatibility\n\n- YAYA: 初版から利用可能。引数省略はTc531以降でサポート\n- AYA: バージョン5.8以降\n- Tc574-8 / Tc603-1: 知らない文字コードの名前を渡すと、警告 W0012 を出して設定を変えないようにした(それまでは警告を出さずに OS デフォルトとして扱っていた)\n\nSee Also\n\n- CHARSETLIBEX\n- CHARSETIDTOTEXT",
14491
14499
  "url": "https://yaya-shiori.github.io/yaya-docs/functions/CHARSETLIB/",
14492
14500
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/functions/CHARSETLIB.md"
14493
14501
  },
@@ -14496,7 +14504,7 @@
14496
14504
  "title": "CHARSETLIBEX",
14497
14505
  "source": "yaya_docs",
14498
14506
  "category": "yaya_function",
14499
- "content": "CHARSETLIBEX\n\nCategory: 外部ライブラリ\n\nSignature\n\nCHARSETLIBEX(path, code)\nCHARSETLIBEX(path)\n\nParameters\n\n| Parameter | Description |\n|-----------|-------------|\n| path | DLLファイルの場所。YAYAのディレクトリからの相対パス、または絶対パスで指定する |\n| code | (省略可)文字コードIDまたは文字コードを表すテキスト識別子 |\n\nReturns\n\ncodeを省略した場合:指定したDLLの現在の文字コード設定を文字列で返す\ncodeを指定した場合:VOID(何も返さない)\n\n外部ライブラリとのやり取りに使用する文字コードを個別に指定する。Tc530-2以降、LOADLIBの前に呼び出すことで有効になり、「初期化中」に設定可能。デフォルトのエンコーディングは設定ファイルの charset.extension エントリ(未指定の場合は charset)から取得される。\n\nCompatibility\n\n- YAYA: 初版から利用可能。引数省略機能はTc531以降\n\nSee Also\n\n- CHARSETLIB\n- CHARSETTEXTTOID",
14507
+ "content": "CHARSETLIBEX\n\nCategory: 外部ライブラリ\n\nSignature\n\nCHARSETLIBEX(path, code)\nCHARSETLIBEX(path)\n\nParameters\n\n| Parameter | Description |\n|-----------|-------------|\n| path | DLLファイルの場所。YAYAのディレクトリからの相対パス、または絶対パスで指定する |\n| code | (省略可)文字コードIDまたは文字コードを表すテキスト識別子(文字コードの名前)。知らない名前なら警告 W0012 を出し、設定を変えない |\n\nReturns\n\ncodeを省略した場合:指定したDLLの現在の文字コード設定を文字列で返す\ncodeを指定した場合:VOID(何も返さない)\n\n外部ライブラリとのやり取りに使用する文字コードを個別に指定する。Tc530-2以降、LOADLIBの前に呼び出すことで有効になり、「初期化中」に設定可能。デフォルトのエンコーディングは設定ファイルの charset.extension エントリ(未指定の場合は charset)から取得される。\n\nCompatibility\n\n- YAYA: 初版から利用可能。引数省略機能はTc531以降\n- Tc574-8 / Tc603-1: 知らない文字コードの名前を渡すと、警告 W0012 を出して設定を変えないようにした(それまでは警告を出さずに OS デフォルトとして扱っていた)\n\nSee Also\n\n- CHARSETLIB\n- CHARSETTEXTTOID",
14500
14508
  "url": "https://yaya-shiori.github.io/yaya-docs/functions/CHARSETLIBEX/",
14501
14509
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/functions/CHARSETLIBEX.md"
14502
14510
  },
@@ -14505,7 +14513,7 @@
14505
14513
  "title": "CHARSETTEXTTOID",
14506
14514
  "source": "yaya_docs",
14507
14515
  "category": "yaya_function",
14508
- "content": "CHARSETTEXTTOID\n\nCategory: メタ操作・特殊関数\n\nSignature\n\nCHARSETTEXTTOID(string)\n\nParameters\n\n| Parameter | Description |\n|-----------|-------------|\n| string | 文字コードを表す文字列 |\n\nReturns\n\n成功時:文字コードIDを表す整数\n失敗時:127(OSデフォルトエンコーディングを表す)\n\n文字コードを表す文字列を文字コードIDに変換する。\n\nExample\n\nCHARSETTEXTTOID('Shift_JIS') // 0 を返す\nCHARSETTEXTTOID('UTF-8') // 1 を返す\nCHARSETTEXTTOID('UTF8') // 1 を返す\n\nCompatibility\n\n- YAYA: 初版から利用可能\n\nSee Also\n\n- CHARSETIDTOTEXT",
14516
+ "content": "CHARSETTEXTTOID\n\nCategory: メタ操作・特殊関数\n\nSignature\n\nCHARSETTEXTTOID(string)\n\nParameters\n\n| Parameter | Description |\n|-----------|-------------|\n| string | 文字コードを表す文字列 |\n\nReturns\n\n成功時:文字コードIDを表す整数\n失敗時:-1(警告 W0012、GETLASTERROR は 12)\n\n文字コードを表す文字列を文字コードIDに変換する。使える名前は 文字コードの名前 を参照。大文字小文字は区別しない。空文字列は 127(OSデフォルト)になる。\n\nExample\n\nCHARSETTEXTTOID('Shift_JIS') // 0 を返す\nCHARSETTEXTTOID('UTF-8') // 1 を返す\nCHARSETTEXTTOID('UTF8') // 1 を返す\nCHARSETTEXTTOID('UTF-16') // -1 を返す(W0012)\n\nCompatibility\n\n- YAYA: 初版から利用可能\n- Tc574-8 / Tc603-1: 知らない名前のときに、127 ではなく -1 を返して警告 W0012 を出すようにした\n\nSee Also\n\n- CHARSETIDTOTEXT",
14509
14517
  "url": "https://yaya-shiori.github.io/yaya-docs/functions/CHARSETTEXTTOID/",
14510
14518
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/functions/CHARSETTEXTTOID.md"
14511
14519
  },
@@ -14613,7 +14621,7 @@
14613
14621
  "title": "DICLOAD",
14614
14622
  "source": "yaya_docs",
14615
14623
  "category": "yaya_function",
14616
- "content": "DICLOAD\n\nCategory: メタ操作・特殊関数\n\nSignature\n\nDICLOAD( filename [, code] )\n\nParameters\n\n| Parameter | Description |\n|-----------|-------------|\n| filename | 読み込む辞書ファイル名 |\n| code | 文字コードID(省略時は基本設定ファイルの設定に従う) |\n\nReturns\n\n- 0: 成功\n- 1: 失敗\n\nDescription\n\n指定した辞書ファイルを動的に読み込みます。\n\n注意事項:\n\n- 辞書に問題がある場合はエラーとなり、何も変更されません。\n- 読み込んだ辞書は次のリクエスト呼び出しまで有効にならず、現在実行中の関数は保護されます。\n- 文字列埋め込み要素のスコープ展開構文は DICLOAD 後には機能しません。読み込んだ辞書の内容をすぐに認識できる EVAL の使用を検討してください。\n- 読み込んだ辞書は DICUNLOAD で解除できますが、制限があります。\n\nCompatibility\n\n- YAYA: Tc556-1以降\n\nSee Also\n\n- DICUNLOAD\n- EVAL",
14624
+ "content": "DICLOAD\n\nCategory: メタ操作・特殊関数\n\nSignature\n\nDICLOAD( filename [, code] )\n\nParameters\n\n| Parameter | Description |\n|-----------|-------------|\n| filename | 読み込む辞書ファイル名 |\n| code | 文字コードID、または文字コードの名前(文字コードの名前)。省略時、空文字列、default のときは基本設定ファイルの設定に従う。知らない名前なら警告 W0012 を出して何も読み込まずに 1 を返す |\n\nReturns\n\n- 0: 成功\n- 1: 失敗\n\nDescription\n\n指定した辞書ファイルを動的に読み込みます。\n\n注意事項:\n\n- 辞書に問題がある場合はエラーとなり、何も変更されません。\n- 読み込んだ辞書は次のリクエスト呼び出しまで有効にならず、現在実行中の関数は保護されます。\n- 文字列埋め込み要素のスコープ展開構文は DICLOAD 後には機能しません。読み込んだ辞書の内容をすぐに認識できる EVAL の使用を検討してください。\n- 読み込んだ辞書は DICUNLOAD で解除できますが、制限があります。\n\nCompatibility\n\n- YAYA: Tc556-1以降\n- Tc574-8 / Tc603-1: 文字コードIDを数値で渡したときに無視されていたのを修正。知らない文字コードの名前を渡すと、警告 W0012 を出して失敗するようにした(それまでは基本設定ファイルの設定で読み込んでいた)\n\nSee Also\n\n- DICUNLOAD\n- EVAL",
14617
14625
  "url": "https://yaya-shiori.github.io/yaya-docs/functions/DICLOAD/",
14618
14626
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/functions/DICLOAD.md"
14619
14627
  },
@@ -14631,7 +14639,7 @@
14631
14639
  "title": "DIRECTSSTP",
14632
14640
  "source": "yaya_docs",
14633
14641
  "category": "yaya_function",
14634
- "content": "DIRECTSSTP\n\nCategory: 通信・プロセス間通信\n\nSignature\n\nDIRECTSSTP( hwnd , request [ , charset ] )\n\nParameters\n\n| Parameter | Description |\n|-----------|-------------|\n| hwnd | DirectSSTPの送信先ウィンドウハンドルを整数値で指定。 |\n| request | 送信するDirectSSTPリクエスト文字列。 |\n| charset | 文字コード。IDまたはテキスト形式で指定。省略時はUTF-8。 |\n\nReturns\n\n- 成功時: DirectSSTPのレスポンス文字列\n- 失敗時: -1\n\nDescription\n\n指定したhwndにDirectSSTPを送信し、結果を返します。\n\n送信先が応答を返さなかった場合(送信先がSSTPの応答を返さないウインドウだった場合など)は、空文字列を返します。\n\nエラー\n| 状況 | 警告 | GETLASTERROR | 返り値 |\n|------|------|------|------|\n| 引数が足りない | W0008 | 8 | -1 |\n| hwnd が整数でない(数字の文字列も不可。TOINT で変換して渡す) | W0009 | 9 | -1 |\n| hwnd が 0、もしくは存在しないウインドウ | W0012 | 12 | -1 |\n| 送信に失敗した、もしくは送信先が5秒以内に応答しなかった | W0013 | 13 | -1 |\n\nCompatibility\n\n- YAYA: Tc572-1以降\n- Tc574-3 / Tc602-4: 送信先からの応答を受け取れず、SSPに送っても約3秒待ったうえで空文字列を返していたのを修正。存在しないウインドウと送信の失敗を警告と -1 で返すようにした",
14642
+ "content": "DIRECTSSTP\n\nCategory: 通信・プロセス間通信\n\nSignature\n\nDIRECTSSTP( hwnd , request [ , charset ] )\n\nParameters\n\n| Parameter | Description |\n|-----------|-------------|\n| hwnd | DirectSSTPの送信先ウィンドウハンドルを整数値で指定。 |\n| request | 送信するDirectSSTPリクエスト文字列。 |\n| charset | 文字コード。IDまたはテキスト形式で指定(文字コードの名前)。省略時はUTF-8。 |\n\nReturns\n\n- 成功時: DirectSSTPのレスポンス文字列\n- 失敗時: -1\n\nDescription\n\n指定したhwndにDirectSSTPを送信し、結果を返します。\n\n送信先が応答を返さなかった場合(送信先がSSTPの応答を返さないウインドウだった場合など)は、空文字列を返します。\n\nエラー\n| 状況 | 警告 | GETLASTERROR | 返り値 |\n|------|------|------|------|\n| 引数が足りない | W0008 | 8 | -1 |\n| hwnd が整数でない(数字の文字列も不可。TOINT で変換して渡す) | W0009 | 9 | -1 |\n| hwnd が 0、もしくは存在しないウインドウ | W0012 | 12 | -1 |\n| charset が知らない名前や不正なID | W0012 | 12 | -1 |\n| 送信に失敗した、もしくは送信先が5秒以内に応答しなかった | W0013 | 13 | -1 |\n\nCompatibility\n\n- YAYA: Tc572-1以降\n- Tc574-3 / Tc602-4: 送信先からの応答を受け取れず、SSPに送っても約3秒待ったうえで空文字列を返していたのを修正。存在しないウインドウと送信の失敗を警告と -1 で返すようにした\n- Tc574-8 / Tc603-1: 知らない文字コードの名前や不正なIDを渡すと、送信せずに警告 W0012 と -1 を返すようにした(それまでは UTF-8 や OS デフォルトで送っていた)",
14635
14643
  "url": "https://yaya-shiori.github.io/yaya-docs/functions/DIRECTSSTP/",
14636
14644
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/functions/DIRECTSSTP.md"
14637
14645
  },
@@ -14703,7 +14711,7 @@
14703
14711
  "title": "EVAL",
14704
14712
  "source": "yaya_docs",
14705
14713
  "category": "yaya_function",
14706
- "content": "EVAL\n\nCategory: メタ操作・特殊関数\n\nSignature\n\nEVAL( string )\n\nParameters\n\n| Parameter | Description |\n|-----------|-------------|\n| string | YAYA スクリプトとして実行するテキスト文字列。式ひとつか、文の並び(Tc574-6 / Tc602-9以降) |\n\nReturns\n\n- 成功時: 実行した結果。代入だけで出力がないときは VOID(返り値なし)\n- 解析に失敗したとき: 引数の文字列をそのまま返す\n\nDescription\n\n引数の文字列を YAYA スクリプトとして実行します。式の展開や実行時の関数名合成などに使えます。\n\n式ひとつ\n\n文字列が式ひとつなら、その式を評価した値を返します。代入の式は呼び出し元の変数に代入されます。\n\n_x = EVAL('1 + 2') // 3\nEVAL('_name = \"Emily\"') // 呼び出し元のローカル変数 _name に代入される\n\n文の並び(Tc574-6 / Tc602-9以降)\n\nクォートの外に ;、{、}、改行のどれかがあるか、先頭の語が return if while for foreach switch void parallel のどれかであれば、文の並びとして実行します。関数の本体の { } の中に書くのと同じように書けます。\n\n_r = EVAL('_a = 1; _b = _a + 2; _b') // 3\n\n_r = EVAL('if _hour < 12 { \"おはよう\" } else { \"こんにちは\" }')\n\n_r = EVAL('_s = 0; foreach _list; _v { _s += _v }; _s')\n\nヒアドキュメントなどで改行を含む文字列を渡せば、辞書に書くのと同じ形で書けます。改行は ; と同じく文の区切りになり、// や /* */ のコメント、行末の / による行の結合も使えます。\n\n_code = <<'\n_s = 0\nfor _i = 1; _i <= 10; _i++ {\n\t_s += _i\n}\n_s\n'>>\n_r = EVAL(_code) // 55\n\n返り値は関数の返り値と同じ規則で決まります。出力になる式が複数あればその中から選ばれ、-- で出力を連結でき、return を書けばそこで実行を終えてその値を返します。\n\n文の並びは、呼び出し元の { } の中にブロックをひとつ書いたのと同じように実行されます。\n\n- 呼び出し元のローカル変数(_argv や _argc を含む)は読み書きできる\n- 中で新しく作ったローカル変数は、EVAL が終わると消える\n- break / continue / return は EVAL の中で完結し、呼び出し元のループや関数には影響しない\n\nFoo\n{\n\t_count = 1\n\t_r = EVAL('_count += 10; _tmp = _count * 2; _tmp')\n\t// _r は 22、_count は 11、_tmp はここでは存在しない\n}\n\n関数の定義や #define などのプリプロセッサは書けません。関数を定義したいときは APPEND_RUNTIME_DIC を使います。\n\nクォートの中の ; { } や改行は区切りとして扱いません。EVAL('\"a;b\"') や、改行を含む文字列を \" で囲んで埋め込み要素を展開する使い方は、これまでどおり式ひとつとして評価されます。\n\nExample\n\nEVAL(\"i=1\")\n\nEVAL(\"i=%(CHR(34))test%(CHR(34))\")\n\nEVAL(\"%(CHR(34))%(CHR(37))(foo)%(CHR(34))\")\n\nEVAL('_n = 0; while _n < 3 { _n++ }; _n') // 3\n\nCompatibility\n\n- YAYA: 初版より対応\n- AYA: 5.8以降\n- Tc574-6 / Tc602-9: 文の並び(; や改行で区切った複数の文や、if/for などの制御文)を実行できるようにした(それまでは式ひとつだけで、文の並びを渡すと解析に失敗して引数の文字列がそのまま返っていた)\n\nSee Also\n\n- ISEVALUABLE\n- APPEND_RUNTIME_DIC",
14714
+ "content": "EVAL\n\nCategory: メタ操作・特殊関数\n\nSignature\n\nEVAL( string )\n\nParameters\n\n| Parameter | Description |\n|-----------|-------------|\n| string | YAYA スクリプトとして実行するテキスト文字列。式ひとつか、文の並び(Tc574-6 / Tc602-9以降) |\n\nReturns\n\n- 成功時: 実行した結果。代入だけで出力がないときは VOID(返り値なし)\n- 解析に失敗したとき: 引数の文字列をそのまま返す\n\nDescription\n\n引数の文字列を YAYA スクリプトとして実行します。式の展開や実行時の関数名合成などに使えます。\n\n式ひとつ\n\n文字列が式ひとつなら、その式を評価した値を返します。代入の式は呼び出し元の変数に代入されます。\n\n_x = EVAL('1 + 2') // 3\nEVAL('_name = \"Emily\"') // 呼び出し元のローカル変数 _name に代入される\n\n文の並び(Tc574-6 / Tc602-9以降)\n\nクォートの外に ;、{、}、改行のどれかがあるか、先頭の語が return if while for foreach switch void parallel のどれかであれば、文の並びとして実行します。関数の本体の { } の中に書くのと同じように書けます。\n\n_r = EVAL('_a = 1; _b = _a + 2; _b') // 3\n\n_r = EVAL('if _hour < 12 { \"おはよう\" } else { \"こんにちは\" }')\n\n_r = EVAL('_s = 0; foreach _list; _v { _s += _v }; _s')\n\nヒアドキュメントなどで改行を含む文字列を渡せば、辞書に書くのと同じ形で書けます。改行は ; と同じく文の区切りになり、// や /* */ のコメント、行末の / による行の結合も使えます。\n\n_code = <<'\n_s = 0\nfor _i = 1; _i <= 10; _i++ {\n\t_s += _i\n}\n_s\n'>>\n_r = EVAL(_code) // 55\n\nTc574-8 / Tc603-1以降では、渡すコードの中にもヒアドキュメントを書けます。\n\n返り値は関数の返り値と同じ規則で決まります。出力になる式が複数あればその中から選ばれ、-- で出力を連結でき、return を書けばそこで実行を終えてその値を返します。\n\n文の並びは、呼び出し元の { } の中にブロックをひとつ書いたのと同じように実行されます。\n\n- 呼び出し元のローカル変数(_argv や _argc を含む)は読み書きできる\n- 中で新しく作ったローカル変数は、EVAL が終わると消える\n- break / continue / return は EVAL の中で完結し、呼び出し元のループや関数には影響しない\n\nFoo\n{\n\t_count = 1\n\t_r = EVAL('_count += 10; _tmp = _count * 2; _tmp')\n\t// _r は 22、_count は 11、_tmp はここでは存在しない\n}\n\n関数の定義や #define などのプリプロセッサは書けません。関数を定義したいときは APPEND_RUNTIME_DIC を使います。\n\nクォートの中の ; { } や改行は区切りとして扱いません。EVAL('\"a;b\"') や、改行を含む文字列を \" で囲んで埋め込み要素を展開する使い方は、これまでどおり式ひとつとして評価されます。\n\nExample\n\nEVAL(\"i=1\")\n\nEVAL(\"i=%(CHR(34))test%(CHR(34))\")\n\nEVAL(\"%(CHR(34))%(CHR(37))(foo)%(CHR(34))\")\n\nEVAL('_n = 0; while _n < 3 { _n++ }; _n') // 3\n\nCompatibility\n\n- YAYA: 初版より対応\n- AYA: 5.8以降\n- Tc574-6 / Tc602-9: 文の並び(; や改行で区切った複数の文や、if/for などの制御文)を実行できるようにした(それまでは式ひとつだけで、文の並びを渡すと解析に失敗して引数の文字列がそのまま返っていた)\n- Tc574-8 / Tc603-1: 渡すコードの中のヒアドキュメントを使えるようにした(それまではE0007になっていた)\n\nSee Also\n\n- ISEVALUABLE\n- APPEND_RUNTIME_DIC\n- シェルモード(辞書が無いとき、requestの入力を EVAL して返す)",
14707
14715
  "url": "https://yaya-shiori.github.io/yaya-docs/functions/EVAL/",
14708
14716
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/functions/EVAL.md"
14709
14717
  },
@@ -14739,7 +14747,7 @@
14739
14747
  "title": "FCHARSET",
14740
14748
  "source": "yaya_docs",
14741
14749
  "category": "yaya_function",
14742
- "content": "FCHARSET\n\nCategory: ファイル操作\n\nSignature\n\nFCHARSET( code )\n\nParameters\n\n| Parameter | Description |\n|-----------|-------------|\n| code | 設定する文字コードID |\n\nReturns\n\n返り値はありません(VOID)。\n\nDescription\n\nファイルの読み書きに使用する文字コードを指定します。FOPEN の前に呼び出す必要があります。ファイルごとに文字コードを変更でき、文字コードは FOPEN が呼ばれた時点で決定されます。設定はゴーストの現在のセッション中は維持されますが、終了後にリセットされます。FCHARSET を呼ばない場合のデフォルト文字コードは、基本設定ファイルの charset.file または charset の設定に従います。\n\nCompatibility\n\n- YAYA: 初版より対応\n- AYA: 5.8以降\n\nSee Also\n\n- FOPEN\n- FCLOSE\n- FATTRIB",
14750
+ "content": "FCHARSET\n\nCategory: ファイル操作\n\nSignature\n\nFCHARSET( code )\n\nParameters\n\n| Parameter | Description |\n|-----------|-------------|\n| code | 設定する文字コードID、または文字コードの名前(文字コードの名前)。知らない名前なら警告 W0012 を出し、設定を変えない |\n\nReturns\n\n返り値はありません(VOID)。\n\nDescription\n\nファイルの読み書きに使用する文字コードを指定します。FOPEN の前に呼び出す必要があります。ファイルごとに文字コードを変更でき、文字コードは FOPEN が呼ばれた時点で決定されます。設定はゴーストの現在のセッション中は維持されますが、終了後にリセットされます。FCHARSET を呼ばない場合のデフォルト文字コードは、基本設定ファイルの charset.file または charset の設定に従います。\n\nCompatibility\n\n- YAYA: 初版より対応\n- AYA: 5.8以降\n- Tc574-8 / Tc603-1: 知らない文字コードの名前を渡すと、警告 W0012 を出して設定を変えないようにした(それまでは警告を出さずに OS デフォルトとして扱っていた)\n\nSee Also\n\n- FOPEN\n- FCLOSE\n- FATTRIB",
14743
14751
  "url": "https://yaya-shiori.github.io/yaya-docs/functions/FCHARSET/",
14744
14752
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/functions/FCHARSET.md"
14745
14753
  },
@@ -14847,7 +14855,7 @@
14847
14855
  "title": "FREADJSON",
14848
14856
  "source": "yaya_docs",
14849
14857
  "category": "yaya_function",
14850
- "content": "FREADJSON\nCategory: ファイル操作\n\nSignature\nFREADJSON( path [, charset] )\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| path | 読み込む JSON ファイルのパス(yaya.dll からの相対パス、または絶対パス) |\n| charset | ファイルの文字コード(省略可)。文字列(\"UTF-8\" \"Shift_JIS\" など)または数値で指定する。省略時は UTF-8 |\n\nReturns\n- 成功時: JSON を変換した値(下記の 値の対応)\n- 失敗時: 空(VOID)\n\nDescription\nJSON ファイルを丸ごと読み込んで解析し、ハッシュ・配列などの値にして返す。FOPEN で開いておく必要はない。\n\nJSON の解析には parson を使っている。\n\n- 先頭の UTF-8 の BOM は無視する\n- /* */ と // のコメントを書ける(JSON の規格外だが、設定ファイルなどで使えるよう許している)\n- 最上位はオブジェクトや配列でなくてもよい(123 や \"abc\" だけのファイルも読める)\n\n値の対応\n\n| JSON | YAYA |\n|------|------|\n| オブジェクト | ハッシュ |\n| 配列 | 汎用配列(要素に配列やハッシュを含む入れ子になる) |\n| 文字列 | 文字列 |\n| 数値(整数の値) | 整数 |\n| 数値(それ以外) | 実数 |\n| true / false | 整数 1 / 0 |\n| null | 空(VOID) |\n\n- 数値は内部で実数として解析するため、1.0 のように小数点があっても値が整数なら整数になる。また、2^53 を超える整数は誤差を含むことがある。整数の範囲(-2^63 以上 2^63 未満)を超える値は実数になる\n- オブジェクトのキーの並びは保たれない。ハッシュのキーの順(数値 < 文字列)になる(HASH_KEYS を参照)\n- \"1\" と \"01\" のように、YAYA のハッシュで同じキーとみなされないものは別のキーのまま残る。\"1\" のような正規形の整数文字列のキーは h[1] でも h[\"1\"] でも引ける\n- null の値のキーもハッシュに残る。HASH_EXIST は 1 を返す\n\nエラー\n| 状況 | 警告 | GETLASTERROR |\n|------|------|------|\n| 引数がない | W0008 | 8 |\n| path が文字列でない | W0009 | 9 |\n| charset が不正 | W0012 / W0009 | 12 / 9 |\n| ファイルを開けない | W0025 | 25 |\n| JSON として解析できない | W0026 | 26 |\n\nExample\ndata.json:\n{\n \"name\": \"さくら\",\n \"age\": 17,\n \"tags\": [\"ghost\", \"shell\"],\n \"profile\": { \"height\": 158.5, \"visible\": true, \"memo\": null }\n}\n\n_j = FREADJSON(\"data.json\")\n_j[\"name\"] // さくら\n_j[\"tags\"][1] // shell\n_j[\"profile\"][\"height\"] // 実数の 158.5\n_j[\"profile\"][\"visible\"] // 1\n\nforeach _j[\"tags\"]; _t {\n // _t に \"ghost\"、\"shell\" が順に入る\n}\n\nCompatibility\n- YAYA: Tc601-1以降\n- Tc602-1: 小数点が , のロケール(ドイツ語など)の環境で、小数を含む JSON の解析に失敗していたのを修正\n\nSee Also\n- PARSEJSON\n- FWRITEJSON\n- FREADXML\n- 値の入れ子と多次元代入",
14858
+ "content": "FREADJSON\nCategory: ファイル操作\n\nSignature\nFREADJSON( path [, charset] )\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| path | 読み込む JSON ファイルのパス(yaya.dll からの相対パス、または絶対パス) |\n| charset | ファイルの文字コード(省略可)。文字列(\"UTF-8\" \"Shift_JIS\" など。文字コードの名前)または数値で指定する。省略時は UTF-8 |\n\nReturns\n- 成功時: JSON を変換した値(下記の 値の対応)\n- 失敗時: 空(VOID)\n\nDescription\nJSON ファイルを丸ごと読み込んで解析し、ハッシュ・配列などの値にして返す。FOPEN で開いておく必要はない。\n\nJSON の解析には parson を使っている。\n\n- 先頭の UTF-8 の BOM は無視する\n- /* */ と // のコメントを書ける(JSON の規格外だが、設定ファイルなどで使えるよう許している)\n- 最上位はオブジェクトや配列でなくてもよい(123 や \"abc\" だけのファイルも読める)\n\n値の対応\n\n| JSON | YAYA |\n|------|------|\n| オブジェクト | ハッシュ |\n| 配列 | 汎用配列(要素に配列やハッシュを含む入れ子になる) |\n| 文字列 | 文字列 |\n| 数値(整数の値) | 整数 |\n| 数値(それ以外) | 実数 |\n| true / false | 整数 1 / 0 |\n| null | 空(VOID) |\n\n- 数値は内部で実数として解析するため、1.0 のように小数点があっても値が整数なら整数になる。また、2^53 を超える整数は誤差を含むことがある。整数の範囲(-2^63 以上 2^63 未満)を超える値は実数になる\n- オブジェクトのキーの並びは保たれない。ハッシュのキーの順(数値 < 文字列)になる(HASH_KEYS を参照)\n- \"1\" と \"01\" のように、YAYA のハッシュで同じキーとみなされないものは別のキーのまま残る。\"1\" のような正規形の整数文字列のキーは h[1] でも h[\"1\"] でも引ける\n- null の値のキーもハッシュに残る。HASH_EXIST は 1 を返す\n\nエラー\n| 状況 | 警告 | GETLASTERROR |\n|------|------|------|\n| 引数がない | W0008 | 8 |\n| path が文字列でない | W0009 | 9 |\n| charset が不正 | W0012 / W0009 | 12 / 9 |\n| ファイルを開けない | W0025 | 25 |\n| JSON として解析できない | W0026 | 26 |\n\nExample\ndata.json:\n{\n \"name\": \"さくら\",\n \"age\": 17,\n \"tags\": [\"ghost\", \"shell\"],\n \"profile\": { \"height\": 158.5, \"visible\": true, \"memo\": null }\n}\n\n_j = FREADJSON(\"data.json\")\n_j[\"name\"] // さくら\n_j[\"tags\"][1] // shell\n_j[\"profile\"][\"height\"] // 実数の 158.5\n_j[\"profile\"][\"visible\"] // 1\n\nforeach _j[\"tags\"]; _t {\n // _t に \"ghost\"、\"shell\" が順に入る\n}\n\nCompatibility\n- YAYA: Tc601-1以降\n- Tc602-1: 小数点が , のロケール(ドイツ語など)の環境で、小数を含む JSON の解析に失敗していたのを修正\n- Tc603-1: 知らない文字コードの名前を渡すと警告 W0012 を出して失敗するようにした(それまでは警告を出さずに OS デフォルトとして扱っていた)\n\nSee Also\n- PARSEJSON\n- FWRITEJSON\n- FREADXML\n- 値の入れ子と多次元代入",
14851
14859
  "url": "https://yaya-shiori.github.io/yaya-docs/functions/FREADJSON/",
14852
14860
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/functions/FREADJSON.md"
14853
14861
  },
@@ -14856,7 +14864,7 @@
14856
14864
  "title": "FREADTOML",
14857
14865
  "source": "yaya_docs",
14858
14866
  "category": "yaya_function",
14859
- "content": "FREADTOML\nCategory: ファイル操作\n\nSignature\nFREADTOML( path [, charset] )\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| path | 読み込む TOML ファイルのパス(yaya.dll からの相対パス、または絶対パス) |\n| charset | ファイルの文字コード(省略可)。文字列(\"UTF-8\" \"Shift_JIS\" など)または数値で指定する。省略時は UTF-8(TOML の規格では UTF-8 と決まっている) |\n\nReturns\n- 成功時: TOML を変換したハッシュ(下記の 値の対応)\n- 失敗時: 空(VOID)\n\nDescription\nTOML ファイルを丸ごと読み込んで解析し、ハッシュにして返す。FOPEN で開いておく必要はない。\n\nTOML の解析は YAYA が自前で行う。TOML v1.0.0 に対応している。v1.1 で加わった、インライン表の中の改行と末尾のカンマ、\\e \\xHH のエスケープも受け付ける。\n\n- 先頭の UTF-8 の BOM は無視する。改行は CRLF / LF のどちらでもよい\n- 最上位は常にハッシュになる。空のファイルや、コメントだけのファイルは空のハッシュになる\n- 同じキーや表を2回定義する、ドットのキーで作った表を [表] で定義し直す、インライン表に後から足す、などの規格で禁じられていることはエラーにする\n\n値の対応\n\n| TOML | YAYA |\n|------|------|\n| 表([table]・インライン表 { }・ドットのキー a.b = 1) | ハッシュ |\n| 表の配列([[array]]) | ハッシュの汎用配列 |\n| 配列 | 汎用配列(要素に配列やハッシュを含む入れ子になる) |\n| 文字列(\"...\" '...' \"\"\"...\"\"\" '''...''') | 文字列 |\n| 整数(42 1_000 0xDEAD 0o755 0b1101) | 整数 |\n| 実数(3.14 5e+22 inf nan) | 実数 |\n| true / false | 整数 1 / 0 |\n| 日時(1979-05-27T07:32:00Z、1979-05-27、07:32:00 など) | 書かれたとおりの文字列 |\n\n- 整数の範囲(-2^63 以上 2^63 未満)を超える整数はエラーにする\n- キーの並びは保たれない。ハッシュのキーの順になる(HASH_KEYS を参照)\n\nエラー\n| 状況 | 警告 | GETLASTERROR |\n|------|------|------|\n| 引数がない | W0008 | 8 |\n| path が文字列でない | W0009 | 9 |\n| charset が不正 | W0012 / W0009 | 12 / 9 |\n| ファイルを開けない | W0025 | 25 |\n| TOML として解析できない | W0026(行番号と原因も出力する) | 26 |\n\nExample\nconfig.toml:\n# ゴーストの設定\ntitle = \"設定\"\nupdated = 2026-09-27T12:00:00+09:00\n\n[ghost]\nname = \"さくら\"\nage = 17\nvisible = true\ntags = [\"ghost\", \"shell\"]\npath = 'C:\\ssp\\ghost'\n\n[[friends]]\nname = \"うにゅう\"\n\n[[friends]]\nname = \"まゆら\"\n\n_t = FREADTOML(\"config.toml\")\n_t[\"title\"] // 設定\n_t[\"updated\"] // 文字列の 2026-09-27T12:00:00+09:00\n_t[\"ghost\"][\"name\"] // さくら\n_t[\"ghost\"][\"visible\"] // 1\n_t[\"ghost\"][\"tags\"][1] // shell\n_t[\"ghost\"][\"path\"] // C:\\ssp\\ghost\n_t[\"friends\"][1][\"name\"] // まゆら\n\nforeach _t[\"friends\"]; _f {\n // _f に {name: うにゅう}、{name: まゆら} のハッシュが順に入る\n}\n\nCompatibility\n- YAYA: Tc602-5以降\n\nSee Also\n- PARSETOML\n- FWRITETOML\n- FREADJSON\n- FREADYAML\n- 値の入れ子と多次元代入",
14867
+ "content": "FREADTOML\nCategory: ファイル操作\n\nSignature\nFREADTOML( path [, charset] )\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| path | 読み込む TOML ファイルのパス(yaya.dll からの相対パス、または絶対パス) |\n| charset | ファイルの文字コード(省略可)。文字列(\"UTF-8\" \"Shift_JIS\" など。文字コードの名前)または数値で指定する。省略時は UTF-8(TOML の規格では UTF-8 と決まっている) |\n\nReturns\n- 成功時: TOML を変換したハッシュ(下記の 値の対応)\n- 失敗時: 空(VOID)\n\nDescription\nTOML ファイルを丸ごと読み込んで解析し、ハッシュにして返す。FOPEN で開いておく必要はない。\n\nTOML の解析は YAYA が自前で行う。TOML v1.0.0 に対応している。v1.1 で加わった、インライン表の中の改行と末尾のカンマ、\\e \\xHH のエスケープも受け付ける。\n\n- 先頭の UTF-8 の BOM は無視する。改行は CRLF / LF のどちらでもよい\n- 最上位は常にハッシュになる。空のファイルや、コメントだけのファイルは空のハッシュになる\n- 同じキーや表を2回定義する、ドットのキーで作った表を [表] で定義し直す、インライン表に後から足す、などの規格で禁じられていることはエラーにする\n\n値の対応\n\n| TOML | YAYA |\n|------|------|\n| 表([table]・インライン表 { }・ドットのキー a.b = 1) | ハッシュ |\n| 表の配列([[array]]) | ハッシュの汎用配列 |\n| 配列 | 汎用配列(要素に配列やハッシュを含む入れ子になる) |\n| 文字列(\"...\" '...' \"\"\"...\"\"\" '''...''') | 文字列 |\n| 整数(42 1_000 0xDEAD 0o755 0b1101) | 整数 |\n| 実数(3.14 5e+22 inf nan) | 実数 |\n| true / false | 整数 1 / 0 |\n| 日時(1979-05-27T07:32:00Z、1979-05-27、07:32:00 など) | 書かれたとおりの文字列 |\n\n- 整数の範囲(-2^63 以上 2^63 未満)を超える整数はエラーにする\n- キーの並びは保たれない。ハッシュのキーの順になる(HASH_KEYS を参照)\n\nエラー\n| 状況 | 警告 | GETLASTERROR |\n|------|------|------|\n| 引数がない | W0008 | 8 |\n| path が文字列でない | W0009 | 9 |\n| charset が不正 | W0012 / W0009 | 12 / 9 |\n| ファイルを開けない | W0025 | 25 |\n| TOML として解析できない | W0026(行番号と原因も出力する) | 26 |\n\nExample\nconfig.toml:\n# ゴーストの設定\ntitle = \"設定\"\nupdated = 2026-09-27T12:00:00+09:00\n\n[ghost]\nname = \"さくら\"\nage = 17\nvisible = true\ntags = [\"ghost\", \"shell\"]\npath = 'C:\\ssp\\ghost'\n\n[[friends]]\nname = \"うにゅう\"\n\n[[friends]]\nname = \"まゆら\"\n\n_t = FREADTOML(\"config.toml\")\n_t[\"title\"] // 設定\n_t[\"updated\"] // 文字列の 2026-09-27T12:00:00+09:00\n_t[\"ghost\"][\"name\"] // さくら\n_t[\"ghost\"][\"visible\"] // 1\n_t[\"ghost\"][\"tags\"][1] // shell\n_t[\"ghost\"][\"path\"] // C:\\ssp\\ghost\n_t[\"friends\"][1][\"name\"] // まゆら\n\nforeach _t[\"friends\"]; _f {\n // _f に {name: うにゅう}、{name: まゆら} のハッシュが順に入る\n}\n\nCompatibility\n- YAYA: Tc602-5以降\n- Tc603-1: 知らない文字コードの名前を渡すと警告 W0012 を出して失敗するようにした(それまでは警告を出さずに OS デフォルトとして扱っていた)\n\nSee Also\n- PARSETOML\n- FWRITETOML\n- FREADJSON\n- FREADYAML\n- 値の入れ子と多次元代入",
14860
14868
  "url": "https://yaya-shiori.github.io/yaya-docs/functions/FREADTOML/",
14861
14869
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/functions/FREADTOML.md"
14862
14870
  },
@@ -14865,7 +14873,7 @@
14865
14873
  "title": "FREADXML",
14866
14874
  "source": "yaya_docs",
14867
14875
  "category": "yaya_function",
14868
- "content": "FREADXML\nCategory: ファイル操作\n\nSignature\nFREADXML( path [, charset] )\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| path | 読み込む XML ファイルのパス(yaya.dll からの相対パス、または絶対パス) |\n| charset | ファイルの文字コード(省略可)。文字列(\"UTF-8\" \"Shift_JIS\" など)または数値で指定する。省略時は下記のとおり自動で決める |\n\nReturns\n- 成功時: ルート要素を表すハッシュ(下記の 要素の形)\n- 失敗時: 空(VOID)\n\nDescription\nXML ファイルを丸ごと読み込んで解析し、ルート要素をハッシュにして返す。FOPEN で開いておく必要はない。\n\nXML の解析には TinyXML-2 を使っている。\n\ncharset を省略したときの文字コードは次の順に決める。\n\n1. 先頭に UTF-8 の BOM があれば UTF-8\n2. XML 宣言(<?xml version=\"1.0\" encoding=\"Shift_JIS\"?>)の encoding。Windows-31J CP932 も Shift_JIS として扱う\n3. どちらも無い、または encoding が YAYA の知らない文字コードなら UTF-8\n\ncharset を指定したときは XML 宣言の encoding を無視する。\n\n要素の形\n\n要素は、次の4つのキーを持つハッシュになる。キーは中身が空でも必ずある。\n\n| キー | 値 |\n|------|----|\n| name | タグ名(名前空間の接頭辞があれば ns:tag のまま) |\n| attr | 属性名 → 属性値 のハッシュ。値はすべて文字列 |\n| children | 子要素のハッシュの汎用配列(出現順) |\n| text | 直下のテキスト(CDATA を含む)を順に連結した文字列 |\n\n- 実体参照(&amp; &#x3042; など)は展開済みになる\n- テキストの前後の空白や改行はそのまま残る。要素と要素の間の空白だけの部分は text に入らない\n- 子要素とテキストが混在する場合、テキストと子要素の前後関係は失われる(<p>a<b>x</b>c</p> の text は ac)\n- コメント、処理命令、DOCTYPE、XML 宣言は無視する。ルート要素より外にあるものも返らない\n- 属性の並びは保たれない。ハッシュのキーの順になる\n\nエラー\n| 状況 | 警告 | GETLASTERROR |\n|------|------|------|\n| 引数がない | W0008 | 8 |\n| path が文字列でない | W0009 | 9 |\n| charset が不正 | W0012 / W0009 | 12 / 9 |\n| ファイルを開けない | W0025 | 25 |\n| XML として解析できない | W0026(エラーの内容と行番号も出力する) | 26 |\n\nExample\nshop.xml:\n<?xml version=\"1.0\" encoding=\"Shift_JIS\"?>\n<shop name=\"A\">\n <item id=\"1\">りんご</item>\n <item id=\"2\">バナナ</item>\n</shop>\n\n_x = FREADXML(\"shop.xml\")\n_x[\"name\"] // shop\n_x[\"attr\"][\"name\"] // A\n_x[\"children\"][1][\"name\"] // item\n_x[\"children\"][1][\"attr\"][\"id\"] // 2\n_x[\"children\"][1][\"text\"] // バナナ\n\nforeach _x[\"children\"]; _item {\n // _item[\"attr\"][\"id\"] と _item[\"text\"] を順に扱える\n}\n\nCompatibility\n- YAYA: Tc601-1以降\n\nSee Also\n- PARSEXML\n- FWRITEXML\n- FREADJSON\n- 値の入れ子と多次元代入",
14876
+ "content": "FREADXML\nCategory: ファイル操作\n\nSignature\nFREADXML( path [, charset] )\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| path | 読み込む XML ファイルのパス(yaya.dll からの相対パス、または絶対パス) |\n| charset | ファイルの文字コード(省略可)。文字列(\"UTF-8\" \"Shift_JIS\" など。文字コードの名前)または数値で指定する。省略時は下記のとおり自動で決める |\n\nReturns\n- 成功時: ルート要素を表すハッシュ(下記の 要素の形)\n- 失敗時: 空(VOID)\n\nDescription\nXML ファイルを丸ごと読み込んで解析し、ルート要素をハッシュにして返す。FOPEN で開いておく必要はない。\n\nXML の解析には TinyXML-2 を使っている。\n\ncharset を省略したときの文字コードは次の順に決める。\n\n1. 先頭に UTF-8 の BOM があれば UTF-8\n2. XML 宣言(<?xml version=\"1.0\" encoding=\"Shift_JIS\"?>)の encoding。Windows-31J CP932 も Shift_JIS として扱う\n3. どちらも無い、または encoding が YAYA の知らない文字コードなら UTF-8\n\ncharset を指定したときは XML 宣言の encoding を無視する。\n\n要素の形\n\n要素は、次の4つのキーを持つハッシュになる。キーは中身が空でも必ずある。\n\n| キー | 値 |\n|------|----|\n| name | タグ名(名前空間の接頭辞があれば ns:tag のまま) |\n| attr | 属性名 → 属性値 のハッシュ。値はすべて文字列 |\n| children | 子要素のハッシュの汎用配列(出現順) |\n| text | 直下のテキスト(CDATA を含む)を順に連結した文字列 |\n\n- 実体参照(&amp; &#x3042; など)は展開済みになる\n- テキストの前後の空白や改行はそのまま残る。要素と要素の間の空白だけの部分は text に入らない\n- 子要素とテキストが混在する場合、テキストと子要素の前後関係は失われる(<p>a<b>x</b>c</p> の text は ac)\n- コメント、処理命令、DOCTYPE、XML 宣言は無視する。ルート要素より外にあるものも返らない\n- 属性の並びは保たれない。ハッシュのキーの順になる\n\nエラー\n| 状況 | 警告 | GETLASTERROR |\n|------|------|------|\n| 引数がない | W0008 | 8 |\n| path が文字列でない | W0009 | 9 |\n| charset が不正 | W0012 / W0009 | 12 / 9 |\n| ファイルを開けない | W0025 | 25 |\n| XML として解析できない | W0026(エラーの内容と行番号も出力する) | 26 |\n\nExample\nshop.xml:\n<?xml version=\"1.0\" encoding=\"Shift_JIS\"?>\n<shop name=\"A\">\n <item id=\"1\">りんご</item>\n <item id=\"2\">バナナ</item>\n</shop>\n\n_x = FREADXML(\"shop.xml\")\n_x[\"name\"] // shop\n_x[\"attr\"][\"name\"] // A\n_x[\"children\"][1][\"name\"] // item\n_x[\"children\"][1][\"attr\"][\"id\"] // 2\n_x[\"children\"][1][\"text\"] // バナナ\n\nforeach _x[\"children\"]; _item {\n // _item[\"attr\"][\"id\"] と _item[\"text\"] を順に扱える\n}\n\nCompatibility\n- YAYA: Tc601-1以降\n- Tc603-1: 知らない文字コードの名前を渡すと警告 W0012 を出して失敗するようにした(それまでは警告を出さずに OS デフォルトとして扱っていた)\n\nSee Also\n- PARSEXML\n- FWRITEXML\n- FREADJSON\n- 値の入れ子と多次元代入",
14869
14877
  "url": "https://yaya-shiori.github.io/yaya-docs/functions/FREADXML/",
14870
14878
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/functions/FREADXML.md"
14871
14879
  },
@@ -14874,7 +14882,7 @@
14874
14882
  "title": "FREADYAML",
14875
14883
  "source": "yaya_docs",
14876
14884
  "category": "yaya_function",
14877
- "content": "FREADYAML\nCategory: ファイル操作\n\nSignature\nFREADYAML( path [, charset] )\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| path | 読み込む YAML ファイルのパス(yaya.dll からの相対パス、または絶対パス) |\n| charset | ファイルの文字コード(省略可)。文字列(\"UTF-8\" \"Shift_JIS\" など)または数値で指定する。省略時は UTF-8 |\n\nReturns\n- 成功時: YAML を変換した値(下記の 値の対応)\n- 失敗時: 空(VOID)\n\nDescription\nYAML ファイルを丸ごと読み込んで解析し、ハッシュ・配列などの値にして返す。FOPEN で開いておく必要はない。\n\nYAML の解析は YAYA が自前で行う。設定ファイルなどでよく使われる範囲(下記の 対応している書き方)に対応したもので、YAML の仕様をすべて満たしてはいない。\n\n- 先頭の UTF-8 の BOM は無視する。改行は CRLF / LF のどちらでもよい\n- 空のファイルや、コメントだけのファイルは空(VOID)になる。エラーにはならない\n\n対応している書き方\n\n| 書き方 | 例 |\n|--------|----|\n| ブロック形式のマッピング・シーケンス | key: value、- item。key: の下に同じ桁で - item を並べる書き方も可 |\n| フロー形式 | [1, 2]、{a: 1, b: 2}。入れ子や、複数行にわたる書き方も可 |\n| クォートなしの文字列 | 複数行にわたってもよい(改行は空白になり、空行は改行になる) |\n| クォート付きの文字列 | '...'('' で ')、\"...\"(\\n \\t \\\" \\\\ \\x41 あ \\U0001F600 などのエスケープ) |\n| ブロックスカラー | |(改行をそのまま残す)、>(改行を空白にする)。末尾の改行の扱い |- |+、字下げの指定 |2 も可 |\n| コメント | # から行末まで(値の後に書くときは # の前に空白が必要) |\n| アンカーとエイリアス | &name を付けた値を *name で参照する(値を複製する) |\n| マージキー | <<: *name や <<: [*a, *b] でマッピングを取り込む。明示したキーと、先に書いたものが優先 |\n| 文書の区切り | 先頭の ---(と、その前の %YAML などのディレクティブ)、末尾の ... |\n| タグ | !!str(と !)は文字列にする。!!int !!float !!bool !!null はクォートされていても型を決める。ほかのタグは無視する |\n\n次のものには対応していない。書かれていると W0026 になる。\n\n- 1つのファイルに複数の文書(2つ目の ---)\n- 複合キー(? で始まるキー、キーにフロー形式を書いたもの)\n- 字下げにタブを使ったもの(値の中のタブは使える)\n\n値の対応\n\n型は YAML 1.2 の Core Schema の規則で決める。\n\n| YAML | YAYA |\n|------|------|\n| マッピング | ハッシュ。キーは常に文字列 |\n| シーケンス | 汎用配列(要素に配列やハッシュを含む入れ子になる) |\n| 整数(123 -4 0o17 0x1F) | 整数。10進で整数の範囲を超えるものは実数 |\n| 実数(1.5 1e3 .5 .inf -.inf .nan) | 実数 |\n| true / false(True TRUE なども) | 整数 1 / 0 |\n| null / ~ / 値なし | 空(VOID) |\n| それ以外・クォート付き・ブロックスカラー | 文字列 |\n\n- YAML 1.1 の処理系とは次の点が違う。yes no on off は文字列、017 は 10 進の 17、1_000 は文字列、2001-12-14 のような日付も文字列になる\n- マッピングのキーの並びは保たれない。ハッシュのキーの順になる(HASH_KEYS を参照)。1 のような正規形の整数のキーは h[1] でも h[\"1\"] でも引ける\n- 同じキーが2回書かれていたら、後に書いたほうになる\n- 深い入れ子(256 段を超えるもの)と、エイリアスの複製が合計 100 万要素を超えるものはエラーにする(悪意のあるファイルでメモリを使い果たさないため)\n\nエラー\n| 状況 | 警告 | GETLASTERROR |\n|------|------|------|\n| 引数がない | W0008 | 8 |\n| path が文字列でない | W0009 | 9 |\n| charset が不正 | W0012 / W0009 | 12 / 9 |\n| ファイルを開けない | W0025 | 25 |\n| YAML として解析できない、対応していない書き方 | W0026(行番号と原因も出力する) | 26 |\n\nExample\nconfig.yaml:\n# ゴーストの設定\nname: さくら\nage: 17\nheight: 158.5\nvisible: true\nmemo: ~\ntags: [ghost, shell]\ntalk:\n greeting: |\n こんにちは。\n 今日もいい天気ですね。\n random:\n - おはよう\n - こんばんは\ndefaults: &defaults\n volume: 80\n speed: 2\nvoice:\n <<: *defaults\n speed: 3\n\n_y = FREADYAML(\"config.yaml\")\n_y[\"name\"] // さくら\n_y[\"tags\"][1] // shell\n_y[\"height\"] // 実数の 158.5\n_y[\"visible\"] // 1\n_y[\"memo\"] // 空(VOID)\n_y[\"talk\"][\"greeting\"] // \"こんにちは。\" + 改行 + \"今日もいい天気ですね。\" + 改行\n_y[\"talk\"][\"random\"][0] // おはよう\n_y[\"voice\"][\"volume\"] // 80(defaults から取り込んだもの)\n_y[\"voice\"][\"speed\"] // 3\n\nCompatibility\n- YAYA: Tc602-5以降\n\nSee Also\n- PARSEYAML\n- FWRITEYAML\n- FREADJSON\n- FREADTOML\n- 値の入れ子と多次元代入",
14885
+ "content": "FREADYAML\nCategory: ファイル操作\n\nSignature\nFREADYAML( path [, charset] )\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| path | 読み込む YAML ファイルのパス(yaya.dll からの相対パス、または絶対パス) |\n| charset | ファイルの文字コード(省略可)。文字列(\"UTF-8\" \"Shift_JIS\" など。文字コードの名前)または数値で指定する。省略時は UTF-8 |\n\nReturns\n- 成功時: YAML を変換した値(下記の 値の対応)\n- 失敗時: 空(VOID)\n\nDescription\nYAML ファイルを丸ごと読み込んで解析し、ハッシュ・配列などの値にして返す。FOPEN で開いておく必要はない。\n\nYAML の解析は YAYA が自前で行う。設定ファイルなどでよく使われる範囲(下記の 対応している書き方)に対応したもので、YAML の仕様をすべて満たしてはいない。\n\n- 先頭の UTF-8 の BOM は無視する。改行は CRLF / LF のどちらでもよい\n- 空のファイルや、コメントだけのファイルは空(VOID)になる。エラーにはならない\n\n対応している書き方\n\n| 書き方 | 例 |\n|--------|----|\n| ブロック形式のマッピング・シーケンス | key: value、- item。key: の下に同じ桁で - item を並べる書き方も可 |\n| フロー形式 | [1, 2]、{a: 1, b: 2}。入れ子や、複数行にわたる書き方も可 |\n| クォートなしの文字列 | 複数行にわたってもよい(改行は空白になり、空行は改行になる) |\n| クォート付きの文字列 | '...'('' で ')、\"...\"(\\n \\t \\\" \\\\ \\x41 あ \\U0001F600 などのエスケープ) |\n| ブロックスカラー | |(改行をそのまま残す)、>(改行を空白にする)。末尾の改行の扱い |- |+、字下げの指定 |2 も可 |\n| コメント | # から行末まで(値の後に書くときは # の前に空白が必要) |\n| アンカーとエイリアス | &name を付けた値を *name で参照する(値を複製する) |\n| マージキー | <<: *name や <<: [*a, *b] でマッピングを取り込む。明示したキーと、先に書いたものが優先 |\n| 文書の区切り | 先頭の ---(と、その前の %YAML などのディレクティブ)、末尾の ... |\n| タグ | !!str(と !)は文字列にする。!!int !!float !!bool !!null はクォートされていても型を決める。ほかのタグは無視する |\n\n次のものには対応していない。書かれていると W0026 になる。\n\n- 1つのファイルに複数の文書(2つ目の ---)\n- 複合キー(? で始まるキー、キーにフロー形式を書いたもの)\n- 字下げにタブを使ったもの(値の中のタブは使える)\n\n値の対応\n\n型は YAML 1.2 の Core Schema の規則で決める。\n\n| YAML | YAYA |\n|------|------|\n| マッピング | ハッシュ。キーは常に文字列 |\n| シーケンス | 汎用配列(要素に配列やハッシュを含む入れ子になる) |\n| 整数(123 -4 0o17 0x1F) | 整数。10進で整数の範囲を超えるものは実数 |\n| 実数(1.5 1e3 .5 .inf -.inf .nan) | 実数 |\n| true / false(True TRUE なども) | 整数 1 / 0 |\n| null / ~ / 値なし | 空(VOID) |\n| それ以外・クォート付き・ブロックスカラー | 文字列 |\n\n- YAML 1.1 の処理系とは次の点が違う。yes no on off は文字列、017 は 10 進の 17、1_000 は文字列、2001-12-14 のような日付も文字列になる\n- マッピングのキーの並びは保たれない。ハッシュのキーの順になる(HASH_KEYS を参照)。1 のような正規形の整数のキーは h[1] でも h[\"1\"] でも引ける\n- 同じキーが2回書かれていたら、後に書いたほうになる\n- 深い入れ子(256 段を超えるもの)と、エイリアスの複製が合計 100 万要素を超えるものはエラーにする(悪意のあるファイルでメモリを使い果たさないため)\n\nエラー\n| 状況 | 警告 | GETLASTERROR |\n|------|------|------|\n| 引数がない | W0008 | 8 |\n| path が文字列でない | W0009 | 9 |\n| charset が不正 | W0012 / W0009 | 12 / 9 |\n| ファイルを開けない | W0025 | 25 |\n| YAML として解析できない、対応していない書き方 | W0026(行番号と原因も出力する) | 26 |\n\nExample\nconfig.yaml:\n# ゴーストの設定\nname: さくら\nage: 17\nheight: 158.5\nvisible: true\nmemo: ~\ntags: [ghost, shell]\ntalk:\n greeting: |\n こんにちは。\n 今日もいい天気ですね。\n random:\n - おはよう\n - こんばんは\ndefaults: &defaults\n volume: 80\n speed: 2\nvoice:\n <<: *defaults\n speed: 3\n\n_y = FREADYAML(\"config.yaml\")\n_y[\"name\"] // さくら\n_y[\"tags\"][1] // shell\n_y[\"height\"] // 実数の 158.5\n_y[\"visible\"] // 1\n_y[\"memo\"] // 空(VOID)\n_y[\"talk\"][\"greeting\"] // \"こんにちは。\" + 改行 + \"今日もいい天気ですね。\" + 改行\n_y[\"talk\"][\"random\"][0] // おはよう\n_y[\"voice\"][\"volume\"] // 80(defaults から取り込んだもの)\n_y[\"voice\"][\"speed\"] // 3\n\nCompatibility\n- YAYA: Tc602-5以降\n- Tc603-1: 知らない文字コードの名前を渡すと警告 W0012 を出して失敗するようにした(それまでは警告を出さずに OS デフォルトとして扱っていた)\n\nSee Also\n- PARSEYAML\n- FWRITEYAML\n- FREADJSON\n- FREADTOML\n- 値の入れ子と多次元代入",
14878
14886
  "url": "https://yaya-shiori.github.io/yaya-docs/functions/FREADYAML/",
14879
14887
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/functions/FREADYAML.md"
14880
14888
  },
@@ -14928,7 +14936,7 @@
14928
14936
  "title": "FUNCDECL_ERASE",
14929
14937
  "source": "yaya_docs",
14930
14938
  "category": "yaya_function",
14931
- "content": "FUNCDECL_ERASE\n\nCategory: メタ操作・特殊関数\n\nSignature\n\nFUNCDECL_ERASE(variable_name, function_name)\n\nParameters\n\n| Parameter | Description |\n|-----------|-------------|\n| variable_name | 監視対象の変数名 |\n| function_name | 変数削除時に実行する関数名。空文字列('' または \"\")を指定すると登録解除 |\n\nReturns\n\n- 成功時: 1\n- 失敗時: 0\n\n変数が削除されたとき、指定した関数が自動的に呼び出される。呼び出される関数の引数は以下の通り:\n\n- _argv[0]: 変数名\n- _argv[1]: 変数の現在の値\n\n呼び出された関数の戻り値はシステムによって無視される。\n\nCompatibility\n\n- YAYA: Tc565-1 以降\n\nSee Also\n\n- FUNCDECL_WRITE\n- FUNCDECL_READ",
14939
+ "content": "FUNCDECL_ERASE\n\nCategory: メタ操作・特殊関数\n\nSignature\n\nFUNCDECL_ERASE(variable_name, function_name)\n\nParameters\n\n| Parameter | Description |\n|-----------|-------------|\n| variable_name | 監視対象の変数名 |\n| function_name | 変数削除時に実行する関数名。空文字列('' または \"\")を指定すると登録解除 |\n\nReturns\n\n- 成功時: 1\n- 失敗時: 0\n\n変数が削除されたとき、指定した関数が自動的に呼び出される。呼び出される関数の引数は以下の通り:\n\n- _argv[0]: 変数名\n- _argv[1]: 変数の現在の値\n\n呼び出された関数の戻り値はシステムによって無視される。\n\n変数がまだ無いときは、空の変数を作ってから登録する。\n\nCompatibility\n\n- YAYA: Tc565-1 以降\n- Tc574-8 / Tc603-1: 変数がまだ無いときは作って登録するようにした(それまでは何もせず 0 を返していた)\n\nSee Also\n\n- FUNCDECL_WRITE\n- FUNCDECL_READ",
14932
14940
  "url": "https://yaya-shiori.github.io/yaya-docs/functions/FUNCDECL_ERASE/",
14933
14941
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/functions/FUNCDECL_ERASE.md"
14934
14942
  },
@@ -14937,7 +14945,7 @@
14937
14945
  "title": "FUNCDECL_READ",
14938
14946
  "source": "yaya_docs",
14939
14947
  "category": "yaya_function",
14940
- "content": "FUNCDECL_READ\n\nCategory: メタ操作・特殊関数\n\nSignature\n\nFUNCDECL_READ(variable_name, function_name)\n\nParameters\n\n| Parameter | Description |\n|-----------|-------------|\n| variable_name | 監視対象の変数名 |\n| function_name | 変数読み取り時に実行する関数名。空文字列('')を指定すると登録解除 |\n\nReturns\n\n- 成功時: 1\n- 失敗時: 0\n\n変数が読み取られるたびに、指定した関数が自動的に呼び出される(変数の読み取り時に自動的に実行される関数を指定します)。呼び出される関数の引数は以下の通り:\n\n- _argv[0]: 変数名\n- _argv[1]: 変数の現在の値\n\n呼び出された関数は、実際に取得する値を返す必要がある(現在の値と異なる値を返すことも可能)。\n\n値が汎用配列やハッシュのときは、_argv[1] が入れ子の配列やハッシュになる(_argv の要素数は 2 のまま)。Tc600-3 より前は、配列の値の先頭要素だけが _argv[1] に入っていた。\n\nCompatibility\n\n- YAYA: Tc565-1 以降\n- Tc600-3: 配列やハッシュの値を入れ子のまま渡すようにした\n\nSee Also\n\n- FUNCDECL_WRITE\n- FUNCDECL_ERASE",
14948
+ "content": "FUNCDECL_READ\n\nCategory: メタ操作・特殊関数\n\nSignature\n\nFUNCDECL_READ(variable_name, function_name)\n\nParameters\n\n| Parameter | Description |\n|-----------|-------------|\n| variable_name | 監視対象の変数名 |\n| function_name | 変数読み取り時に実行する関数名。空文字列('')を指定すると登録解除 |\n\nReturns\n\n- 成功時: 1\n- 失敗時: 0\n\n変数が読み取られるたびに、指定した関数が自動的に呼び出される(変数の読み取り時に自動的に実行される関数を指定します)。呼び出される関数の引数は以下の通り:\n\n- _argv[0]: 変数名\n- _argv[1]: 変数の現在の値\n\n呼び出された関数は、実際に取得する値を返す必要がある(現在の値と異なる値を返すことも可能)。\n\n値が汎用配列やハッシュのときは、_argv[1] が入れ子の配列やハッシュになる(_argv の要素数は 2 のまま)。Tc600-3 より前は、配列の値の先頭要素だけが _argv[1] に入っていた。\n\n変数がまだ無いときは、空の変数を作ってから登録する。\n\nCompatibility\n\n- YAYA: Tc565-1 以降\n- Tc600-3: 配列やハッシュの値を入れ子のまま渡すようにした\n- Tc574-8 / Tc603-1: 変数がまだ無いときは作って登録するようにした(それまでは何もせず 0 を返していた)\n\nSee Also\n\n- FUNCDECL_WRITE\n- FUNCDECL_ERASE",
14941
14949
  "url": "https://yaya-shiori.github.io/yaya-docs/functions/FUNCDECL_READ/",
14942
14950
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/functions/FUNCDECL_READ.md"
14943
14951
  },
@@ -14946,7 +14954,7 @@
14946
14954
  "title": "FUNCDECL_WRITE",
14947
14955
  "source": "yaya_docs",
14948
14956
  "category": "yaya_function",
14949
- "content": "FUNCDECL_WRITE\n\nCategory: メタ操作・特殊関数\n\nSignature\n\nFUNCDECL_WRITE(variable_name, function_name)\n\nParameters\n\n| Parameter | Description |\n|-----------|-------------|\n| variable_name | 監視対象の変数名 |\n| function_name | 変数書き込み時に実行する関数名。空文字列(\"\" または '')を指定すると登録解除 |\n\nReturns\n\n- 成功時: 1\n- 失敗時: 0\n\n指定した変数に書き込みが行われるたびに、登録した関数が自動的に呼び出される。呼び出される関数の引数は以下の通り:\n\n- _argv[0]: 変数名\n- _argv[1]: 代入される新しい値(= の右辺)\n- _argv[2]: 変数の以前の値\n\n呼び出された関数は、変数に実際に書き込まれる値を返す必要がある(_argv[1] と異なる値を返すことも可能)。\n\n値が汎用配列やハッシュのときは、_argv[1] _argv[2] の要素が入れ子の配列やハッシュになる(_argv の要素数は 3 のまま)。Tc600-3 より前は、配列の値が正しく渡らず(_argv[1] _argv[2] が空になる)、戻り値をそのまま返すと変数が空になっていた。\n\n添字への代入(a[0] = v)では呼び出されない。\n\nCompatibility\n\n- YAYA: Tc565-1 以降\n- Tc600-3: 配列やハッシュの値を入れ子のまま渡すようにした\n\nSee Also\n\n- FUNCDECL_READ\n- FUNCDECL_ERASE",
14957
+ "content": "FUNCDECL_WRITE\n\nCategory: メタ操作・特殊関数\n\nSignature\n\nFUNCDECL_WRITE(variable_name, function_name)\n\nParameters\n\n| Parameter | Description |\n|-----------|-------------|\n| variable_name | 監視対象の変数名 |\n| function_name | 変数書き込み時に実行する関数名。空文字列(\"\" または '')を指定すると登録解除 |\n\nReturns\n\n- 成功時: 1\n- 失敗時: 0\n\n指定した変数に書き込みが行われるたびに、登録した関数が自動的に呼び出される。呼び出される関数の引数は以下の通り:\n\n- _argv[0]: 変数名\n- _argv[1]: 代入される新しい値(= の右辺)\n- _argv[2]: 変数の以前の値\n\n呼び出された関数は、変数に実際に書き込まれる値を返す必要がある(_argv[1] と異なる値を返すことも可能)。\n\n値が汎用配列やハッシュのときは、_argv[1] _argv[2] の要素が入れ子の配列やハッシュになる(_argv の要素数は 3 のまま)。Tc600-3 より前は、配列の値が正しく渡らず(_argv[1] _argv[2] が空になる)、戻り値をそのまま返すと変数が空になっていた。\n\n添字への代入(a[0] = v)では呼び出されない。\n\n変数がまだ無いときは、空の変数を作ってから登録する(あとで代入したときに呼び出される)。\n\nCompatibility\n\n- YAYA: Tc565-1 以降\n- Tc574-8 / Tc603-1: 変数がまだ無いときは作って登録するようにした(それまでは何もせず 0 を返していた)\n- Tc600-3: 配列やハッシュの値を入れ子のまま渡すようにした\n\nSee Also\n\n- FUNCDECL_READ\n- FUNCDECL_ERASE",
14950
14958
  "url": "https://yaya-shiori.github.io/yaya-docs/functions/FUNCDECL_WRITE/",
14951
14959
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/functions/FUNCDECL_WRITE.md"
14952
14960
  },
@@ -15000,7 +15008,7 @@
15000
15008
  "title": "FWRITEJSON",
15001
15009
  "source": "yaya_docs",
15002
15010
  "category": "yaya_function",
15003
- "content": "FWRITEJSON\nCategory: ファイル操作\n\nSignature\nFWRITEJSON( path, value [, charset [, pretty]] )\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| path | 書き込むファイルのパス(yaya.dll からの相対パス、または絶対パス) |\n| value | JSON にする値。ハッシュや配列(入れ子を含む)も1つの引数として渡せる |\n| charset | ファイルの文字コード(省略可)。文字列(\"UTF-8\" \"Shift_JIS\" など)または数値で指定する。省略時、または空文字列のときは UTF-8(BOM なし) |\n| pretty | 1 なら改行とインデントを入れて整形する。省略時は 1(整形する) |\n\nReturns\n- 成功時: 1\n- 失敗時: 0\n\nDescription\n値を JSON にしてファイルに書き込む。ファイルが既にあれば上書きする。FOPEN で開いておく必要はない。\n\n値の対応と整形の形は DUMPJSON と同じ。整形したときはファイルの末尾に改行(LF)を付ける。\n\n書き込んだファイルは FREADJSON で読み戻せる(UTF-8 以外で書いたときは同じ charset を指定する)。\n\nディレクトリは作らない。存在しないディレクトリの中には書き込めない。\n\nエラー\n| 状況 | 警告 | GETLASTERROR |\n|------|------|------|\n| 引数が足りない | W0008 | 8 |\n| path が文字列でない | W0009 | 9 |\n| charset が不正 | W0012 / W0009 | 12 / 9 |\n| ファイルを開けない | W0025 | 25 |\n| 文字コードを変換できない | W0027 | 27 |\n| 書き込みに失敗した | W0013 | 13 |\n\nExample\n_conf = IHASH()\n_conf[\"volume\"] = 80\n_conf[\"friends\"] = (\"うにゅう\", \"まゆら\")\n\nFWRITEJSON(\"config.json\", _conf)\n// config.json:\n// {\n// \"friends\": [\n// \"うにゅう\",\n// \"まゆら\"\n// ],\n// \"volume\": 80\n// }\n\nFWRITEJSON(\"config.min.json\", _conf, \"\", 0) // UTF-8 で1行に\n\nCompatibility\n- YAYA: Tc602-1以降\n\nSee Also\n- DUMPJSON\n- FREADJSON\n- FWRITEXML",
15011
+ "content": "FWRITEJSON\nCategory: ファイル操作\n\nSignature\nFWRITEJSON( path, value [, charset [, pretty]] )\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| path | 書き込むファイルのパス(yaya.dll からの相対パス、または絶対パス) |\n| value | JSON にする値。ハッシュや配列(入れ子を含む)も1つの引数として渡せる |\n| charset | ファイルの文字コード(省略可)。文字列(\"UTF-8\" \"Shift_JIS\" など。文字コードの名前)または数値で指定する。省略時、または空文字列のときは UTF-8(BOM なし) |\n| pretty | 1 なら改行とインデントを入れて整形する。省略時は 1(整形する) |\n\nReturns\n- 成功時: 1\n- 失敗時: 0\n\nDescription\n値を JSON にしてファイルに書き込む。ファイルが既にあれば上書きする。FOPEN で開いておく必要はない。\n\n値の対応と整形の形は DUMPJSON と同じ。整形したときはファイルの末尾に改行(LF)を付ける。\n\n書き込んだファイルは FREADJSON で読み戻せる(UTF-8 以外で書いたときは同じ charset を指定する)。\n\ncharset で表せない文字(Shift_JIS での絵文字など)は、JSON のエスケープ \\uXXXX(BMP の外の文字はサロゲートペアの \\uD83D\\uDE00 のような2つ組)で書く。読み戻すと元の文字に戻る。\n\nディレクトリは作らない。存在しないディレクトリの中には書き込めない。\n\nエラー\n| 状況 | 警告 | GETLASTERROR |\n|------|------|------|\n| 引数が足りない | W0008 | 8 |\n| path が文字列でない | W0009 | 9 |\n| charset が不正 | W0012 / W0009 | 12 / 9 |\n| ファイルを開けない | W0025 | 25 |\n| 文字コードの変換そのものに失敗した | W0027 | 27 |\n| 書き込みに失敗した | W0013 | 13 |\n\nExample\n_conf = IHASH()\n_conf[\"volume\"] = 80\n_conf[\"friends\"] = (\"うにゅう\", \"まゆら\")\n\nFWRITEJSON(\"config.json\", _conf)\n// config.json:\n// {\n// \"friends\": [\n// \"うにゅう\",\n// \"まゆら\"\n// ],\n// \"volume\": 80\n// }\n\nFWRITEJSON(\"config.min.json\", _conf, \"\", 0) // UTF-8 で1行に\n\nCompatibility\n- YAYA: Tc602-1以降\n- Tc603-1: charset で表せない文字を、黙って ? にせず、形式のエスケープで書くようにした。知らない文字コードの名前を渡すと警告 W0012 を出して失敗するようにした(それまでは警告を出さずに OS デフォルトとして扱っていた)\n\nSee Also\n- DUMPJSON\n- FREADJSON\n- FWRITEXML",
15004
15012
  "url": "https://yaya-shiori.github.io/yaya-docs/functions/FWRITEJSON/",
15005
15013
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/functions/FWRITEJSON.md"
15006
15014
  },
@@ -15009,7 +15017,7 @@
15009
15017
  "title": "FWRITETOML",
15010
15018
  "source": "yaya_docs",
15011
15019
  "category": "yaya_function",
15012
- "content": "FWRITETOML\nCategory: ファイル操作\n\nSignature\nFWRITETOML( path, value [, charset [, pretty]] )\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| path | 書き込むファイルのパス(yaya.dll からの相対パス、または絶対パス) |\n| value | TOML にするハッシュ(入れ子を含む) |\n| charset | ファイルの文字コード(省略可)。文字列(\"UTF-8\" \"Shift_JIS\" など)または数値で指定する。省略時、または空文字列のときは UTF-8(BOM なし)。TOML の規格では UTF-8 と決まっているので、ふつうは省略する |\n| pretty | 1 なら [表] の見出しを使って整形する、0 なら最上位のキー1つにつき1行にする。省略時は 1 |\n\nReturns\n- 成功時: 1\n- 失敗時: 0\n\nDescription\nハッシュを TOML にしてファイルに書き込む。ファイルが既にあれば上書きする。FOPEN で開いておく必要はない。\n\n値の対応と整形の形は DUMPTOML と同じ。\n\n書き込んだファイルは FREADTOML で読み戻せる。\n\nディレクトリは作らない。存在しないディレクトリの中には書き込めない。\n\nエラー\n| 状況 | 警告 | GETLASTERROR |\n|------|------|------|\n| 引数が足りない | W0008 | 8 |\n| path が文字列でない | W0009 | 9 |\n| charset が不正 | W0012 / W0009 | 12 / 9 |\n| value がハッシュでない、配列の要素に空(VOID)がある | W0027(原因も出力する) | 27 |\n| ファイルを開けない | W0025 | 25 |\n| 文字コードを変換できない | W0027 | 27 |\n| 書き込みに失敗した | W0013 | 13 |\n\nExample\n_conf = IHASH()\n_conf[\"volume\"] = 80\n_conf[\"friends\"] = (\"うにゅう\", \"まゆら\")\n_conf[\"memo\"] = \"1行目\" + CHR(10) + \"2行目\"\n\nFWRITETOML(\"config.toml\", _conf)\n// config.toml:\n// friends = [\"うにゅう\", \"まゆら\"]\n// memo = \"\"\"\n// 1行目\n// 2行目\"\"\"\n// volume = 80\n\nCompatibility\n- YAYA: Tc602-5以降\n\nSee Also\n- DUMPTOML\n- FREADTOML\n- FWRITEJSON\n- FWRITEYAML",
15020
+ "content": "FWRITETOML\nCategory: ファイル操作\n\nSignature\nFWRITETOML( path, value [, charset [, pretty]] )\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| path | 書き込むファイルのパス(yaya.dll からの相対パス、または絶対パス) |\n| value | TOML にするハッシュ(入れ子を含む) |\n| charset | ファイルの文字コード(省略可)。文字列(\"UTF-8\" \"Shift_JIS\" など。文字コードの名前)または数値で指定する。省略時、または空文字列のときは UTF-8(BOM なし)。TOML の規格では UTF-8 と決まっているので、ふつうは省略する |\n| pretty | 1 なら [表] の見出しを使って整形する、0 なら最上位のキー1つにつき1行にする。省略時は 1 |\n\nReturns\n- 成功時: 1\n- 失敗時: 0\n\nDescription\nハッシュを TOML にしてファイルに書き込む。ファイルが既にあれば上書きする。FOPEN で開いておく必要はない。\n\n値の対応と整形の形は DUMPTOML と同じ。\n\n書き込んだファイルは FREADTOML で読み戻せる。\n\ncharset で表せない文字(Shift_JIS での絵文字など)を含む文字列は、'...' にはせず \"...\"(改行を含むときは \"\"\"...\"\"\")で囲んで、その文字を \\uXXXX(BMP の外の文字は \\U0001F600 のような8桁)で書く。キーも同じ。読み戻すと元の文字に戻る。\n\nディレクトリは作らない。存在しないディレクトリの中には書き込めない。\n\nエラー\n| 状況 | 警告 | GETLASTERROR |\n|------|------|------|\n| 引数が足りない | W0008 | 8 |\n| path が文字列でない | W0009 | 9 |\n| charset が不正 | W0012 / W0009 | 12 / 9 |\n| value がハッシュでない、配列の要素に空(VOID)がある | W0027(原因も出力する) | 27 |\n| ファイルを開けない | W0025 | 25 |\n| 文字コードの変換そのものに失敗した | W0027 | 27 |\n| 書き込みに失敗した | W0013 | 13 |\n\nExample\n_conf = IHASH()\n_conf[\"volume\"] = 80\n_conf[\"friends\"] = (\"うにゅう\", \"まゆら\")\n_conf[\"memo\"] = \"1行目\" + CHR(10) + \"2行目\"\n\nFWRITETOML(\"config.toml\", _conf)\n// config.toml:\n// friends = [\"うにゅう\", \"まゆら\"]\n// memo = \"\"\"\n// 1行目\n// 2行目\"\"\"\n// volume = 80\n\nCompatibility\n- YAYA: Tc602-5以降\n- Tc603-1: charset で表せない文字を、黙って ? にせず、形式のエスケープで書くようにした。知らない文字コードの名前を渡すと警告 W0012 を出して失敗するようにした(それまでは警告を出さずに OS デフォルトとして扱っていた)\n\nSee Also\n- DUMPTOML\n- FREADTOML\n- FWRITEJSON\n- FWRITEYAML",
15013
15021
  "url": "https://yaya-shiori.github.io/yaya-docs/functions/FWRITETOML/",
15014
15022
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/functions/FWRITETOML.md"
15015
15023
  },
@@ -15018,7 +15026,7 @@
15018
15026
  "title": "FWRITEXML",
15019
15027
  "source": "yaya_docs",
15020
15028
  "category": "yaya_function",
15021
- "content": "FWRITEXML\nCategory: ファイル操作\n\nSignature\nFWRITEXML( path, element [, charset [, pretty]] )\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| path | 書き込むファイルのパス(yaya.dll からの相対パス、または絶対パス) |\n| element | ルート要素を表すハッシュ(FREADXML が返すのと同じ形) |\n| charset | ファイルの文字コード(省略可)。文字列(\"UTF-8\" \"Shift_JIS\" など)または数値で指定する。省略時、または空文字列のときは UTF-8(BOM なし) |\n| pretty | 1 なら改行とインデントを入れて整形する。省略時は 1(整形する) |\n\nReturns\n- 成功時: 1\n- 失敗時: 0\n\nDescription\n要素のハッシュを XML にしてファイルに書き込む。ファイルが既にあれば上書きする。FOPEN で開いておく必要はない。\n\n要素のハッシュの形、エスケープ、整形の形は DUMPXML と同じ。先頭には charset に合わせた XML 宣言を付ける。\n\n| charset | XML 宣言の encoding |\n|---------|------|\n| UTF-8(省略時) | UTF-8 |\n| Shift_JIS | Shift_JIS |\n| EUC-JP | EUC-JP |\n| ISO-2022-JP | ISO-2022-JP |\n| BIG5 | Big5 |\n| GB2312 | GB2312 |\n| EUC-KR | EUC-KR |\n| default(OS の文字コード) | OS のコードページから決める(932 なら Shift_JIS) |\n\n書き込んだファイルは、XML 宣言の encoding を見るので、FREADXML で charset を指定せずに読み戻せる。\n\nディレクトリは作らない。存在しないディレクトリの中には書き込めない。\n\nエラー\n| 状況 | 警告 | GETLASTERROR |\n|------|------|------|\n| 引数が足りない | W0008 | 8 |\n| path が文字列でない | W0009 | 9 |\n| charset が不正 | W0012 / W0009 | 12 / 9 |\n| 要素のハッシュが不正(DUMPXML を参照) | W0027 | 27 |\n| ファイルを開けない | W0025 | 25 |\n| 書き込みに失敗した | W0013 | 13 |\n\nExample\n_x = FREADXML(\"shop.xml\")\n_x[\"children\"][0][\"text\"] = \"みかん\"\n\nFWRITEXML(\"shop.xml\", _x, \"Shift_JIS\")\n// shop.xml:\n// <?xml version=\"1.0\" encoding=\"Shift_JIS\"?>\n// <shop name=\"A\">\n// <item id=\"1\">みかん</item>\n// <item id=\"2\">バナナ</item>\n// </shop>\n\nCompatibility\n- YAYA: Tc602-1以降\n\nSee Also\n- DUMPXML\n- FREADXML\n- FWRITEJSON",
15029
+ "content": "FWRITEXML\nCategory: ファイル操作\n\nSignature\nFWRITEXML( path, element [, charset [, pretty]] )\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| path | 書き込むファイルのパス(yaya.dll からの相対パス、または絶対パス) |\n| element | ルート要素を表すハッシュ(FREADXML が返すのと同じ形) |\n| charset | ファイルの文字コード(省略可)。文字列(\"UTF-8\" \"Shift_JIS\" など。文字コードの名前)または数値で指定する。省略時、または空文字列のときは UTF-8(BOM なし) |\n| pretty | 1 なら改行とインデントを入れて整形する。省略時は 1(整形する) |\n\nReturns\n- 成功時: 1\n- 失敗時: 0\n\nDescription\n要素のハッシュを XML にしてファイルに書き込む。ファイルが既にあれば上書きする。FOPEN で開いておく必要はない。\n\n要素のハッシュの形、エスケープ、整形の形は DUMPXML と同じ。先頭には charset に合わせた XML 宣言を付ける。\n\n| charset | XML 宣言の encoding |\n|---------|------|\n| UTF-8(省略時) | UTF-8 |\n| Shift_JIS | Shift_JIS |\n| EUC-JP | EUC-JP |\n| ISO-2022-JP | ISO-2022-JP |\n| BIG5 | Big5 |\n| GB2312 | GB2312 |\n| EUC-KR | EUC-KR |\n| default(OS の文字コード) | OS のコードページから決める(932 なら Shift_JIS) |\n\n書き込んだファイルは、XML 宣言の encoding を見るので、FREADXML で charset を指定せずに読み戻せる。\n\ncharset で表せない文字(Shift_JIS での絵文字など)は、テキストと属性値の中では文字参照 &#x1F600; で書く。読み戻すと元の文字に戻る。要素名・属性名の中の文字は文字参照にできないので、W0027 で失敗する。\n\nディレクトリは作らない。存在しないディレクトリの中には書き込めない。\n\nエラー\n| 状況 | 警告 | GETLASTERROR |\n|------|------|------|\n| 引数が足りない | W0008 | 8 |\n| path が文字列でない | W0009 | 9 |\n| charset が不正 | W0012 / W0009 | 12 / 9 |\n| 要素のハッシュが不正(DUMPXML を参照) | W0027 | 27 |\n| 要素名・属性名に charset で表せない文字がある | W0027 | 27 |\n| ファイルを開けない | W0025 | 25 |\n| 書き込みに失敗した | W0013 | 13 |\n\nExample\n_x = FREADXML(\"shop.xml\")\n_x[\"children\"][0][\"text\"] = \"みかん\"\n\nFWRITEXML(\"shop.xml\", _x, \"Shift_JIS\")\n// shop.xml:\n// <?xml version=\"1.0\" encoding=\"Shift_JIS\"?>\n// <shop name=\"A\">\n// <item id=\"1\">みかん</item>\n// <item id=\"2\">バナナ</item>\n// </shop>\n\nCompatibility\n- YAYA: Tc602-1以降\n- Tc603-1: charset で表せない文字を、黙って ? にせず、形式のエスケープで書くようにした。知らない文字コードの名前を渡すと警告 W0012 を出して失敗するようにした(それまでは警告を出さずに OS デフォルトとして扱っていた)\n\nSee Also\n- DUMPXML\n- FREADXML\n- FWRITEJSON",
15022
15030
  "url": "https://yaya-shiori.github.io/yaya-docs/functions/FWRITEXML/",
15023
15031
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/functions/FWRITEXML.md"
15024
15032
  },
@@ -15027,7 +15035,7 @@
15027
15035
  "title": "FWRITEYAML",
15028
15036
  "source": "yaya_docs",
15029
15037
  "category": "yaya_function",
15030
- "content": "FWRITEYAML\nCategory: ファイル操作\n\nSignature\nFWRITEYAML( path, value [, charset [, pretty]] )\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| path | 書き込むファイルのパス(yaya.dll からの相対パス、または絶対パス) |\n| value | YAML にする値。ハッシュや配列(入れ子を含む)も1つの引数として渡せる |\n| charset | ファイルの文字コード(省略可)。文字列(\"UTF-8\" \"Shift_JIS\" など)または数値で指定する。省略時、または空文字列のときは UTF-8(BOM なし) |\n| pretty | 1 ならブロック形式、0 ならフロー形式の1行にする。省略時は 1 |\n\nReturns\n- 成功時: 1\n- 失敗時: 0\n\nDescription\n値を YAML にしてファイルに書き込む。ファイルが既にあれば上書きする。FOPEN で開いておく必要はない。\n\n値の対応と整形の形は DUMPYAML と同じ。ブロック形式のときはファイルの末尾に改行(LF)を付ける。\n\n書き込んだファイルは FREADYAML で読み戻せる(UTF-8 以外で書いたときは同じ charset を指定する)。\n\nディレクトリは作らない。存在しないディレクトリの中には書き込めない。\n\nエラー\n| 状況 | 警告 | GETLASTERROR |\n|------|------|------|\n| 引数が足りない | W0008 | 8 |\n| path が文字列でない | W0009 | 9 |\n| charset が不正 | W0012 / W0009 | 12 / 9 |\n| ファイルを開けない | W0025 | 25 |\n| 文字コードを変換できない | W0027 | 27 |\n| 書き込みに失敗した | W0013 | 13 |\n\nExample\n_conf = IHASH()\n_conf[\"volume\"] = 80\n_conf[\"friends\"] = (\"うにゅう\", \"まゆら\")\n_conf[\"memo\"] = \"1行目\" + CHR(10) + \"2行目\"\n\nFWRITEYAML(\"config.yaml\", _conf)\n// config.yaml:\n// friends:\n// - うにゅう\n// - まゆら\n// memo: |-\n// 1行目\n// 2行目\n// volume: 80\n\nFWRITEYAML(\"config.flow.yaml\", _conf, \"\", 0)\n// {friends: [うにゅう, まゆら], memo: \"1行目\\n2行目\", volume: 80}\n\nCompatibility\n- YAYA: Tc602-5以降\n\nSee Also\n- DUMPYAML\n- FREADYAML\n- FWRITEJSON\n- FWRITETOML",
15038
+ "content": "FWRITEYAML\nCategory: ファイル操作\n\nSignature\nFWRITEYAML( path, value [, charset [, pretty]] )\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| path | 書き込むファイルのパス(yaya.dll からの相対パス、または絶対パス) |\n| value | YAML にする値。ハッシュや配列(入れ子を含む)も1つの引数として渡せる |\n| charset | ファイルの文字コード(省略可)。文字列(\"UTF-8\" \"Shift_JIS\" など。文字コードの名前)または数値で指定する。省略時、または空文字列のときは UTF-8(BOM なし) |\n| pretty | 1 ならブロック形式、0 ならフロー形式の1行にする。省略時は 1 |\n\nReturns\n- 成功時: 1\n- 失敗時: 0\n\nDescription\n値を YAML にしてファイルに書き込む。ファイルが既にあれば上書きする。FOPEN で開いておく必要はない。\n\n値の対応と整形の形は DUMPYAML と同じ。ブロック形式のときはファイルの末尾に改行(LF)を付ける。\n\n書き込んだファイルは FREADYAML で読み戻せる(UTF-8 以外で書いたときは同じ charset を指定する)。\n\ncharset で表せない文字(Shift_JIS での絵文字など)を含む文字列は、クォートしない形やブロックスカラー(|)にはせず、\"...\" で囲んでその文字を \\uXXXX(BMP の外の文字は \\U0001F600 のような8桁)で書く。キーも同じ。読み戻すと元の文字に戻る。\n\nディレクトリは作らない。存在しないディレクトリの中には書き込めない。\n\nエラー\n| 状況 | 警告 | GETLASTERROR |\n|------|------|------|\n| 引数が足りない | W0008 | 8 |\n| path が文字列でない | W0009 | 9 |\n| charset が不正 | W0012 / W0009 | 12 / 9 |\n| ファイルを開けない | W0025 | 25 |\n| 文字コードの変換そのものに失敗した | W0027 | 27 |\n| 書き込みに失敗した | W0013 | 13 |\n\nExample\n_conf = IHASH()\n_conf[\"volume\"] = 80\n_conf[\"friends\"] = (\"うにゅう\", \"まゆら\")\n_conf[\"memo\"] = \"1行目\" + CHR(10) + \"2行目\"\n\nFWRITEYAML(\"config.yaml\", _conf)\n// config.yaml:\n// friends:\n// - うにゅう\n// - まゆら\n// memo: |-\n// 1行目\n// 2行目\n// volume: 80\n\nFWRITEYAML(\"config.flow.yaml\", _conf, \"\", 0)\n// {friends: [うにゅう, まゆら], memo: \"1行目\\n2行目\", volume: 80}\n\nCompatibility\n- YAYA: Tc602-5以降\n- Tc603-1: charset で表せない文字を、黙って ? にせず、形式のエスケープで書くようにした。知らない文字コードの名前を渡すと警告 W0012 を出して失敗するようにした(それまでは警告を出さずに OS デフォルトとして扱っていた)\n\nSee Also\n- DUMPYAML\n- FREADYAML\n- FWRITEJSON\n- FWRITETOML",
15031
15039
  "url": "https://yaya-shiori.github.io/yaya-docs/functions/FWRITEYAML/",
15032
15040
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/functions/FWRITEYAML.md"
15033
15041
  },
@@ -15126,7 +15134,7 @@
15126
15134
  "title": "GETSTRBYTES",
15127
15135
  "source": "yaya_docs",
15128
15136
  "category": "yaya_function",
15129
- "content": "GETSTRBYTES\nCategory: 文字列操作\n\nSignature\nGETSTRBYTES( string [ , code ] )\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| string | バイト数を計算する対象の文字列 |\n| code | 文字コードID(省略時は0)。エンコードを指定してバイト数を計算する |\n\nReturns\n- 成功時: 文字列を格納するのに必要なバイト数(整数)\n- 失敗時: 0\n\nDescription\n「文字列を格納するのに必要なバイト数」を計算する関数。文字エンコードごとのメモリ使用量を調べることができる。\n\nCompatibility\n- YAYA: 初期から利用可能\n- AYA: 5.8以降\n\nSee Also\n- GETSETTING\n- GETSYSTEMFUNCLIST",
15137
+ "content": "GETSTRBYTES\nCategory: 文字列操作\n\nSignature\nGETSTRBYTES( string [ , code ] )\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| string | バイト数を計算する対象の文字列 |\n| code | 文字コードID(省略時は0)、または文字コードの名前(文字コードの名前)。エンコードを指定してバイト数を計算する。知らない名前なら警告 W0012 を出して 0 を返す |\n\nReturns\n- 成功時: 文字列を格納するのに必要なバイト数(整数)\n- 失敗時: 0\n\nDescription\n「文字列を格納するのに必要なバイト数」を計算する関数。文字エンコードごとのメモリ使用量を調べることができる。\n\nCompatibility\n- YAYA: 初期から利用可能\n- AYA: 5.8以降\n- Tc574-8 / Tc603-1: 知らない文字コードの名前を渡すと、警告 W0012 を出して0 を返すようにした(それまでは警告を出さずに OS デフォルトとして扱っていた)\n\nSee Also\n- GETSETTING\n- GETSYSTEMFUNCLIST",
15130
15138
  "url": "https://yaya-shiori.github.io/yaya-docs/functions/GETSTRBYTES/",
15131
15139
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/functions/GETSTRBYTES.md"
15132
15140
  },
@@ -15162,7 +15170,7 @@
15162
15170
  "title": "GETTYPE",
15163
15171
  "source": "yaya_docs",
15164
15172
  "category": "yaya_function",
15165
- "content": "GETTYPE\nCategory: 型取得/変換\n\nSignature\nGETTYPE( var )\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| var | 型を調べる値・変数・式 |\n\nReturns\n- 0: 内部エラー(失敗)\n- 1: 整数\n- 2: 浮動小数点数\n- 3: 文字列\n- 4: 汎用配列\n- 5: ハッシュ(Tc600-3以降)\n\nDescription\n指定した値のデータ型を取得する。\n\n「要素数1の汎用配列は、その最初の(唯一の)要素の型を返します」という後方互換性のための動作がある。要素数1の汎用配列の型を正確に調べたい場合は GETTYPEEX を使用することが推奨される。\n\nCompatibility\n- YAYA: 初期から利用可能\n- AYA: 5.8以降\n- Tc600-3: ハッシュのとき 5 を返すようになった\n\nSee Also\n- GETTYPEEX\n- IHASH",
15173
+ "content": "GETTYPE\nCategory: 型取得/変換\n\nSignature\nGETTYPE( var )\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| var | 型を調べる値・変数・式 |\n\nReturns\n- 0: 内部エラー(失敗)\n- 1: 整数\n- 2: 浮動小数点数\n- 3: 文字列\n- 4: 汎用配列\n- 5: ハッシュ(Tc600-3以降)\n\nDescription\n指定した値のデータ型を取得する。\n\n「要素数1の汎用配列は、その最初の(唯一の)要素の型を返します」という後方互換性のための動作がある。要素数1の汎用配列の型を正確に調べたい場合は GETTYPEEX を使用することが推奨される。\n\nこの動作は、唯一の要素が配列やハッシュ(入れ子)のときも同じで、それぞれ 4 と 5 を返す。\n\nGETTYPE(PARSEJSON('[[1,2]]')) // 4\nGETTYPE(PARSEJSON('[{\"a\":1}]')) // 5\n\nCompatibility\n- YAYA: 初期から利用可能\n- AYA: 5.8以降\n- Tc600-3: ハッシュのとき 5 を返すようになった\n- Tc602-10: 要素数1の汎用配列で、唯一の要素が配列やハッシュのとき 0 を返していたのを直した(4 や 5 を返す)\n\nSee Also\n- GETTYPEEX\n- IHASH",
15166
15174
  "url": "https://yaya-shiori.github.io/yaya-docs/functions/GETTYPE/",
15167
15175
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/functions/GETTYPE.md"
15168
15176
  },
@@ -15198,7 +15206,7 @@
15198
15206
  "title": "HASH_EXIST",
15199
15207
  "source": "yaya_docs",
15200
15208
  "category": "yaya_function",
15201
- "content": "HASH_EXIST\nCategory: ハッシュ操作\n\nSignature\nHASH_EXIST( key, hash )\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| key | 調べるキー |\n| hash | ハッシュ |\n\nReturns\n- 1: キーがある\n- 0: キーが無い\n\nDescription\nハッシュにキーがあるかどうかを返す。引数の順はキー、ハッシュの順(ASEARCH と同じ)なので注意。\n\nh[キー] はキーが無くても空文字列を返すので、「値が空文字列」と「キーが無い」を区別したいときにこの関数を使う。\n\nキーの一致は ハッシュのキーの規則 に従う。key が配列やハッシュのときは警告 W0009 を出す。\n\nExample\n_h = IHASH(\"a\", \"\", 1, \"x\")\nHASH_EXIST(\"a\", _h) // 1\nHASH_EXIST(\"b\", _h) // 0\nHASH_EXIST(\"1\", _h) // 1 (1 と \"1\" は同じキー)\n\nCompatibility\n- YAYA: Tc600-3以降\n\nSee Also\n- HASH_KEYS\n- HASH_SIZE\n- IHASH",
15209
+ "content": "HASH_EXIST\nCategory: ハッシュ操作\n\nSignature\nHASH_EXIST( key, hash )\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| key | 調べるキー |\n| hash | ハッシュ |\n\nReturns\n- 1: キーがある\n- 0: キーが無い\n\nDescription\nハッシュにキーがあるかどうかを返す。引数の順はキー、ハッシュの順(ASEARCH と同じ)なので注意。\n\nh[キー] はキーが無いと VOID を返す(Tc602-13 までは空文字列)が、値そのものが VOID や空文字列のこともあるので、「キーが無い」ことを確かめたいときはこの関数を使う。\n\nキーの一致は ハッシュのキーの規則 に従う。key が配列やハッシュのときは警告 W0009 を出す。\n\nExample\n_h = IHASH(\"a\", \"\", 1, \"x\")\nHASH_EXIST(\"a\", _h) // 1\nHASH_EXIST(\"b\", _h) // 0\nHASH_EXIST(\"1\", _h) // 1 (1 と \"1\" は同じキー)\n\nCompatibility\n- YAYA: Tc600-3以降\n\nSee Also\n- HASH_KEYS\n- HASH_SIZE\n- IHASH",
15202
15210
  "url": "https://yaya-shiori.github.io/yaya-docs/functions/HASH_EXIST/",
15203
15211
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/functions/HASH_EXIST.md"
15204
15212
  },
@@ -15252,7 +15260,7 @@
15252
15260
  "title": "IARRAY",
15253
15261
  "source": "yaya_docs",
15254
15262
  "category": "yaya_function",
15255
- "content": "IARRAY\nCategory: 配列操作\n\nSignature\nIARRAY\nIARRAY()\n\nParameters\nなし\n\nReturns\n空の汎用配列\n\nDescription\n空の汎用配列を返す。\n\n主な用途は以下の2つ:\n\n1. 配列の初期化\n\n初期化せずに ,= で要素を追加すると、インデックス0に不要な空文字列要素が生成される。IARRAYで初期化することでこれを防ぐことができる。\n\n2. 要素の削除\n\n配列要素にIARRAYを代入することで、その要素を完全に削除し、後続の要素をシフトすることができる(空文字列を残さない)。\n\nExample\n// 初期化なしの場合(望ましくない結果)\n_myarray ,= \"hoge\"\n_myarray ,= \"hogehoge\"\n// 結果: (\"\",\"hoge\",\"hogehoge\")\n\n// IARRAYで初期化した場合\n_myarray = IARRAY\n_myarray ,= \"hoge\"\n_myarray ,= \"hogehoge\"\n// 結果: (\"hoge\",\"hogehoge\")\n\n// 要素の削除\n_myarray = (\"hoge\",\"hogehoge\")\n_myarray[0] = IARRAY\n// 結果: (\"hogehoge\") — 要素が削除されてシフト\n\nCompatibility\n- YAYA: 初期から利用可能\n- AYA: 5.8以降",
15263
+ "content": "IARRAY\nCategory: 配列操作\n\nSignature\nIARRAY\nIARRAY()\n\nParameters\nなし\n\nReturns\n空の汎用配列\n\nDescription\n空の汎用配列を返す。\n\n主な用途は以下の2つ:\n\n1. 配列の初期化\n\n初期化せずに ,= で要素を追加すると、インデックス0に不要な空文字列要素が生成される。IARRAYで初期化することでこれを防ぐことができる。\n\n2. 要素の削除\n\n配列要素にIARRAYを代入することで、その要素を完全に削除し、後続の要素をシフトすることができる(空文字列を残さない)。ただし Tc603-1以降、その要素が配列やハッシュ(入れ子)のときは、削除されずに空の配列に置き換わる。入れ子の要素を削除するときは範囲指定で _a[1, 1] = IARRAY と書く。\n\nExample\n// 初期化なしの場合(望ましくない結果)\n_myarray ,= \"hoge\"\n_myarray ,= \"hogehoge\"\n// 結果: (\"\",\"hoge\",\"hogehoge\")\n\n// IARRAYで初期化した場合\n_myarray = IARRAY\n_myarray ,= \"hoge\"\n_myarray ,= \"hogehoge\"\n// 結果: (\"hoge\",\"hogehoge\")\n\n// 要素の削除\n_myarray = (\"hoge\",\"hogehoge\")\n_myarray[0] = IARRAY\n// 結果: (\"hogehoge\") — 要素が削除されてシフト\n\nCompatibility\n- YAYA: 初期から利用可能\n- AYA: 5.8以降",
15256
15264
  "url": "https://yaya-shiori.github.io/yaya-docs/functions/IARRAY/",
15257
15265
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/functions/IARRAY.md"
15258
15266
  },
@@ -15270,7 +15278,7 @@
15270
15278
  "title": "INSERT",
15271
15279
  "source": "yaya_docs",
15272
15280
  "category": "yaya_function",
15273
- "content": "INSERT\nCategory: 文字列操作\n\nSignature\nINSERT( src , pos , insert )\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| src | 挿入先の元の文字列 |\n| pos | 挿入位置(0=先頭) |\n| insert | 挿入する文字列 |\n\nReturns\n- 成功時: 挿入後の文字列\n- エラー時: VOID\n\nDescription\n文字列 src の pos で指定した位置に、文字列 insert を挿入する。位置0は文字列の先頭を表す。\n\nCompatibility\n- YAYA: 初期から利用可能\n- AYA: 5.8以降",
15281
+ "content": "INSERT\nCategory: 文字列操作\n\nSignature\nINSERT( src , pos , insert )\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| src | 挿入先の元の文字列 |\n| pos | 挿入位置(0=先頭)。負の値を指定すると末尾からのオフセットとして扱われる(Tc574-8 / Tc603-1以降) |\n| insert | 挿入する文字列 |\n\nReturns\n- 成功時: 挿入後の文字列\n- エラー時: VOID\n\nDescription\n文字列 src の pos で指定した位置に、文字列 insert を挿入する。位置0は文字列の先頭を表す。\n\npos が負の値のときは、src の文字数を足した位置に挿入する(-1 なら最後の1文字の前)。それでも負になるときは先頭に、src の文字数より大きいときは末尾に挿入する。\n\nINSERT('abc', 1, 'X') // aXbc\nINSERT('abc', -1, 'X') // abXc\nINSERT('abc', 10, 'X') // abcX\nINSERT('abc', -10, 'X') // Xabc\n\nCompatibility\n- YAYA: 初期から利用可能\n- AYA: 5.8以降\n- Tc574-8 / Tc603-1: 負の位置を末尾から数え、範囲外の位置を先頭か末尾に寄せるようにした(それまではエラーで処理が中断していた)。insert に数値を渡したときも挿入するようにした(それまでは何も挿入されなかった)",
15274
15282
  "url": "https://yaya-shiori.github.io/yaya-docs/functions/INSERT/",
15275
15283
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/functions/INSERT.md"
15276
15284
  },
@@ -15342,7 +15350,7 @@
15342
15350
  "title": "LICENSE",
15343
15351
  "source": "yaya_docs",
15344
15352
  "category": "yaya_function",
15345
- "content": "LICENSE\nCategory: メタ操作・特殊関数\n\nSignature\nLICENSE()\nLICENSE\n\nParameters\nなし\n\nReturns\nYAYAのライセンス文字列を格納した汎用配列。各エントリは改行で区切られる。\n\nDescription\nYAYAのライセンス文字列を返します。YAYA 本体に続けて、組み込んでいるライブラリ(MT19937、parson、TinyXML-2)のライセンス文も含みます。\n\nCompatibility\n- YAYA: Tc530-1以降で使用可能\n- Tc601-1: parson と TinyXML-2 のライセンス文を追加した\n\nSee Also\n- LETTONAME\n- LINT.GetFuncUsedBy",
15353
+ "content": "LICENSE\nCategory: メタ操作・特殊関数\n\nSignature\nLICENSE()\nLICENSE\n\nParameters\nなし\n\nReturns\nYAYAのライセンス文字列を格納した汎用配列。各エントリは改行で区切られる。\n\nDescription\nYAYAのライセンス文字列を返します。YAYA 本体に続けて、組み込んでいるライブラリ(MT19937、parson、TinyXML-2、SQLite)のライセンス文も含みます。\n\nCompatibility\n- YAYA: Tc530-1以降で使用可能\n- Tc601-1: parson と TinyXML-2 のライセンス文を追加した\n- Tc602-11: SQLite(パブリックドメイン)の記載を追加した\n\nSee Also\n- LETTONAME\n- LINT.GetFuncUsedBy",
15346
15354
  "url": "https://yaya-shiori.github.io/yaya-docs/functions/LICENSE/",
15347
15355
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/functions/LICENSE.md"
15348
15356
  },
@@ -15549,7 +15557,7 @@
15549
15557
  "title": "READFMO",
15550
15558
  "source": "yaya_docs",
15551
15559
  "category": "yaya_function",
15552
- "content": "READFMO\nCategory: システム情報\n\n> 【Windows専用】 この関数はWindows用にコンパイルされたyayaでしか動作しません。\n\nSignature\nREADFMO( [ name ] [ , charset ] )\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| name | (省略可)FMOの識別子。省略時は \"Sakura\" |\n| charset | (省略可)文字エンコーディング。省略時はOSのデフォルト。Tc569-13で追加。 |\n\nReturns\n- 成功: FMOの内容を文字列として返す\n- 失敗: VOID(何も返さない)\n\nDescription\nファイルマッピングオブジェクト(FMO)の内容を文字列として取得します。FMOの先頭4バイトはサイズを表す符号なし整数であり、読み取り時にはその4バイトが除去されます。FMO内にnullバイト(0x00)が存在する場合の動作は未定義です。\n\nCompatibility\n- YAYA: バージョンTc524-1で導入",
15560
+ "content": "READFMO\nCategory: システム情報\n\n> 【Windows専用】 この関数はWindows用にコンパイルされたyayaでしか動作しません。\n\nSignature\nREADFMO( [ name ] [ , charset ] )\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| name | (省略可)FMOの識別子。省略時は \"Sakura\" |\n| charset | (省略可)文字エンコーディング(文字コードの名前)。省略時はOSのデフォルト。Tc569-13で追加。不正な値なら警告 W0012 を出して何も返さない |\n\nReturns\n- 成功: FMOの内容を文字列として返す\n- 失敗: VOID(何も返さない)\n\nDescription\nファイルマッピングオブジェクト(FMO)の内容を文字列として取得します。FMOの先頭4バイトはサイズを表す符号なし整数であり、読み取り時にはその4バイトが除去されます。FMO内にnullバイト(0x00)が存在する場合の動作は未定義です。\n\nCompatibility\n- YAYA: バージョンTc524-1で導入\n- Tc574-8 / Tc603-1: 知らない文字コードの名前や不正なIDを渡すと、警告 W0012 を出して何も返さないようにした(それまでは OS デフォルトとして読んでいた)",
15553
15561
  "url": "https://yaya-shiori.github.io/yaya-docs/functions/READFMO/",
15554
15562
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/functions/READFMO.md"
15555
15563
  },
@@ -15711,7 +15719,7 @@
15711
15719
  "title": "SAVEVAR",
15712
15720
  "source": "yaya_docs",
15713
15721
  "category": "yaya_function",
15714
- "content": "SAVEVAR\nCategory: メタ操作・特殊関数\n\nSignature\nSAVEVAR( [path] )\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| path | 保存先ファイル名(省略時はDLL名 + \"_variable.cfg\"、例: yaya_variable.cfg) |\n\nReturns\nなし(VOID)\n\nDescription\n変数を保存します。unload時に行われる処理と同等です。\n\n保存先ファイルを任意のパスに指定することもできます。\n\n保存形式\n\n1行に1変数を、次の形式で書き出します。\n\n変数名,値,\"デリミタ\",watcher|setter|destorier\n\n値の書式は次のとおりです。\n\n| 型 | 書式 | 例 |\n|---|---|---|\n| 整数・実数 | そのまま | 5、2.500000 |\n| 文字列 | \"...\"(\" と制御文字はエスケープ) | \"abc\" |\n| 汎用配列 | 要素を : で区切る。要素が1つなら末尾に :IARRAY、空なら IARRAY:IARRAY | 1:\"b\":2.500000 |\n| ハッシュ(Tc600-3以降) | キー=値 を : で区切る。要素が1つなら末尾に :IHASH=IHASH、空なら IHASH=IHASH:IHASH=IHASH | \"a\"=1:\"b\"=\"x\" |\n| 要素・キー・値の VOID | IVOID | \"v\"=IVOID |\n| 入れ子の要素(Tc600-3以降) | 配列・ハッシュの書式を IARRAY{...} / IHASH{...} で囲む | \"l\"=IARRAY{1:2} |\n\nTc600-3以降のハッシュや入れ子の例:\n\nh,\"a\"=1:\"l\"=IARRAY{1:2}:\"n\"=IHASH{\"x\"=1:\"y\"=\"s\"},\",\",\nv,IHASH{\"k\"=1:IHASH=IHASH}:IARRAY,\",\",\ne,\"e\"=IHASH{IHASH=IHASH:IHASH=IHASH}:\"ea\"=IARRAY{IARRAY:IARRAY},\",\",\n\n入れ子の内側も同じ規則で書き出すので、何段入れ子にしても元の値に戻せます。\n\nハッシュや入れ子を含まない変数の書式は、Tc600-3 より前と同じです。Tc600-3以降で保存したファイルを古いバージョンで読むと、ハッシュや入れ子を含む変数だけが崩れます(600 での変更点)。\n\nCompatibility\n- YAYA: 初期バージョンより対応\n- AYA: 5.8以降\n- Tc600-3: ハッシュと入れ子の値の保存に対応\n\nSee Also\n- RESTOREVAR",
15722
+ "content": "SAVEVAR\nCategory: メタ操作・特殊関数\n\nSignature\nSAVEVAR( [path] )\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| path | 保存先ファイル名(省略時はDLL名 + \"_variable.cfg\"、例: yaya_variable.cfg) |\n\nReturns\nなし(VOID)\n\nDescription\n変数を保存します。unload時に行われる処理と同等です。\n\n保存先ファイルを任意のパスに指定することもできます。\n\n保存形式\n\n1行に1変数を、次の形式で書き出します。\n\n変数名,値,\"デリミタ\",watcher|setter|destorier\n\n値の書式は次のとおりです。\n\n| 型 | 書式 | 例 |\n|---|---|---|\n| 整数 | そのまま | 5 |\n| 実数 | 元の値に戻せる桁数の小数(指数は使わない)。無限大と NaN は inf -inf nan(Tc574-8 / Tc603-1以降) | 2.5、0.0000001 |\n| 文字列 | \"...\"(\" と制御文字はエスケープ) | \"abc\" |\n| 汎用配列 | 要素を : で区切る。要素が1つなら末尾に :IARRAY、空なら IARRAY:IARRAY | 1:\"b\":2.5 |\n| ハッシュ(Tc600-3以降) | キー=値 を : で区切る。要素が1つなら末尾に :IHASH=IHASH、空なら IHASH=IHASH:IHASH=IHASH | \"a\"=1:\"b\"=\"x\" |\n| 要素・キー・値の VOID | IVOID | \"v\"=IVOID |\n| 入れ子の要素(Tc600-3以降) | 配列・ハッシュの書式を IARRAY{...} / IHASH{...} で囲む | \"l\"=IARRAY{1:2} |\n\nTc600-3以降のハッシュや入れ子の例:\n\nh,\"a\"=1:\"l\"=IARRAY{1:2}:\"n\"=IHASH{\"x\"=1:\"y\"=\"s\"},\",\",\nv,IHASH{\"k\"=1:IHASH=IHASH}:IARRAY,\",\",\ne,\"e\"=IHASH{IHASH=IHASH:IHASH=IHASH}:\"ea\"=IARRAY{IARRAY:IARRAY},\",\",\n\n入れ子の内側も同じ規則で書き出すので、何段入れ子にしても元の値に戻せます。\n\nハッシュや入れ子を含まない変数の書式は、Tc600-3 より前と同じです。Tc600-3以降で保存したファイルを古いバージョンで読むと、ハッシュや入れ子を含む変数だけが崩れます(600 での変更点)。\n\nCompatibility\n- YAYA: 初期バージョンより対応\n- AYA: 5.8以降\n- Tc600-3: ハッシュと入れ子の値の保存に対応\n- Tc574-8 / Tc603-1: 実数を元の値に戻せる桁数で保存するようにした(それまでは小数6桁に丸めていて、無限大と NaN は読み戻せなかった)\n\nSee Also\n- RESTOREVAR",
15715
15723
  "url": "https://yaya-shiori.github.io/yaya-docs/functions/SAVEVAR/",
15716
15724
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/functions/SAVEVAR.md"
15717
15725
  },
@@ -15729,7 +15737,7 @@
15729
15737
  "title": "SETGLOBALDEFINE",
15730
15738
  "source": "yaya_docs",
15731
15739
  "category": "yaya_function",
15732
- "content": "SETGLOBALDEFINE\nCategory: メタ操作・特殊関数\n\nSignature\nSETGLOBALDEFINE( define_name , define_value )\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| define_name | #globaldefine で定義する名前 |\n| define_value | #globaldefine で割り当てる値 |\n\nReturns\n- 1: 成功\n- 0: 失敗\n\nDescription\nメモリ上の \"_RUNTIME_DIC_\" という名前の辞書に #globaldefine を記述したのと同等の効果をもたらします。\n\nCompatibility\n- YAYA: Tc562-1以降\n\nSee Also\n- ISGLOBALDEFINE\n- UNDEFGLOBALDEFINE\n- PROCESSGLOBALDEFINE",
15740
+ "content": "SETGLOBALDEFINE\nCategory: メタ操作・特殊関数\n\nSignature\nSETGLOBALDEFINE( define_name , define_value )\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| define_name | #globaldefine で定義する名前 |\n| define_value | #globaldefine で割り当てる値 |\n\nReturns\n- 1: 成功\n- 0: 失敗\n\nDescription\nメモリ上の _RUNTIME_DIC_ という名前の辞書に #globaldefine を記述したのと同等の効果をもたらします。\n\nCompatibility\n- YAYA: Tc562-1以降\n\nSee Also\n- ISGLOBALDEFINE\n- UNDEFGLOBALDEFINE\n- PROCESSGLOBALDEFINE",
15733
15741
  "url": "https://yaya-shiori.github.io/yaya-docs/functions/SETGLOBALDEFINE/",
15734
15742
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/functions/SETGLOBALDEFINE.md"
15735
15743
  },
@@ -15805,6 +15813,42 @@
15805
15813
  "url": "https://yaya-shiori.github.io/yaya-docs/functions/SPLITPATH/",
15806
15814
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/functions/SPLITPATH.md"
15807
15815
  },
15816
+ {
15817
+ "id": "yaya:functions/SQLCLOSE",
15818
+ "title": "SQLCLOSE",
15819
+ "source": "yaya_docs",
15820
+ "category": "yaya_function",
15821
+ "content": "SQLCLOSE\nCategory: データベース\n\nSignature\nSQLCLOSE( path )\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| path | SQLOPEN で開いたデータベースのパス |\n\nReturns\n返り値はない(VOID)。\n\nDescription\nSQLOPEN で開いたデータベースを閉じる。終わっていないトランザクションはロールバックされる。\n\n閉じ忘れたデータベースは unload のときに自動で閉じる。\n\nエラー\n| 状況 | 警告 | GETLASTERROR |\n|------|------|------|\n| 引数がない | W0008 | 8 |\n| path が文字列でない | W0009 | 9 |\n| 開いていない | W0015 | 15 |\n\nExample\nSQLOPEN(\"ghost.db\")\nSQLEXEC(\"ghost.db\", \"INSERT INTO talk(text) VALUES(?)\", \"こんにちは\")\nSQLCLOSE(\"ghost.db\")\n\nCompatibility\n- YAYA: Tc602-11以降\n\nSee Also\n- SQLOPEN\n- SQLEXEC\n- SQLQUERY",
15822
+ "url": "https://yaya-shiori.github.io/yaya-docs/functions/SQLCLOSE/",
15823
+ "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/functions/SQLCLOSE.md"
15824
+ },
15825
+ {
15826
+ "id": "yaya:functions/SQLEXEC",
15827
+ "title": "SQLEXEC",
15828
+ "source": "yaya_docs",
15829
+ "category": "yaya_function",
15830
+ "content": "SQLEXEC\nCategory: データベース\n\nSignature\nSQLEXEC( path, sql [, param...] )\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| path | SQLOPEN で開いたデータベースのパス |\n| sql | 実行する SQL。; で区切って複数の文を書ける |\n| param | SQL のパラメータに入れる値(省略可。下記の パラメータ) |\n\nReturns\n- 成功時: INSERT・UPDATE・DELETE で変更された行数の合計(それ以外の文だけなら 0)\n- 失敗時: -1\n\nDescription\nSQL を実行する。表を作る、行を追加・変更・削除する、トランザクションを始める、といった結果の行を使わない SQL に使う。SELECT の結果を受け取るときは SQLQUERY を使う(SQLEXEC で SELECT を実行すると、結果の行は捨てられる)。\n\nsql に複数の文があれば、先頭から順に実行する。途中の文でエラーになったら、そこで止まる。それまでに実行した文は取り消されないので、まとめて取り消したいときはトランザクション(BEGIN 〜 COMMIT)の中で実行する。\n\nパラメータ\nSQL の中の ?(または ?1 のような番号付き)や :名前 @名前 $名前 の位置に値を入れられる。値を SQL の文字列に直接埋め込むと、' を含む文字列でエラーになったり、意図しない SQL が実行されたりする(SQL インジェクション)。外から受け取った文字列は必ずパラメータで渡すこと。\n\nparam の渡し方は2通りある。\n\n1. 値を並べる: param がすべて整数・実数・文字列・VOID のとき、1回だけ実行する。? に先頭から順に入る\n2. 1回分ずつ配列かハッシュにする: param がすべて配列かハッシュのとき、1つを1回分として、その数だけ実行する\n - ハッシュ: :名前 @名前 $名前 に、キーが「名前」の値が入る\n - 配列: ? に要素が先頭から順に入る\n\n値が足りないパラメータや、ハッシュにキーが無いパラメータには NULL が入る。値とハッシュ・配列を混ぜて渡すと W0009 になる。\n\n逆に、値がパラメータより多いときは、余った値は使われず、W0030 の警告が出る(実行はする)。1 の形では param の数が、2 の形では配列の要素数が、? の数(?3 のような番号付きなら最大の番号)より多いと警告になる。ハッシュは使われなかったキーがあっても警告しない。\n\n関数に配列を渡すと、いちばん外側の配列は引数に展開される(値の入れ子と多次元代入)。そのため、値の配列 (1, \"a\") を渡すと 1 の「値を並べる」になり、ハッシュの配列や、配列の配列(PARSEJSON などで得たもの)を渡すと 2 の「1回分ずつ」になる。\n\n(1, 2), (3, 4) と書いたり、値の配列の変数を2つ並べたりしても、, で1つの配列につながるので「1回分ずつ」にはならず、1 の形で1回だけ実行される(? が 2 つなら 3 と 4 は使われず、W0030 になる)。1回分ずつにしたいときは、配列の配列やハッシュの配列を作って渡す。\n\nsql に複数の文があるときは、どの文にも同じパラメータが使われる(? の番号は文ごとに 1 から数える)。前の文の続きの値が次の文に入るわけではない。INSERT INTO t VALUES (?); INSERT INTO u VALUES (?) に \"first\", \"second\" を渡すと、どちらの文にも \"first\" が入り、\"second\" は使われない(W0030)。文ごとに違う値を入れたいときは、文を分けて実行するか、ハッシュで :名前 を使う。\n\n2 の形で多くの行を追加するときは、BEGIN と COMMIT で囲むと、1行ずつファイルに書き込まれないので速い。\n\n値の対応\n| YAYA | SQLite | YAYA に戻したとき |\n|------|--------|------|\n| 整数 | INTEGER | 整数 |\n| 実数 | REAL | 実数 |\n| 文字列 | TEXT(UTF-8) | 文字列 |\n| 空(VOID) | NULL | 空(VOID) |\n| ― | BLOB | 16進数の文字列(hex() と同じ大文字) |\n\n- 空文字列 \"\" は NULL ではなく、長さ 0 の TEXT になる。NULL を入れたいときは、パラメータを省くか、ハッシュにそのキーを入れない\n- 配列やハッシュは1つのパラメータに入れられない(W0009)。JSON として保存したいときは DUMPJSON で文字列にしてから渡す。SQLite の JSON 関数(json_extract や ->>、json_each など)で中身を検索できる\n- BLOB を入れたいときは、16進数の文字列を渡して SQL 側で unhex(?) にする\n\n準備済みの文の再利用\n同じ sql の文字列で実行すると、前回 SQLite が解析した結果(準備済みの文)を使い回すので速い。パラメータで値を変えながら同じ sql を何度も実行するとよい。値を SQL の文字列に埋め込むと毎回別の sql になり、使い回せない。\n\nエラー\n| 状況 | 警告 | GETLASTERROR |\n|------|------|------|\n| 引数が足りない | W0008 | 8 |\n| path または sql が文字列でない、param が上記のどちらの形でもない | W0009 | 9 |\n| データベースを開いていない | W0015 | 15 |\n| SQL の実行に失敗した(文法の誤り、制約違反、読み取り専用など) | W0029 | 29 |\n| param の値がパラメータより多い(実行は成功する) | W0030 | 30 |\n\nW0029 の警告には SQLite のエラーメッセージが付く(例: SQLEXEC : UNIQUE constraint failed: talk.id)。W0030 の警告にはパラメータの数と値の数が付く(例: SQLEXEC : parameters 2, values 4)。\n\nW0030 は実行に成功したときに出るので、返値は成功時と同じ(変更された行数)。GETLASTERROR は成功しても 0 に戻らないので、W0030 を調べるときは先に SETLASTERROR(0) しておく。\n\nExample\nSQLOPEN(\"ghost.db\")\nSQLEXEC(\"ghost.db\", \"CREATE TABLE IF NOT EXISTS talk(id INTEGER PRIMARY KEY, text TEXT, score REAL); CREATE INDEX IF NOT EXISTS talk_score ON talk(score)\")\n\n// 値を並べる\nSQLEXEC(\"ghost.db\", \"INSERT INTO talk(text, score) VALUES(?, ?)\", \"こんにちは\", 1.5) // 1\n\n// ハッシュで名前を指定する\n_h = IHASH(\"text\", \"こんばんは\", \"score\", 2)\nSQLEXEC(\"ghost.db\", \"INSERT INTO talk(text, score) VALUES(:text, :score)\", _h) // 1\n\n// ハッシュの配列で、まとめて追加する\n_rows = (IHASH(\"text\", \"a\", \"score\", 3), IHASH(\"text\", \"b\", \"score\", 4))\nSQLEXEC(\"ghost.db\", \"BEGIN\")\nSQLEXEC(\"ghost.db\", \"INSERT INTO talk(text, score) VALUES(:text, :score)\", _rows) // 2\nSQLEXEC(\"ghost.db\", \"COMMIT\")\n\nSQLEXEC(\"ghost.db\", \"UPDATE talk SET score = score + 1 WHERE score >= ?\", 3) // 2\nSQLEXEC(\"ghost.db\", \"DELETE FROM talk WHERE text = ?\", \"a\") // 1\n\n// 直前に追加した行の id は SQL の関数で得る\nSQLQUERY(\"ghost.db\", \"SELECT last_insert_rowid() AS id\")[0][\"id\"]\n\nCompatibility\n- YAYA: Tc602-11以降\n- Tc602-13: 値がパラメータより多いときに警告 W0030 を出すようにした\n\nSee Also\n- SQLQUERY\n- SQLOPEN\n- SQLCLOSE\n- DUMPJSON",
15831
+ "url": "https://yaya-shiori.github.io/yaya-docs/functions/SQLEXEC/",
15832
+ "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/functions/SQLEXEC.md"
15833
+ },
15834
+ {
15835
+ "id": "yaya:functions/SQLOPEN",
15836
+ "title": "SQLOPEN",
15837
+ "source": "yaya_docs",
15838
+ "category": "yaya_function",
15839
+ "content": "SQLOPEN\nCategory: データベース\n\nSignature\nSQLOPEN( path [, mode] )\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| path | データベースファイルのパス(yaya.dll からの相対パス、または絶対パス)。\":memory:\" ならメモリ上のデータベース |\n| mode | 開き方(省略可。下記参照)。省略時は \"rwc\" |\n\nmode\n| mode | 動作 |\n|------|------|\n| \"rwc\" | 読み書き。ファイルが無ければ作る(省略時) |\n| \"rw\" | 読み書き。ファイルが無ければ失敗する |\n| \"r\" | 読み取り専用。ファイルが無ければ失敗する |\n\nReturns\n- 1: 成功\n- 0: 失敗\n- 2: すでに開いている\n\nDescription\nSQLite のデータベースを開く。開いたデータベースには、SQLEXEC と SQLQUERY で SQL を実行する。\n\nFOPEN と同じく、データベースは開いたときのパスで識別する。以降の SQLEXEC・SQLQUERY・SQLCLOSE には、SQLOPEN と同じ書き方のパスを渡す。\"data.db\" と \"./data.db\" のように書き方が違うと、同じファイルでも別のものとして扱われ、2つ目の接続が開く(SQLite のロックで守られるので中身は壊れないが、閉じるときはそれぞれ閉じる必要がある)。\n\n- 複数のデータベースを同時に開ける\n- \":memory:\" のデータベースは1つだけ開ける。閉じると中身は消える\n- 開いたデータベースは、SQLCLOSE で閉じるか、unload のときに自動で閉じる。終わっていないトランザクションはロールバックされる\n- 別のプロセス(ほかのゴーストなど)が書き込み中でロックされているときは、最大1秒待つ。それでも解除されなければ、その SQL はエラー(database is locked)になる\n\nデータベースの中身(表の作り方、ジャーナルの方式など)は SQL で指定する。たとえば書き込みの多い用途では、開いた直後に SQLEXEC(path, \"PRAGMA journal_mode=WAL\") を実行しておくとよい。\n\nSQLite の拡張機能の読み込み(load_extension)は使えない。\n\nエラー\n| 状況 | 警告 | GETLASTERROR |\n|------|------|------|\n| 引数がない | W0008 | 8 |\n| path または mode が文字列でない | W0009 | 9 |\n| path が空文字列 | W0010 | 10 |\n| mode が不正 | W0012 | 12 |\n| データベースを開けない | W0029 | 29 |\n\nW0029 の警告には SQLite のエラーメッセージが付く。\n\nExample\nif SQLOPEN(\"ghost.db\") == 0 {\n // 開けなかった\n}\nSQLEXEC(\"ghost.db\", \"CREATE TABLE IF NOT EXISTS talk(id INTEGER PRIMARY KEY, text TEXT)\")\n\nSQLOPEN(\":memory:\") // メモリ上の作業用データベース\nSQLOPEN(\"ref.db\", \"r\") // 読み取り専用\n\nCompatibility\n- YAYA: Tc602-11以降\n\nSee Also\n- SQLCLOSE\n- SQLEXEC\n- SQLQUERY",
15840
+ "url": "https://yaya-shiori.github.io/yaya-docs/functions/SQLOPEN/",
15841
+ "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/functions/SQLOPEN.md"
15842
+ },
15843
+ {
15844
+ "id": "yaya:functions/SQLQUERY",
15845
+ "title": "SQLQUERY",
15846
+ "source": "yaya_docs",
15847
+ "category": "yaya_function",
15848
+ "content": "SQLQUERY\nCategory: データベース\n\nSignature\nSQLQUERY( path, sql [, param...] )\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| path | SQLOPEN で開いたデータベースのパス |\n| sql | 実行する SQL(主に SELECT) |\n| param | SQL のパラメータに入れる値(省略可。SQLEXEC と同じ) |\n\nReturns\n- 成功時: 結果の行の汎用配列。1行が「列名 → 値」のハッシュになる。行が無ければ空の汎用配列\n- 失敗時: 空(VOID)\n\nDescription\nSQL を実行して、結果の行を返す。パラメータの渡し方、値の対応、エラーは SQLEXEC と同じ。\n\n- 列名は SELECT に書いた名前になる。式の列や、同じ名前の列が複数あるとき(a.id と b.id など)は、AS で別の名前を付けること。同じ名前の列は後のものだけが残る\n- NULL の列は空(VOID)になる。ハッシュにキーは残る\n- sql に複数の文があれば、結果の行を順につなげて返す。1回分ずつ配列・ハッシュで param を渡したときも、すべての回の行をつなげて返す\n- 行はすべてメモリに読み込んでから返す。行の多い表を読むときは LIMIT や WHERE で絞ること。SQLite の処理中は SHIORI の応答が止まる\n\n空の結果(空の汎用配列)と失敗(VOID)は GETTYPE で見分けられる(それぞれ 4 と 0)。\n\nExample\nSQLOPEN(\"ghost.db\")\n\n_rows = SQLQUERY(\"ghost.db\", \"SELECT id, text, score FROM talk WHERE score >= ? ORDER BY score DESC LIMIT 10\", 2)\nARRAYSIZE(_rows) // 行数\n_rows[0][\"text\"] // 1行目の text\n\nforeach _rows; _r {\n // _r[\"id\"] _r[\"text\"] _r[\"score\"]\n}\n\n// 集計には AS で名前を付ける\nSQLQUERY(\"ghost.db\", \"SELECT count(*) AS n, avg(score) AS avg FROM talk\")[0][\"n\"]\n\n// JSON で保存した列を SQLite の JSON 関数で検索する\nSQLEXEC(\"ghost.db\", \"CREATE TABLE IF NOT EXISTS ev(id TEXT PRIMARY KEY, json TEXT)\")\n_ev = PARSEJSON('{\"id\":\"abc\",\"tags\":[[\"p\",\"xyz\"],[\"e\",\"def\"]]}')\nSQLEXEC(\"ghost.db\", \"INSERT OR IGNORE INTO ev VALUES(?, ?)\", _ev[\"id\"], DUMPJSON(_ev))\nSQLQUERY(\"ghost.db\", \"SELECT ev.id, t.value->>1 AS v FROM ev, json_each(ev.json, '$.tags') t WHERE t.value->>0 = ?\", \"e\")\n// → 要素1つ:IHASH(\"id\", \"abc\", \"v\", \"def\")\n\nCompatibility\n- YAYA: Tc602-11以降\n- Tc602-13: 値がパラメータより多いときに警告 W0030 を出すようにした\n\nSee Also\n- SQLEXEC\n- SQLOPEN\n- SQLCLOSE\n- PARSEJSON",
15849
+ "url": "https://yaya-shiori.github.io/yaya-docs/functions/SQLQUERY/",
15850
+ "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/functions/SQLQUERY.md"
15851
+ },
15808
15852
  {
15809
15853
  "id": "yaya:functions/SQRT",
15810
15854
  "title": "SQRT",
@@ -15828,7 +15872,7 @@
15828
15872
  "title": "STRDECODE",
15829
15873
  "source": "yaya_docs",
15830
15874
  "category": "yaya_function",
15831
- "content": "STRDECODE\nCategory: 文字列操作\n\nSignature\nSTRDECODE(string [, code] [, type])\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| string | デコード対象の文字列 |\n| code | 変換に使う文字コードID(省略時は0) |\n| type | デコード形式。url(URLエンコード)または base64(Base64)を指定。省略時は url |\n\nReturns\n- 成功時: デコードされた文字列\n- 失敗時: 0\n\nDescription\n指定した文字コードとエンコード形式で文字列をデコードします。文字コードIDについてはマニュアルの文字コード一覧を参照してください。\n\nCompatibility\n- YAYA: Tc521-1以降(Tc532-1で GETSTRURLDE­CODE から改名)\n\nSee Also\n- STRENCODE(エンコード関数)",
15875
+ "content": "STRDECODE\nCategory: 文字列操作\n\nSignature\nSTRDECODE(string [, code] [, type])\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| string | デコード対象の文字列 |\n| code | 変換に使う文字コードID(省略時は0)、または文字コードの名前(文字コードの名前)。知らない名前なら警告 W0012 を出して 0 を返す |\n| type | デコード形式。url(URLエンコード)または base64(Base64)を指定。省略時は url |\n\nReturns\n- 成功時: デコードされた文字列\n- 失敗時: 0\n\nDescription\n指定した文字コードとエンコード形式で文字列をデコードします。文字コードIDについてはマニュアルの文字コード一覧を参照してください。\n\nCompatibility\n- YAYA: Tc521-1以降(Tc532-1で GETSTRURLDE­CODE から改名)\n- Tc574-8 / Tc603-1: 知らない文字コードの名前を渡すと、警告 W0012 を出して0 を返すようにした(それまでは警告を出さずに OS デフォルトとして扱っていた)\n\nSee Also\n- STRENCODE(エンコード関数)",
15832
15876
  "url": "https://yaya-shiori.github.io/yaya-docs/functions/STRDECODE/",
15833
15877
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/functions/STRDECODE.md"
15834
15878
  },
@@ -15846,7 +15890,7 @@
15846
15890
  "title": "STRENCODE",
15847
15891
  "source": "yaya_docs",
15848
15892
  "category": "yaya_function",
15849
- "content": "STRENCODE\nCategory: 文字列操作\n\nSignature\nSTRENCODE(string [, code] [, type])\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| string | エンコード対象の文字列 |\n| code | エンコードに使う文字コードID(省略時は0) |\n| type | エンコード形式。url(URLエンコード)、form(スペースを + に変換するフォームエンコード)、base64(Base64)を指定。省略時は url |\n\nReturns\n- 成功時: エンコードされた文字列\n- 失敗時: 0\n\nDescription\n指定した文字コードとエンコード形式で文字列をエンコードします。文字コードIDについてはマニュアルの文字コード一覧を参照してください。\n\nCompatibility\n- YAYA: Tc521-1以降(Tc532-1で GETSTRURLENCODE から改名)\n\nSee Also\n- STRDECODE(デコード関数)",
15893
+ "content": "STRENCODE\nCategory: 文字列操作\n\nSignature\nSTRENCODE(string [, code] [, type])\n\nParameters\n| Parameter | Description |\n|-----------|-------------|\n| string | エンコード対象の文字列 |\n| code | エンコードに使う文字コードID(省略時は0)、または文字コードの名前(文字コードの名前)。知らない名前なら警告 W0012 を出して 0 を返す |\n| type | エンコード形式。url(URLエンコード)、form(スペースを + に変換するフォームエンコード)、base64(Base64)を指定。省略時は url |\n\nReturns\n- 成功時: エンコードされた文字列\n- 失敗時: 0\n\nDescription\n指定した文字コードとエンコード形式で文字列をエンコードします。文字コードIDについてはマニュアルの文字コード一覧を参照してください。\n\nCompatibility\n- YAYA: Tc521-1以降(Tc532-1で GETSTRURLENCODE から改名)\n- Tc574-8 / Tc603-1: 知らない文字コードの名前を渡すと、警告 W0012 を出して0 を返すようにした(それまでは警告を出さずに OS デフォルトとして扱っていた)\n\nSee Also\n- STRDECODE(デコード関数)",
15850
15894
  "url": "https://yaya-shiori.github.io/yaya-docs/functions/STRENCODE/",
15851
15895
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/functions/STRENCODE.md"
15852
15896
  },
@@ -16035,7 +16079,7 @@
16035
16079
  "title": "基礎設定",
16036
16080
  "source": "yaya_docs",
16037
16081
  "category": "yaya_grammar",
16038
- "content": "基礎設定\n\n概要\n\nYAYAはDLL名に .txt を付加した設定ファイル(デフォルト: yaya.txt)を必要とする。このファイルはASCIIエンコーディングを使用し、コンマ区切りのコマンドとパラメータで構成される。\n\nコメント: // 以降の行および /* ~ */ 間の内容は無視される。\n\n設定例\n\ndic, basis.dic\ncharset, UTF-8\ncharset.dic, Shift_JIS\nlog, executelog.txt\n\n文字コード設定\n\ncharset でデフォルトエンコーディングを指定する(Shift_JIS / UTF-8 / OSデフォルト)。\n\n| 設定キー | 説明 |\n|---------|------|\n| charset | デフォルト文字コード |\n| charset.dic | 辞書ファイルの文字コード |\n| charset.setting | 設定ファイルの文字コード |\n| charset.output | request関数のI/O文字コード |\n| charset.log | ログファイルの文字コード |\n| charset.file | ファイルI/Oの文字コード |\n| charset.save | グローバル変数保存ファイルの文字コード |\n| charset.extension | 外部DLL通信の文字コード |\n\n辞書ファイルの読み込み\n\n辞書ファイルはプログラム動作を定義するスクリプトソースファイル。\n\n| コマンド | 説明 |\n|---------|------|\n| dic, ファイル名 | 辞書を読み込む |\n| dicif, ファイル名 | ファイルが存在する場合のみ読み込む |\n| dicdir, ディレクトリ名 | 指定ディレクトリ内のすべてのファイルを読み込む |\n\nログ・デバッグ設定\n\n| 設定キー | 説明 |\n|---------|------|\n| log, ファイル名 | 実行ログを有効化 |\n| iolog, [on|off] | I/Oログの制御(デフォルト: on) |\n| iolog.filter.keyword | 指定キーワードに一致するリクエストをログから除外 |\n| fncdepth, [深さ] | 関数呼び出し深さの上限(デフォルト: 32) |\n| looplimit, [回数] | ループ繰り返し回数の上限(デフォルト: 10000) |\n\nその他の設定\n\n| 設定キー | 説明 |\n|---------|------|\n| basepath, ディレクトリ | ファイル操作のベースディレクトリ |\n| include, ファイル名 | 外部設定ファイルのインクルード |\n| save.encode, [on|off] | セーブファイルの暗号化 |\n| save.auto, [on|off] | 変数の自動保存を有効化 |\n| maxlognum, [数] | エラーログの最大エントリ数(デフォルト: 256) |\n\n緊急設定\n\nバージョン Tc555-1+ では、辞書読み込み失敗時のフォールバック設定をサポート。辞書読み込みが失敗すると、nullを返す前に yaya_emerg.txt の読み込みを試みる。",
16082
+ "content": "基礎設定\n\n概要\n\nYAYAはDLL名に .txt を付加した設定ファイル(デフォルト: yaya.txt)を読み込む。このファイルはASCIIエンコーディングを使用し、コンマ区切りのコマンドとパラメータで構成される。\n\n設定ファイルが無い場合や、読み込む辞書がひとつも無い場合は、シェルモードで動作する(Tc574-7 / Tc602-12以降。それまでは設定ファイルが無いとエラー E0005 で動作を止めていた)。\n\nコメント: // 以降の行および /* ~ */ 間の内容は無視される。\n\n設定例\n\ndic, basis.dic\ncharset, UTF-8\ncharset.dic, Shift_JIS\nlog, executelog.txt\n\n文字コード設定\n\ncharset でデフォルトエンコーディングを指定する(Shift_JIS / UTF-8 / OSデフォルト)。\n\n| 設定キー | 説明 |\n|---------|------|\n| charset | デフォルト文字コード |\n| charset.dic | 辞書ファイルの文字コード |\n| charset.setting | 設定ファイルの文字コード |\n| charset.output | request関数のI/O文字コード |\n| charset.log | ログファイルの文字コード |\n| charset.file | ファイルI/Oの文字コード |\n| charset.save | グローバル変数保存ファイルの文字コード |\n| charset.extension | 外部DLL通信の文字コード |\n\n辞書ファイルの読み込み\n\n辞書ファイルはプログラム動作を定義するスクリプトソースファイル。\n\n| コマンド | 説明 |\n|---------|------|\n| dic, ファイル名 | 辞書を読み込む |\n| dicif, ファイル名 | ファイルが存在する場合のみ読み込む |\n| dicdir, ディレクトリ名 | 指定ディレクトリ内のすべてのファイルを読み込む |\n\nこれらの指定が無い場合や、dicif の対象がすべて存在しない、dicdir のディレクトリが空、などで読み込む辞書がひとつも無い場合は、シェルモードで動作する(Tc574-7 / Tc602-12以降)。\n\nログ・デバッグ設定\n\n| 設定キー | 説明 |\n|---------|------|\n| log, ファイル名 | 実行ログを有効化 |\n| iolog, [on|off] | I/Oログの制御(デフォルト: on) |\n| iolog.filter.keyword | 指定キーワードに一致するリクエストをログから除外 |\n| fncdepth, [深さ] | 関数呼び出し深さの上限(デフォルト: 32) |\n| looplimit, [回数] | ループ繰り返し回数の上限(デフォルト: 10000) |\n\nその他の設定\n\n| 設定キー | 説明 |\n|---------|------|\n| basepath, ディレクトリ | ファイル操作のベースディレクトリ |\n| include, ファイル名 | 外部設定ファイルのインクルード |\n| save.encode, [on|off] | セーブファイルの暗号化 |\n| save.auto, [on|off] | 変数の自動保存を有効化 |\n| maxlognum, [数] | エラーログの最大エントリ数(デフォルト: 256) |\n\n緊急設定\n\nバージョン Tc555-1+ では、辞書読み込み失敗時のフォールバック設定をサポート。辞書読み込みが失敗すると、nullを返す前に yaya_emerg.txt の読み込みを試みる。\n\nyaya_emerg.txt による緊急モードはシェルモードにはならない。yaya_emerg.txt が無ければ、これまでどおり動作を止める。\n\nシェルモード\n\nTc574-7 / Tc602-12以降。設定ファイルが無いか、読み込む辞書がひとつも無い場合、YAYAは次の辞書だけを読み込んだものとして動作する。\n\nload { }\nunload { }\nrequest { EVAL(_argv[0]) }\n\nrequestに渡された文字列をそのまま EVAL し、その結果を返す。式ひとつのほか、; や改行で区切った文の並びや制御文も書ける。ゴースト一式や辞書を用意しなくても、YAYAの式や関数の動作を手早く確かめられる。\n\n| request の入力 | 返値 |\n|---------------|------|\n| 1+2 | 3 |\n| _a = 3; _a * 5 | 15 |\n| 'hello' + ' world' | hello world |\n| X = 10 | 空文字列(グローバル変数 X に 10 が入る) |\n| X | 10 |\n\n- グローバル変数は同じセッションの間は保持される\n- 設定ファイルが無い場合は、変数の自動保存・復元(yaya_variable.cfg)を行わない。設定ファイルはあって辞書の指定だけが無い場合は、save.auto などの設定に従う\n- シェルモードに入ると、ログに注記 N0002 が出る\n- dic で指定した辞書ファイルが存在しない、辞書に文法エラーがある、include の対象が無い、といったエラーの場合はシェルモードにはならない\n- SHIORIのリクエストもそのまま EVAL されるため、ゴーストとして使うためのものではない。YAYA の実行ファイル版(yaya.exe)で、空のディレクトリを load してから式を request で送る、といった使い方を想定している",
16039
16083
  "url": "https://yaya-shiori.github.io/yaya-docs/grammar/01-basic-settings/",
16040
16084
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/grammar/01-basic-settings.md"
16041
16085
  },
@@ -16044,7 +16088,7 @@
16044
16088
  "title": "関数",
16045
16089
  "source": "yaya_docs",
16046
16090
  "category": "yaya_grammar",
16047
- "content": "関数\n\n概要\n\n関数は「0個以上の引数を取り、0個以上の候補から1つの出力を返す処理」として定義される。引数は _argc(引数の数)と _argv[n](引数配列)でアクセスする。\n\n基本構造\n\nシステム関数は load、unload、request の3つ。ユーザーはカスタム名で関数を追加定義できる:\n\nrequest { hello }\nhello { \"Hello World\" }\n\n関数は再帰をサポートし、引数はカッコで渡す:\n\ncombine(\"Hello\", \"World\")\ncombine { _argv[0] + \" \" + _argv[1] }\n\n選択方式\n\n| 方式 | 説明 |\n|------|------|\n| ランダム(デフォルト) | 出力候補からランダムに選択 |\n| nonoverlap | 前回と同じ候補が連続しないように選択 |\n| sequential | 候補を順番に出力し、ループする |\n| array | すべての候補を汎用配列にまとめて返す |\n| void | 内部コードを実行するが出力を生成しない |\n| all(Tc567-1) | すべての候補を連結して1つの文字列にする |\n| last(Tc567-1) | 最後の候補を選択する |\n\n修飾子\n\n_pool: ネストされたブロックを親レベルの候補と同等に扱い、確率分布を均等にする。\n\nmelt_: 汎用配列を使って並列出力効果を生成する。\n\nネスト・出力確認\n\nネストした波括弧 { } で階層的な選択を構成できる。-- 出力確認マーカーで候補をグループ化し、各グループから1つを選んで最終出力を構成する:\n\n\"Hello\" / \"Perfect\" -- \" World\" / \"th\"\n\n結果: \"Hello World\"、\"Hello th\"、\"Perfect World\"、\"Perfect th\" のいずれか。",
16091
+ "content": "関数\n\n概要\n\n関数は「0個以上の引数を取り、0個以上の候補から1つの出力を返す処理」として定義される。引数は _argc(引数の数)と _argv[n](引数配列)でアクセスする。\n\n基本構造\n\nシステム関数は load、unload、request の3つ。ユーザーはカスタム名で関数を追加定義できる:\n\nrequest { hello }\nhello { \"Hello World\" }\n\n関数は再帰をサポートし、引数はカッコで渡す:\n\ncombine(\"Hello\", \"World\")\ncombine { _argv[0] + \" \" + _argv[1] }\n\n選択方式\n\n| 方式 | 説明 |\n|------|------|\n| ランダム(デフォルト) | 出力候補からランダムに選択 |\n| nonoverlap | 前回と同じ候補が連続しないように選択 |\n| sequential | 候補を順番に出力し、ループする |\n| array | すべての候補を汎用配列にまとめて返す |\n| void | 内部コードを実行するが出力を生成しない |\n| all(Tc567-1) | すべての候補を連結して1つの文字列にする |\n| last(Tc567-1) | 最後の候補を選択する |\n\n修飾子\n\n_pool: ネストされたブロックを親レベルの候補と同等に扱い、確率分布を均等にする。\n\nmelt_: 汎用配列を使って並列出力効果を生成する。ブロックに付けると、そのブロックで選んだ出力が汎用配列の場合に要素をばらし、すぐ外側のブロックの出力候補に加える(parallel と同じ効果)。melt_nonoverlap のように選択方式と組み合わせられる。選択方式を書いていない内側のブロックにも引き継がれる。\n\nOnTest\n{\n \"test\"\n \"test2\"\n melt_nonoverlap : {\n (\"red\",\"green\",\"blue\")\n }\n}\n\n結果: \"test\"、\"test2\"、\"red\"、\"green\"、\"blue\" のいずれか。\n\n関数そのものに付けた場合は外側のブロックが無いので、汎用配列の候補をばらしてから選ぶ(Tc574-9 / Tc603-2以降)。return で返した汎用配列はばらさない。\n\nOnTest : melt_nonoverlap\n{\n \"test\"\n \"test2\"\n (\"red\",\"green\",\"blue\")\n}\n\n結果: 上と同じ5つの候補から、重複しないように選ぶ。\n\nTc574-8 / Tc603-1 までは、関数そのものに付けた melt_ は効かず、汎用配列がそのまま1つの候補になっていた。また、2段以上内側のブロックに付けた melt_ は、すぐ外側ではなく関数の一番外側のブロックの候補に加わっていた。\n\nネスト・出力確認\n\nネストした波括弧 { } で階層的な選択を構成できる。-- 出力確認マーカーで候補をグループ化し、各グループから1つを選んで最終出力を構成する:\n\n\"Hello\" / \"Perfect\" -- \" World\" / \"th\"\n\n結果: \"Hello World\"、\"Hello th\"、\"Perfect World\"、\"Perfect th\" のいずれか。",
16048
16092
  "url": "https://yaya-shiori.github.io/yaya-docs/grammar/02-functions/",
16049
16093
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/grammar/02-functions.md"
16050
16094
  },
@@ -16071,7 +16115,7 @@
16071
16115
  "title": "配列",
16072
16116
  "source": "yaya_docs",
16073
16117
  "category": "yaya_grammar",
16074
- "content": "配列\n\n概要\n\n[ ] 演算子で配列要素にアクセスする。YAYAは2種類の配列をサポートする:簡易配列(コンマ区切り文字列を扱う)と汎用配列(混合型コレクション)。\n\n簡易配列\n\nコンマをデリミタとして文字列内で解釈する:\n\n_a = \"this,is,a,pen\"\n_a[1] // \"is\" を出力\n\nカスタムデリミタ: インデックスの後に指定できる:\n\n\"This is a island.\"[2,\"is\"] // \" a \" を出力\n\nネストアクセス: デリミタを段ごとに変えられる:\n\n_ar = \"taro|male,ayame|female,hotaru|female\"\n_ar[2][1,\"|\"] // \"female\" を出力\n\n代入: 元の変数の要素を変更できる:\n\n_a[3] = \"eraser\" // 要素を置き換える\n_m[5,\"/\"] = \"daisen\" // 必要に応じてデリミタで拡張する\n\nSETDELIM() 関数でデフォルトデリミタをコンマ以外に変更できる。\n\n汎用配列\n\nカッコとコンマ記法で混合型の値を格納する:\n\ni = (100,\"test\",-1.5)\n\n単一要素の初期化 は IARRAY と組み合わせて行う:\n\ni = (IARRAY,100)\n\n要素操作:\n- 追加: i = (i,\"add\") または i ,= (\"add\",123,0.0)\n- 削除: i[2] = IARRAY\n- 挿入: i = (\"first\",i) または i[2] ,= \"insertion\"\n\n演算: 配列とスカラー値の演算は要素ごとに適用される:\n\npref = (\"gunnma\",\"ohsaka\")\npref += \"-ken\" // すべての要素に \"-ken\" が追加される\n\n配列同士の演算はすべての組み合わせを生成する:\n\npref1 = (\"gunma\",\"osaka\")\npref2 = (\"-ken\",\"-fu\")\npref1 + pref2 // 4つの結果を生成\n\n要素の比較: 配列同士を == で比べると、要素ごとに比べる。Tc600-3以降では、要素が両方とも VOID のときも等しいとみなす(それまでは偽だった)。\n\n入れ子と多次元代入(Tc600-3以降)\n\n配列の要素にハッシュを入れたり、ハッシュの値に配列を入れたりできる。読み出しは _a[1][\"x\"]、代入は _a[1][\"x\"] = 5 のように [ ] を続けて書く。\n\n_a = (0, IHASH(\"x\", 1), 2)\n_a[1][\"x\"] // 1\n_a[1][\"x\"] = 5 // 多次元代入\n\n多次元代入では、途中の要素が文字列なら簡易配列として書き換える:\n\n_a = (\"p,q\", \"r\")\n_a[0][1] = \"Q\" // _a[0] は \"p,Q\"\n\nただし、汎用配列の中に汎用配列を直接入れる手段は無い。, 演算子も _a[1] = (8,9) も、配列を展開して差し込む。\n\n詳細は 値の入れ子と多次元代入 を参照。\n\n範囲指定\n\n両方の配列型で範囲インデックス [a,b] を使った取得・代入ができる:\n\nname = (\"さくら\",\"せりこ\",\"奈留\",\"まゆら\")\ni = name[1,3] // 要素1〜3\nname[3,4] = \"奎子\"\nanimal[0,2,\"!\"] // デリミタ付き範囲\n\n並列出力\n\nparallel キーワードで配列要素を別々の出力候補に変換する:\n\nfoo { parallel (\"A\",\"B\",\"C\") } // A、B、Cのいずれかを出力\n\nvoid キーワードは出力候補を生成せずに結果を破棄する。",
16118
+ "content": "配列\n\n概要\n\n[ ] 演算子で配列要素にアクセスする。YAYAは2種類の配列をサポートする:簡易配列(コンマ区切り文字列を扱う)と汎用配列(混合型コレクション)。\n\n簡易配列\n\nコンマをデリミタとして文字列内で解釈する:\n\n_a = \"this,is,a,pen\"\n_a[1] // \"is\" を出力\n\nカスタムデリミタ: インデックスの後に指定できる:\n\n\"This is a island.\"[2,\"is\"] // \" a \" を出力\n\nネストアクセス: デリミタを段ごとに変えられる:\n\n_ar = \"taro|male,ayame|female,hotaru|female\"\n_ar[2][1,\"|\"] // \"female\" を出力\n\n代入: 元の変数の要素を変更できる:\n\n_a[3] = \"eraser\" // 要素を置き換える\n_m[5,\"/\"] = \"daisen\" // 必要に応じてデリミタで拡張する\n\nSETDELIM() 関数でデフォルトデリミタをコンマ以外に変更できる。\n\n汎用配列\n\nカッコとコンマ記法で混合型の値を格納する:\n\ni = (100,\"test\",-1.5)\n\n単一要素の初期化 は IARRAY と組み合わせて行う:\n\ni = (IARRAY,100)\n\n要素操作:\n- 追加: i = (i,\"add\") または i ,= (\"add\",123,0.0)\n- 削除: i[2] = IARRAY\n- 挿入: i = (\"first\",i) または i[2] ,= \"insertion\"\n\n演算: 配列とスカラー値の演算は要素ごとに適用される:\n\npref = (\"gunnma\",\"ohsaka\")\npref += \"-ken\" // すべての要素に \"-ken\" が追加される\n\n配列同士の演算はすべての組み合わせを生成する:\n\npref1 = (\"gunma\",\"osaka\")\npref2 = (\"-ken\",\"-fu\")\npref1 + pref2 // 4つの結果を生成\n\n要素の比較: 配列同士を == で比べると、要素ごとに比べる。Tc600-3以降では、要素が両方とも VOID のときも等しいとみなす(それまでは偽だった)。\n\n入れ子と多次元代入(Tc600-3以降)\n\n配列の要素にハッシュを入れたり、ハッシュの値に配列を入れたりできる。読み出しは _a[1][\"x\"]、代入は _a[1][\"x\"] = 5 のように [ ] を続けて書く。\n\n_a = (0, IHASH(\"x\", 1), 2)\n_a[1][\"x\"] // 1\n_a[1][\"x\"] = 5 // 多次元代入\n\n多次元代入では、途中の要素が文字列なら簡易配列として書き換える:\n\n_a = (\"p,q\", \"r\")\n_a[0][1] = \"Q\" // _a[0] は \"p,Q\"\n\nただし、汎用配列の中に新しく汎用配列を入れる手段は無い。, 演算子も _a[1] = (8,9) も、配列を展開して差し込む。代入先の要素がすでに配列やハッシュのときだけは、展開せずに丸ごと置き換える(Tc603-1以降。内側の配列やハッシュを丸ごと書き換える)。\n\n詳細は 値の入れ子と多次元代入 を参照。\n\n範囲指定\n\n両方の配列型で範囲インデックス [a,b] を使った取得・代入ができる:\n\nname = (\"さくら\",\"せりこ\",\"奈留\",\"まゆら\")\ni = name[1,3] // 要素1〜3\nname[3,4] = \"奎子\"\nanimal[0,2,\"!\"] // デリミタ付き範囲\n\n範囲外の要素\n\n範囲外の要素を読むと、簡易配列でも汎用配列でも、未定義の変数と同じく VOID になる(Tc574-8 / Tc603-1以降)。範囲指定の読み出しが範囲外のときは、空の範囲(簡易配列なら空文字列、汎用配列なら空の配列)になる。\n\n_a = (1, 2)\n_a[9] // VOID\n_a[9] == \"\" // 1\n_a[9] == 0 // 1\n_a[9] + 1 // 1 (整数)\nGETTYPE(_a[9]) // 0\n_a[5, 6] // 空の配列\n\"a,b\"[5, 6] // \"\"\n\n- VOID は文字列としては空文字列、数値としては 0 として扱われる。== \"\" や if _a[9] の結果は、空文字列だったときと変わらない\n- 関数の最後の行などで範囲外の要素をそのまま書いても、出力の候補にはならない(未定義の変数と同じ。空文字列だったときは空文字列が候補になっていた)\n- 数値に [ ] を付けたとき(5[1])は、要素が1つの配列とみなす。0 番目はその数値、それ以外は VOID\n- 範囲外の要素への複合代入(_a[9] += 1)も VOID として計算するので、整数の 1 になる(600 系では Tc602-10 から。500 系では Tc574-8 から)\n- Tc574-7 / Tc602-13 までは、汎用配列の範囲外は空文字列、簡易配列の範囲外は VOID と、配列の種類で結果が違っていた。そのため _a[9] == 0 は偽、_a[9] + 1 は文字列 \"1\"、GETTYPE(_a[9]) は 3 だった。簡易配列の範囲指定が範囲外のときは VOID、数値の範囲指定が範囲外のときも VOID だった\n\n並列出力\n\nparallel キーワードで配列要素を別々の出力候補に変換する:\n\nfoo { parallel (\"A\",\"B\",\"C\") } // A、B、Cのいずれかを出力\n\nvoid キーワードは出力候補を生成せずに結果を破棄する。",
16075
16119
  "url": "https://yaya-shiori.github.io/yaya-docs/grammar/05-arrays/",
16076
16120
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/grammar/05-arrays.md"
16077
16121
  },
@@ -16125,7 +16169,7 @@
16125
16169
  "title": "文字コード関連",
16126
16170
  "source": "yaya_docs",
16127
16171
  "category": "yaya_grammar",
16128
- "content": "文字コード関連\n\n内部文字コード\n\nYAYA は内部文字コードとして UCS-2 を使用する。辞書操作・ファイルI/O・外部ライブラリとのやり取りを行う際は、すべての文字列を自動的に UCS-2 との間で変換する。\n\n文字コードIDシステム\n\n一部の関数では、文字コードを数値IDで参照する:\n\n| エンコーディング | テキスト表現 | ID |\n|----------------|------------|-----|\n| Shift JIS | Shift_JIS | 0 |\n| UTF-8 | UTF-8 | 1 |\n| EUC-JP | EUC_JP | 2 |\n| BIG-5 | BIG-5 | 3 |\n| GB-2312 | GB-2312 | 4 |\n| EUC-KR | EUC_KR | 5 |\n| ISO-2022-JP (JIS) | ISO-2022-JP | 6 |\n| バイナリ | binary | 126 |\n| OSデフォルト | OSNative | 127 |\n\nバイナリエンコーディングの特殊ケース\n\nバイナリ形式は「UCS-2文字列の下位バイトをそのままバイト列にした特殊な文字コード」。変換なしにデータをやり取りするために FWRITEBIN や FREADBIN などの関数向けに設計されている。\n\n重要な制限: バイナリモードであっても YAYA は文字列内のヌルバイト(0x00)を処理できない。また FUNCTIONEX などの既存システム辞書はバイナリ文字列値を想定していない。\n\n関連\n\n- CHARSETLIB\n- CHARSETLIBEX\n- CHARSETIDTOTEXT\n- CHARSETTEXTTOID\n- FCHARSET\n- STRENCODE\n- STRDECODE",
16172
+ "content": "文字コード関連\n\n内部文字コード\n\nYAYA は内部文字コードとして UCS-2 を使用する。辞書操作・ファイルI/O・外部ライブラリとのやり取りを行う際は、すべての文字列を自動的に UCS-2 との間で変換する。\n\n文字コードIDシステム\n\n一部の関数では、文字コードを数値IDで参照する。名前で指定できる関数では、テキスト表現の名前を使う(文字コードの名前):\n\n| エンコーディング | テキスト表現 | ID |\n|----------------|------------|-----|\n| Shift JIS | Shift_JIS | 0 |\n| UTF-8 | UTF-8 | 1 |\n| EUC-JP | EUC-JP | 2 |\n| Big5 | Big5 | 3 |\n| GB2312 | GB2312 | 4 |\n| EUC-KR | EUC-KR | 5 |\n| ISO-2022-JP (JIS) | ISO-2022-JP | 6 |\n| バイナリ | binary | 126 |\n| OSデフォルト | default(OSNative も同じ) | 127 |\n\n文字コードの名前\n\n文字コードを名前で指定するときは、上の表のテキスト表現を使う。大文字小文字は区別しない。\n\n使えない名前(UTF-16、ISO-8859-1 など)をシステム関数に渡すと、警告 W0012 を出して失敗する(GETLASTERROR は 12)。どう失敗するかは関数ごとのページを参照。Tc574-8 / Tc603-1 より前は、警告を出さずに OS デフォルトとして扱っていた。\n\n設定ファイル(charset など)に使えない名前を書いたときは、これまでどおり警告を出さずに OS デフォルトになる。\n\nバイナリエンコーディングの特殊ケース\n\nバイナリ形式は「UCS-2文字列の下位バイトをそのままバイト列にした特殊な文字コード」。変換なしにデータをやり取りするために FWRITEBIN や FREADBIN などの関数向けに設計されている。\n\n重要な制限: バイナリモードであっても YAYA は文字列内のヌルバイト(0x00)を処理できない。また FUNCTIONEX などの既存システム辞書はバイナリ文字列値を想定していない。\n\n関連\n\n- CHARSETLIB\n- CHARSETLIBEX\n- CHARSETIDTOTEXT\n- CHARSETTEXTTOID\n- FCHARSET\n- STRENCODE\n- STRDECODE",
16129
16173
  "url": "https://yaya-shiori.github.io/yaya-docs/grammar/11-character-encoding/",
16130
16174
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/grammar/11-character-encoding.md"
16131
16175
  },
@@ -16134,7 +16178,7 @@
16134
16178
  "title": "ハッシュ(Tc600-3以降)",
16135
16179
  "source": "yaya_docs",
16136
16180
  "category": "yaya_grammar",
16137
- "content": "ハッシュ(Tc600-3以降)\n\nTc600-3 以降では、値の型にハッシュ(連想配列)が加わった。\n\nハッシュの値やキーには、配列やハッシュを入れられる(入れ子)。入れ子の読み書きや多次元代入は 値の入れ子と多次元代入 を参照。\n\n500 系からの互換性に関わる変更は 600 での変更点 を参照。\n\n生成\n\nハッシュは IHASH で作る。キーと値を交互に並べる。IHASH() は空のハッシュになる。\n\n_h = IHASH(\"name\", \"さくら\", \"age\", 16)\n_e = IHASH()\n\n文字列から作るときは HASH_SPLIT を使う。\n\n_h = HASH_SPLIT(\"a=1,b=2\", \",\", \"=\")\n\nハッシュの変数は、IHASH などで最初にハッシュとして作っておく必要がある。未定義の変数に _x[\"a\"] = 1 と書いても、ハッシュではなく汎用配列の扱いになる(\"a\" は数値として 0 番目と解釈される)。\n\n要素の参照・代入\n\nh[キー] で値を読み、h[キー] = 値 で追加・上書きする。\n\n_h = IHASH()\n_h[\"name\"] = \"さくら\"\n_h[\"name\"] // \"さくら\"\n_h[\"none\"] // \"\" (キーが無いときは空文字列)\n_h[\"age\"] += 1 // 複合代入も使える\n\n- キーが無いときは空文字列を返す。VOID ではない\n- 値には配列やハッシュも入れられる(入れ子)\n- 序数の2番目以降(範囲指定やデリミタ)は無視される。範囲つきの読み出し h[a, b] は空文字列になる\n\nキーの一致\n\nスカラーのキーは「数値」と「文字列」に分けて比べる。\n\n- 数値として扱うもの: 整数、実数、正規形の整数を表す文字列(\"9\"、\"-3\" など)\n - \"09\"、\"-0\"、\"+1\"、\" 1\"、64bit に収まらない数字列は文字列として扱う\n- 数値同士は値で比べる。整数と実数も誤差なく比べる\n- 文字列同士は文字列として比べる。VOID は空文字列と同じキーになる\n\nこのため、h[1]、h[\"1\"]、h[1.0] はすべて同じキーになる。一方、h[1.5] と h[\"1.5\"]、h[0] と h[\"-0\"] は別のキーになる。\n\n同じキーとみなされる値を複数回 IHASH に渡したときは、最初のキーと値が残る。\n\nIHASH(9, \"i9\", \"9\", \"s9\") // 9=i9 だけ\n\n並び順\n\nハッシュの要素はキーの順に並ぶ。挿入した順ではない。HASH_KEYS、HASH_VALUES、文字列化、foreach、セーブファイルの並びはすべてこの順になる。\n\n- 数値 < 文字列 の順に並ぶ。数値同士は値の順、文字列同士は文字列の順\n- キーが配列やハッシュのときは、スカラー < 配列 < ハッシュ の順に並び、配列同士・ハッシュ同士は先頭の要素から順に比べる\n\n_h = IHASH(10,1, 9,1, 100,1, -1,1, \"b\",1, \"B\",1, 2.5,1)\nHASH_KEYS(_h) // -1,2.5,9,10,100,B,b\n\n値としての振る舞い\n\n| 操作 | 結果 |\n|---|---|\n| 真偽 | 要素が1つ以上あれば真、空なら偽 |\n| GETTYPE / GETTYPEEX | 5 |\n| 文字列化(TOSTR や文字列との連結) | キー=値 を , でつないだもの。例 a=1,b=x |\n| 数値化 | 0 |\n| h1 == h2 | 要素数、キー、値がすべて一致すれば真。値が入れ子なら中身まで比べる |\n| ハッシュとハッシュ以外の == | 常に偽(文字列化した結果が同じでも偽) |\n| +(相手がスカラーかハッシュ) | 両方を文字列にして連結する |\n| +(相手が配列) | 配列の要素ごとに、ハッシュと文字列として連結する |\n| - * / % | 警告 W0024 を出す(下記) |\n\n_h = IHASH(\"a\", 1)\n_h + 1 // \"a=11\"\n'z' + _h // \"za=1\"\n_h + _h // \"a=1a=1\"\n(1,2) + _h // (\"1a=1\",\"2a=1\")\n\n- * / %(複合代入を含む)の両辺のどちらかがハッシュのときは、警告 W0024 を出す。結果は、相手がスカラーなら右辺がそのまま返り(h - 1 は 1、1 * h は h)、相手が配列なら要素ごとに計算される。意味のある結果にはならないので使わないこと。なお、配列の要素がハッシュの場合((h, 1) - 1)は W0024 は出ない。\n\n関数の引数と , 演算子\n\n汎用配列は引数や , 演算子で展開されるが、ハッシュは展開されず、そのまま1つの要素になる。\n\n_a = (0, _h, 2) // 要素数 3。_a[1] はハッシュ\nfunc(_h) // func の中で _argv[0] がハッシュになる\n\nforeach\n\nハッシュも foreach で回せる。1変数の形では、値がキーの順に入る。\n\n_h = IHASH(\"a\", 1, \"b\", 2)\nforeach _h ; _v\n{\n // _v = 1, 2\n}\n\n変数を2つ書くと、1つ目にキー、2つ目に値が入る。この形は配列と簡易配列でも使え、1つ目には 0 から始まるインデックスが入る。\n\nforeach _h ; _k, _v { _s += _k + '=' + _v + ' ' } // \"a=1 b=2 \"\nforeach (\"p\", \"q\") ; _i, _v { ... } // _i = 0, 1\nforeach \"x,y\" ; _i, _v { ... } // 簡易配列も同じ\n\n詳細は フロー制御 を参照。\n\n関連\n\n- IHASH\n- HASH_KEYS\n- HASH_VALUES\n- HASH_SPLIT\n- HASH_EXIST\n- HASH_SIZE\n- 値の入れ子と多次元代入\n- 配列\n- 600 での変更点",
16181
+ "content": "ハッシュ(Tc600-3以降)\n\nTc600-3 以降では、値の型にハッシュ(連想配列)が加わった。\n\nハッシュの値やキーには、配列やハッシュを入れられる(入れ子)。入れ子の読み書きや多次元代入は 値の入れ子と多次元代入 を参照。\n\n500 系からの互換性に関わる変更は 600 での変更点 を参照。\n\n生成\n\nハッシュは IHASH で作る。キーと値を交互に並べる。IHASH() は空のハッシュになる。\n\n_h = IHASH(\"name\", \"さくら\", \"age\", 16)\n_e = IHASH()\n\n文字列から作るときは HASH_SPLIT を使う。\n\n_h = HASH_SPLIT(\"a=1,b=2\", \",\", \"=\")\n\nハッシュの変数は、IHASH などで最初にハッシュとして作っておく必要がある。未定義の変数に _x[\"a\"] = 1 と書いても、ハッシュではなく汎用配列の扱いになる(\"a\" は数値として 0 番目と解釈される)。\n\n要素の参照・代入\n\nh[キー] で値を読み、h[キー] = 値 で追加・上書きする。\n\n_h = IHASH()\n_h[\"name\"] = \"さくら\"\n_h[\"name\"] // \"さくら\"\n_h[\"none\"] // VOID (キーが無いときは未定義の変数と同じ)\n_h[\"age\"] += 1 // 複合代入も使える\n\n- キーが無いときは、未定義の変数と同じく VOID を返す(Tc603-1以降。Tc602-13 までは空文字列だった)。文字列としては空文字列、数値としては 0 として扱われるので、_h[\"none\"] == \"\" は 1、_h[\"none\"] + 1 は整数の 1 になる(範囲外の要素)\n- 複合代入(+= -= *= /= %=)の左辺のキーが無いときも VOID として計算する(Tc602-10以降)。_count[_name] += 1 で数を数えられる。キーがあって値が空文字列のときは、これまでどおり空文字列として計算する(\"\" + 1 は \"1\")\n- 「キーが無い」と「値が空文字列や VOID」を区別するときは HASH_EXIST を使う\n- 値には配列やハッシュも入れられる(入れ子)\n- 序数の2番目以降(範囲指定やデリミタ)は無視される。範囲つきの読み出し h[a, b] は空文字列になる\n\nキーの一致\n\nスカラーのキーは「数値」と「文字列」に分けて比べる。\n\n- 数値として扱うもの: 整数、実数、正規形の整数を表す文字列(\"9\"、\"-3\" など)\n - \"09\"、\"-0\"、\"+1\"、\" 1\"、64bit に収まらない数字列は文字列として扱う\n- 数値同士は値で比べる。整数と実数も誤差なく比べる\n- 文字列同士は文字列として比べる。VOID は空文字列と同じキーになる\n\nこのため、h[1]、h[\"1\"]、h[1.0] はすべて同じキーになる。一方、h[1.5] と h[\"1.5\"]、h[0] と h[\"-0\"] は別のキーになる。\n\n同じキーとみなされる値を複数回 IHASH に渡したときは、最初のキーと値が残る。\n\nIHASH(9, \"i9\", \"9\", \"s9\") // 9=i9 だけ\n\n並び順\n\nハッシュの要素はキーの順に並ぶ。挿入した順ではない。HASH_KEYS、HASH_VALUES、文字列化、foreach、セーブファイルの並びはすべてこの順になる。\n\n- 数値 < 文字列 の順に並ぶ。数値同士は値の順、文字列同士は文字列の順\n- キーが配列やハッシュのときは、スカラー < 配列 < ハッシュ の順に並び、配列同士・ハッシュ同士は先頭の要素から順に比べる\n\n_h = IHASH(10,1, 9,1, 100,1, -1,1, \"b\",1, \"B\",1, 2.5,1)\nHASH_KEYS(_h) // -1,2.5,9,10,100,B,b\n\n値としての振る舞い\n\n| 操作 | 結果 |\n|---|---|\n| 真偽 | 要素が1つ以上あれば真、空なら偽 |\n| GETTYPE / GETTYPEEX | 5 |\n| 文字列化(TOSTR や文字列との連結) | キー=値 を , でつないだもの。例 a=1,b=x |\n| 数値化 | 0 |\n| h1 == h2 | 要素数、キー、値がすべて一致すれば真。値が入れ子なら中身まで比べる |\n| ハッシュとハッシュ以外の == | 常に偽(文字列化した結果が同じでも偽) |\n| +(相手がスカラーかハッシュ) | 両方を文字列にして連結する |\n| +(相手が配列) | 配列の要素ごとに、ハッシュと文字列として連結する |\n| - * / % | 警告 W0024 を出す(下記) |\n\n_h = IHASH(\"a\", 1)\n_h + 1 // \"a=11\"\n'z' + _h // \"za=1\"\n_h + _h // \"a=1a=1\"\n(1,2) + _h // (\"1a=1\",\"2a=1\")\n\n- * / %(複合代入を含む)の両辺のどちらかがハッシュのときは、警告 W0024 を出す。結果は、相手がスカラーなら右辺がそのまま返り(h - 1 は 1、1 * h は h)、相手が配列なら要素ごとに計算される。意味のある結果にはならないので使わないこと。なお、配列の要素がハッシュの場合((h, 1) - 1)は W0024 は出ない。\n\n関数の引数と , 演算子\n\n汎用配列は引数や , 演算子で展開されるが、ハッシュは展開されず、そのまま1つの要素になる。\n\n_a = (0, _h, 2) // 要素数 3。_a[1] はハッシュ\nfunc(_h) // func の中で _argv[0] がハッシュになる\n\nforeach\n\nハッシュも foreach で回せる。1変数の形では、値がキーの順に入る。\n\n_h = IHASH(\"a\", 1, \"b\", 2)\nforeach _h ; _v\n{\n // _v = 1, 2\n}\n\n変数を2つ書くと、1つ目にキー、2つ目に値が入る。この形は配列と簡易配列でも使え、1つ目には 0 から始まるインデックスが入る。\n\nforeach _h ; _k, _v { _s += _k + '=' + _v + ' ' } // \"a=1 b=2 \"\nforeach (\"p\", \"q\") ; _i, _v { ... } // _i = 0, 1\nforeach \"x,y\" ; _i, _v { ... } // 簡易配列も同じ\n\n詳細は フロー制御 を参照。\n\n関連\n\n- IHASH\n- HASH_KEYS\n- HASH_VALUES\n- HASH_SPLIT\n- HASH_EXIST\n- HASH_SIZE\n- 値の入れ子と多次元代入\n- 配列\n- 600 での変更点",
16138
16182
  "url": "https://yaya-shiori.github.io/yaya-docs/grammar/12-hash/",
16139
16183
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/grammar/12-hash.md"
16140
16184
  },
@@ -16143,7 +16187,7 @@
16143
16187
  "title": "値の入れ子と多次元代入(Tc600-3以降)",
16144
16188
  "source": "yaya_docs",
16145
16189
  "category": "yaya_grammar",
16146
- "content": "値の入れ子と多次元代入(Tc600-3以降)\n\nTc600-3 以降では、配列の要素、ハッシュの値、ハッシュのキーに、配列やハッシュを入れられる(入れ子)。入れ子の内側は [ ] を続けて書いて読み書きする。要素の要素へ直接代入することを多次元代入と呼ぶ。\n\n500 系では配列の要素はスカラーだけで、a[x][y] = v は読み込み時にエラー E0029 だった。500 系からの変更点は 600 での変更点 を参照。\n\nハッシュそのものについては ハッシュ を参照。\n\n入れ子の作り方\n\nハッシュの値に入れる\n\nハッシュの要素に代入すれば、配列もハッシュもそのまま値になる。\n\n_h = IHASH()\n_h[\"list\"] = (1, 2, 3) // 値に配列\n_h[\"sub\"] = IHASH(\"x\", 1) // 値にハッシュ\n\nIHASH の引数に配列を書くと、ほかの関数と同じく展開される。IHASH(\"list\", (1, 2, 3)) は IHASH(\"list\", 1, 2, 3) と同じになり、値に配列は入らない。配列を値にしたいときは、上のようにあとから代入する。ハッシュは展開されないので、IHASH(\"sub\", IHASH(\"x\", 1)) のように書ける。\n\n配列の要素にハッシュを入れる\n\nハッシュは , 演算子でも要素への代入でも展開されず、1つの要素になる。\n\n_h = IHASH(\"x\", 1)\n_a = (0, _h, 2) // 要素数 3。_a[1] はハッシュ\n_a[2] = _h // 同上\n_a ,= _h // 末尾に追加\n\n配列の要素に配列を入れる\n\n配列の中に配列を入れる構文は無い。, 演算子、,=、要素への代入(_a[1] = (8, 9))のどれも、右辺の配列を展開して差し込む(500 系と同じ)。\n\n_a = (1, 2)\n_a[1] = (8, 9) // 1,8,9 (要素数 3)\n_a[1] = IARRAY() // 1,9 (空の配列を差し込むと要素が消える)\n\n配列の中に配列を持つ値は、次のような関数が返す。\n\n- HASH_VALUES: 値が配列のハッシュを渡すと、その配列を1つの要素として含む配列を返す\n- PARSEJSON / PARSEYAML / PARSETOML / PARSEXML と、ファイルから読む FREADJSON などの関数\n- RESTOREVAR: 入れ子のまま保存した変数を復元する\n\n_v = PARSEJSON('[[1,2,3],[4]]') // 要素数 2。_v[0] は配列 (1,2,3)\n\nこうして得た配列の中の配列も、多次元代入で書き換えられる(Tc602-7以降。途中の値ごとの動作)。\n\n段階的に組み立てる\n\n内側のハッシュは自動では作られない。途中のハッシュは IHASH で作ってから、その中へ代入する。\n\n_m = IHASH()\n_m[\"a\"] = IHASH()\n_m[\"a\"][\"b\"] = 1\n_m[\"a\"][\"list\"] = IARRAY()\n_m[\"a\"][\"list\"] ,= \"p\"\n_m[\"a\"][\"list\"] ,= \"q\"\nDUMPJSON(_m) // {\"a\":{\"b\":1,\"list\":[\"p\",\"q\"]}}\n\n途中のハッシュを作らずに _m[\"c\"][\"d\"] = 1 と書くと、_m[\"c\"] はハッシュではなく文字列 \"1\" になる(途中の値ごとの動作)。\n\n読み出し\n\n[ ] を続けて書くと、1つ目の [ ] の結果に2つ目の [ ] を、その結果に3つ目を……と順に適用する。\n\n_h = IHASH()\n_h[\"list\"] = (1, 2, 3)\n_h[\"sub\"] = IHASH(\"x\", 1)\n_a = (0, _h, 2)\n\n_h[\"sub\"][\"x\"] // 1\n_h[\"list\"][1] // 2\n_a[1][\"sub\"][\"x\"] // 1\n_a[1][\"list\"] // (1,2,3) そのものが返る\n\nそれぞれの [ ] は、その時点の値の型に応じて次のように動く。どの段でも、該当する要素が無いときは空文字列になり、そこから先の [ ] も空文字列になる(エラーにはならない)。\n\n| 値 | [x] の結果 |\n|---|---|\n| 配列 | x 番目の要素。要素が配列やハッシュならそのまま返る |\n| ハッシュ | キー x の値(キーの一致) |\n| 文字列 | 簡易配列として x 番目の要素 |\n| 数値 | x が 0 ならその値、それ以外は空文字列 |\n\n範囲指定も使える。配列の範囲指定 [a, b] の結果は、入れ子の要素をそのまま含む配列になる。ハッシュの範囲指定は空文字列になる。\n\n_v = PARSEJSON('[[1,2],[3,4],[5,6]]')\n_v[0, 1] // 要素数 2 の配列。どちらの要素も配列のまま\n\n簡易配列のデリミタ\n\nSETDELIM で変数に設定したデリミタは、その変数に直接付けた1段目の [ ] にだけ効く。入れ子の中の文字列を簡易配列として読むときは、2段目以降の [ ] でデリミタを指定する。\n\n_s = \"a|b\"\nSETDELIM(_s, \"|\")\n_t = (_s, \"c\")\n_t[0][1] // \"\" (2段目は \",\" で区切られる)\n_t[0][1, \"|\"] // \"b\"\n\n文字列への埋め込み\n\n文字列の中でも [ ] を続けて書ける。\n\n\"値は %_h['sub']['x'] です\" // 値は 1 です\n\"値は %(_h['list'][1]) です\" // 値は 2 です\n\n入れ子の配列やハッシュそのものを埋め込むと、文字列化した結果になる。\n\n関数の引数と , 演算子\n\n関数の引数や , 演算子で展開されるのはいちばん外側の配列だけで、その要素にある配列やハッシュは展開されずに1つの要素のまま残る。ハッシュはいちばん外側でも展開されない。\n\n_v = PARSEJSON('[[1,2,3],[4]]')\n\nfunc(_v) // _argc は 2。_argv[0] は配列 (1,2,3)\nfunc(_v[0]) // _argc は 3。_argv は 1,2,3\nfunc(_v, 9) // _argc は 3。_argv[0] は配列 (1,2,3)\n_c = (_v, 9) // 要素数 3。_c[0] は配列 (1,2,3)\n\nARRAYSIZE(_v) // 2\nARRAYSIZE(_v[0]) // 3\n\n関数に入れ子の配列を渡すと、いちばん外側の配列は _argv そのものになる。受け取った側で「引数が1つの配列」と「引数が複数」を区別する手段は無いので、入れ子の配列を関数に渡すときは、ハッシュに包むか、配列の要素を1つずつ渡すとよい。\n\nGETTYPE に要素が1つだけの配列を渡すと、配列ではなくその要素の型を返す(500 系と同じ)。上の例では GETTYPE(_v[1]) は 4 ではなく 1 になる。\n\nforeach\n\n入れ子の配列やハッシュも foreach で回せる。ループ変数には要素がそのまま入るので、要素が配列やハッシュなら、さらに foreach で回したり [ ] で読んだりできる。\n\n_h = PARSEJSON('{\"a\":{\"x\":1,\"y\":2},\"b\":{\"x\":3}}')\nforeach _h ; _k, _sub {\n foreach _sub ; _k2, _v {\n // _k/_k2 = _v の順に a/x=1, a/y=2, b/x=3\n }\n}\n\nforeach _h[\"a\"] ; _k, _v { ... } // 内側だけを回す\n\n2変数の foreach は ハッシュ と フロー制御 を参照。\n\n値のコピー\n\n代入や引数渡しは値のコピーになる。入れ子の内側も含めて、コピー元とコピー先は互いに影響しない。\n\n_h = IHASH(\"a\", 1)\n_h[\"self\"] = _h\n_h[\"self\"][\"a\"] = 2\n_h[\"a\"] // 1 のまま\n\n内側を取り出して書き換えても、元の値は変わらない。元の値を変えたいときは、書き換えたものを代入し直すか、多次元代入を使う。\n\n_sub = _h[\"self\"]\n_sub[\"a\"] = 3 // _h[\"self\"][\"a\"] は 2 のまま\n_h[\"self\"] = _sub // これで _h[\"self\"][\"a\"] が 3 になる\n\n比較\n\n配列同士、ハッシュ同士の == は中身まで比べる。入れ子の内側も同じ規則で再帰的に比べる。\n\n- 配列同士: 要素数が同じで、各要素が順に等しければ真\n- ハッシュ同士: 要素数、キー、値がすべて一致すれば真(値としての振る舞い)\n\nPARSEJSON('{\"a\":[1,2]}') == PARSEJSON('{\"a\":[1,2]}') // 1\n\nASEARCH で要素がハッシュの配列を探すときも同じ規則で比べる。ただし、探す値に配列を渡すと引数として展開されるので、配列そのものを探すことはできない。\n\nASORT は、要素の配列やハッシュを文字列にして(int / double では 0 として)並べる(要素が配列やハッシュのとき)。\n\n多次元代入\n\n要素の要素へ直接代入できる。= のほか += ,= などすべての代入演算子で使える。\n\n_h[\"sub\"][\"x\"] = 5\n_h[\"list\"][0] += 10\n_h[\"list\"] ,= 4 // 内側の配列の末尾に追加\n_a[1][\"sub\"][\"y\"] = \"new\"\n\n右辺の値は、1次元の代入と同じく最後の [ ] の位置に入る。そのため右辺が配列なら展開して差し込まれる。内側の配列を丸ごと置き換えるときは、1つ手前の段に代入する。\n\n_h[\"list\"] = (1, 2, 3)\n_h[\"list\"][0] = (7, 8) // _h[\"list\"] は 7,8,2,3\n_h[\"list\"] = (7, 8) // _h[\"list\"] を (7,8) に置き換える\n\n範囲指定の代入(_h[\"list\"][0, 1] = \"R\")も1次元と同じように使える。\n\n途中の値ごとの動作\n\n多次元代入は、最後の段から根元の変数に向かって、それぞれの段の値を書き換えては1つ手前の段へ入れ直す。それぞれの段の値の型によって、次のように動く。\n\n| 途中の値 | 動作 |\n|---|---|\n| ハッシュ | キーの値を追加・上書きする |\n| 配列 | 要素を書き換える。範囲外なら、足りない分を VOID で埋めて末尾に追加する |\n| 文字列 | 簡易配列として書き換える |\n| 数値 | 配列に変えてから書き換える。0 番目は VOID になり、元の数値は失われる |\n| 無い(範囲外・キーが無い) | 空文字列を簡易配列として書き換える |\n\n_a = (\"p,q\", 1)\n_a[0][1] = \"Q\" // _a[0] は \"p,Q\"\n\n_h = IHASH(\"l\", (1, 2))\n_h[\"l\"][4] = 9 // _h[\"l\"] は 1,2,VOID,VOID,9\n\n_n = (1, 2.5)\n_n[1][2] = 9 // _n[1] は配列 (VOID,VOID,9)\n\n_e = IHASH()\n_e[\"n\"][\"x\"] = 5 // _e[\"n\"] は文字列 \"5\" (ハッシュは作られない)\n_e[\"m\"][2] = 5 // _e[\"m\"] は文字列 \",,5\"\n\n_e[\"n\"][\"x\"] = 5 で _e[\"n\"] が \"5\" になるのは、キー \"x\" を簡易配列の序数として読むと 0 番目になるため。\n\n書き換えた値を1つ手前の段へ入れ直すときは、その値が配列でも展開せず、1つの要素として置き換える。右辺の配列が展開されるのは最後の段だけなので、配列の中の配列も入れ子のまま書き換えられる。\n\n_v = PARSEJSON('[[1,2],[3,4]]')\n_v[0][0] = \"A\" // _v は (\"A\",2),(3,4)\n_v[1][0] = (7, 8) // _v は (\"A\",2),(7,8,4)\n\nただし、途中の段が範囲指定のとき(_v[0, 1][0] = 9)は、取り出した範囲の配列を書き換えてから、展開して元の範囲へ差し戻す。\n\nTc602-6 までは、配列の中の配列に多次元代入すると、書き換えた内側の配列が外側の配列へ展開されて入れ子が崩れていた(上の _v[0][0] = \"A\" で _v が \"A\"、2、(3,4) の3要素になる)。途中の値が数値の場合も、作った配列が外側へ展開されていた。参照渡し(&_v[0][0])の書き戻しも同じ。\n\n代入の根元\n\n代入の根元は変数でなければならない。(式)[0] = 1 や func()[0] = 1 などはエラー E0029 になる。\n\n参照渡し\n\nフィードバック演算子(参照渡し)でも要素の要素を渡せる(Tc600-4以降)。func(&_h[\"sub\"][\"x\"]) の中で _argv[0] を書き換えると _h[\"sub\"][\"x\"] が変わる。Tc600-3 では手前の次元が無視され、_h[\"x\"] に書き込まれていた。\n\n文字列化と保存\n\n入れ子の値を文字列にすると(TOSTR、文字列との連結、埋め込みなど)、内側もそのまま , や = でつながれるので、どこまでが内側なのかわからなくなる。\n\n_h = IHASH()\n_h[\"l\"] = (1, 2)\n_h[\"m\"] = IHASH(\"x\", 1)\nTOSTR(_h) // \"l=1,2,m=x=1\"\n\n入れ子の形を保ったまま扱いたいときは次の方法を使う。\n\n| 目的 | 方法 |\n|---|---|\n| 変数をファイルに保存して復元する | SAVEVAR / RESTOREVAR。入れ子は IARRAY{...} / IHASH{...} の形で保存される(保存形式) |\n| 中身を確認する | DUMPVAR(Tc600-4以降)。入れ子は (array)[ ... ] / (hash){ ... } で表示される。LOGGING(Tc602-8以降)も、入れ子の配列を ( )、ハッシュを { } で囲んで書き出す |\n| 文字列にして受け渡す | DUMPJSON と PARSEJSON。ただし JSON で表せない区別(整数のキーと文字列のキー、VOID と空文字列など)は失われる |\n\n制限\n\n- キーが配列のハッシュは、h[キー] の序数の第1要素がキーになるため、配列をキーにして引くことはできない(foreach や HASH_KEYS では取り出せる)。キーがハッシュなら h[キー] で引ける\n\n関連\n\n- ハッシュ\n- 配列\n- HASH_VALUES\n- PARSEJSON\n- DUMPJSON\n- SAVEVAR\n- DUMPVAR\n- 600 での変更点",
16190
+ "content": "値の入れ子と多次元代入(Tc600-3以降)\n\nTc600-3 以降では、配列の要素、ハッシュの値、ハッシュのキーに、配列やハッシュを入れられる(入れ子)。入れ子の内側は [ ] を続けて書いて読み書きする。要素の要素へ直接代入することを多次元代入と呼ぶ。\n\n500 系では配列の要素はスカラーだけで、a[x][y] = v は読み込み時にエラー E0029 だった。500 系からの変更点は 600 での変更点 を参照。\n\nハッシュそのものについては ハッシュ を参照。\n\n入れ子の作り方\n\nハッシュの値に入れる\n\nハッシュの要素に代入すれば、配列もハッシュもそのまま値になる。\n\n_h = IHASH()\n_h[\"list\"] = (1, 2, 3) // 値に配列\n_h[\"sub\"] = IHASH(\"x\", 1) // 値にハッシュ\n\nIHASH の引数に配列を書くと、ほかの関数と同じく展開される。IHASH(\"list\", (1, 2, 3)) は IHASH(\"list\", 1, 2, 3) と同じになり、値に配列は入らない。配列を値にしたいときは、上のようにあとから代入する。ハッシュは展開されないので、IHASH(\"sub\", IHASH(\"x\", 1)) のように書ける。\n\n配列の要素にハッシュを入れる\n\nハッシュは , 演算子でも要素への代入でも展開されず、1つの要素になる。\n\n_h = IHASH(\"x\", 1)\n_a = (0, _h, 2) // 要素数 3。_a[1] はハッシュ\n_a[2] = _h // 同上\n_a ,= _h // 末尾に追加\n\n配列の要素に配列を入れる\n\n配列の中に新しく配列を入れる構文は無い。, 演算子、,=、要素への代入(_a[1] = (8, 9))のどれも、右辺の配列を展開して差し込む(500 系と同じ)。\n\n_a = (1, 2)\n_a[1] = (8, 9) // 1,8,9 (要素数 3)\n_a[1] = IARRAY() // 1,9 (空の配列を差し込むと要素が消える)\n\nただし、代入先の要素がすでに配列やハッシュのときは、展開せずに丸ごと置き換える(Tc603-1以降。内側の配列やハッシュを丸ごと書き換える)。\n\n配列の中に配列を持つ値は、次のような関数が返す。\n\n- HASH_VALUES: 値が配列のハッシュを渡すと、その配列を1つの要素として含む配列を返す\n- PARSEJSON / PARSEYAML / PARSETOML / PARSEXML と、ファイルから読む FREADJSON などの関数\n- RESTOREVAR: 入れ子のまま保存した変数を復元する\n\n_v = PARSEJSON('[[1,2,3],[4]]') // 要素数 2。_v[0] は配列 (1,2,3)\n\nこうして得た配列の中の配列も、多次元代入で書き換えられる(Tc602-7以降。途中の値ごとの動作)。\n\n段階的に組み立てる\n\n内側のハッシュは自動では作られない。途中のハッシュは IHASH で作ってから、その中へ代入する。\n\n_m = IHASH()\n_m[\"a\"] = IHASH()\n_m[\"a\"][\"b\"] = 1\n_m[\"a\"][\"list\"] = IARRAY()\n_m[\"a\"][\"list\"] ,= \"p\"\n_m[\"a\"][\"list\"] ,= \"q\"\nDUMPJSON(_m) // {\"a\":{\"b\":1,\"list\":[\"p\",\"q\"]}}\n\n途中のハッシュを作らずに _m[\"c\"][\"d\"] = 1 と書くと、_m[\"c\"] はハッシュではなく配列 (1) になる(途中の値ごとの動作)。\n\n読み出し\n\n[ ] を続けて書くと、1つ目の [ ] の結果に2つ目の [ ] を、その結果に3つ目を……と順に適用する。\n\n_h = IHASH()\n_h[\"list\"] = (1, 2, 3)\n_h[\"sub\"] = IHASH(\"x\", 1)\n_a = (0, _h, 2)\n\n_h[\"sub\"][\"x\"] // 1\n_h[\"list\"][1] // 2\n_a[1][\"sub\"][\"x\"] // 1\n_a[1][\"list\"] // (1,2,3) そのものが返る\n\nそれぞれの [ ] は、その時点の値の型に応じて次のように動く。どの段でも、該当する要素が無いときは未定義の変数と同じく VOID になり、そこから先の [ ] も VOID になる(エラーにはならない。範囲外の要素)。\n\n| 値 | [x] の結果 |\n|---|---|\n| 配列 | x 番目の要素。要素が配列やハッシュならそのまま返る |\n| ハッシュ | キー x の値(キーの一致) |\n| 文字列 | 簡易配列として x 番目の要素 |\n| 数値 | x が 0 ならその値、それ以外は VOID |\n| VOID(未定義の変数など) | VOID |\n\nTc602-13 までは、配列の範囲外、ハッシュの無いキー、VOID への [ ] は空文字列だった(文字列と数値の範囲外はもとから VOID)。\n\n範囲指定も使える。配列の範囲指定 [a, b] の結果は、入れ子の要素をそのまま含む配列になる。範囲外なら空の配列になる。ハッシュの範囲指定は空文字列になる。\n\n_v = PARSEJSON('[[1,2],[3,4],[5,6]]')\n_v[0, 1] // 要素数 2 の配列。どちらの要素も配列のまま\n\n簡易配列のデリミタ\n\nSETDELIM で変数に設定したデリミタは、その変数に直接付けた1段目の [ ] にだけ効く。入れ子の中の文字列を簡易配列として読むときは、2段目以降の [ ] でデリミタを指定する。\n\n_s = \"a|b\"\nSETDELIM(_s, \"|\")\n_t = (_s, \"c\")\n_t[0][1] // VOID (2段目は \",\" で区切られるので範囲外)\n_t[0][1, \"|\"] // \"b\"\n\n文字列への埋め込み\n\n文字列の中でも [ ] を続けて書ける。\n\n\"値は %_h['sub']['x'] です\" // 値は 1 です\n\"値は %(_h['list'][1]) です\" // 値は 2 です\n\n入れ子の配列やハッシュそのものを埋め込むと、文字列化した結果になる。\n\n関数の引数と , 演算子\n\n関数の引数や , 演算子で展開されるのはいちばん外側の配列だけで、その要素にある配列やハッシュは展開されずに1つの要素のまま残る。ハッシュはいちばん外側でも展開されない。\n\n_v = PARSEJSON('[[1,2,3],[4]]')\n\nfunc(_v) // _argc は 2。_argv[0] は配列 (1,2,3)\nfunc(_v[0]) // _argc は 3。_argv は 1,2,3\nfunc(_v, 9) // _argc は 3。_argv[0] は配列 (1,2,3)\n_c = (_v, 9) // 要素数 3。_c[0] は配列 (1,2,3)\n\nARRAYSIZE(_v) // 2\nARRAYSIZE(_v[0]) // 3\n\n関数に入れ子の配列を渡すと、いちばん外側の配列は _argv そのものになる。受け取った側で「引数が1つの配列」と「引数が複数」を区別する手段は無いので、入れ子の配列を関数に渡すときは、ハッシュに包むか、配列の要素を1つずつ渡すとよい。\n\nGETTYPE に要素が1つだけの配列を渡すと、配列ではなくその要素の型を返す(500 系と同じ)。上の例では GETTYPE(_v[1]) は 4 ではなく 1 になる。\n\nforeach\n\n入れ子の配列やハッシュも foreach で回せる。ループ変数には要素がそのまま入るので、要素が配列やハッシュなら、さらに foreach で回したり [ ] で読んだりできる。\n\n_h = PARSEJSON('{\"a\":{\"x\":1,\"y\":2},\"b\":{\"x\":3}}')\nforeach _h ; _k, _sub {\n foreach _sub ; _k2, _v {\n // _k/_k2 = _v の順に a/x=1, a/y=2, b/x=3\n }\n}\n\nforeach _h[\"a\"] ; _k, _v { ... } // 内側だけを回す\n\n2変数の foreach は ハッシュ と フロー制御 を参照。\n\n値のコピー\n\n代入や引数渡しは値のコピーになる。入れ子の内側も含めて、コピー元とコピー先は互いに影響しない。\n\n_h = IHASH(\"a\", 1)\n_h[\"self\"] = _h\n_h[\"self\"][\"a\"] = 2\n_h[\"a\"] // 1 のまま\n\n内側を取り出して書き換えても、元の値は変わらない。元の値を変えたいときは、書き換えたものを代入し直すか、多次元代入を使う。\n\n_sub = _h[\"self\"]\n_sub[\"a\"] = 3 // _h[\"self\"][\"a\"] は 2 のまま\n_h[\"self\"] = _sub // これで _h[\"self\"][\"a\"] が 3 になる\n\n比較\n\n配列同士、ハッシュ同士の == は中身まで比べる。入れ子の内側も同じ規則で再帰的に比べる。\n\n- 配列同士: 要素数が同じで、各要素が順に等しければ真\n- ハッシュ同士: 要素数、キー、値がすべて一致すれば真(値としての振る舞い)\n\nPARSEJSON('{\"a\":[1,2]}') == PARSEJSON('{\"a\":[1,2]}') // 1\n\nASEARCH で要素がハッシュの配列を探すときも同じ規則で比べる。ただし、探す値に配列を渡すと引数として展開されるので、配列そのものを探すことはできない。\n\nASORT は、要素の配列やハッシュを文字列にして(int / double では 0 として)並べる(要素が配列やハッシュのとき)。\n\n多次元代入\n\n要素の要素へ直接代入できる。= のほか += ,= などすべての代入演算子で使える。\n\n_h[\"sub\"][\"x\"] = 5\n_h[\"list\"][0] += 10\n_h[\"list\"] ,= 4 // 内側の配列の末尾に追加\n_a[1][\"sub\"][\"y\"] = \"new\"\n\n右辺の値は、1次元の代入と同じく最後の [ ] の位置に入る。そのため、その位置の要素がスカラーなら、右辺の配列は展開して差し込まれる。内側の配列を丸ごと置き換えるときは、1つ手前の段に代入する。\n\n_h[\"list\"] = (1, 2, 3)\n_h[\"list\"][0] = (7, 8) // _h[\"list\"] は 7,8,2,3\n_h[\"list\"] = (7, 8) // _h[\"list\"] を (7,8) に置き換える\n\n範囲指定の代入(_h[\"list\"][0, 1] = \"R\")も1次元と同じように使える。\n\n内側の配列やハッシュを丸ごと書き換える\n\n範囲指定でない代入で、代入先の要素が今配列かハッシュのときは、右辺を展開せずに要素を丸ごと置き換える(Tc603-1以降)。配列の中の配列にも、1つ手前の段への代入と同じ書き方で、置き換え・追加・要素ごとの計算ができる。\n\n_v = PARSEJSON('[[1,2],[3,4]]')\n_v[0] = (7, 8, 9) // _v は (7,8,9),(3,4) 丸ごと置き換える\n_v[0] ,= 5 // _v は (7,8,9,5),(3,4) 内側の末尾に追加する\n_v[0] += 1 // _v は (8,9,10,6),(3,4) 内側の要素ごとに計算する\n_v[0] = _v[0] // 変わらない\n_v[0] = IARRAY // _v は (),(3,4) 空の配列に置き換える(要素は消えない)\n_v[0, 0] = IARRAY // _v は (3,4) 範囲指定なら展開して差し込む(要素を消す)\n\n- 代入先の要素がスカラーのとき、範囲外(まだ無い)のときは、これまでどおり右辺の配列を展開して差し込む(_a[1] = (8, 9) の挿入、_a[1] = IARRAY の削除)\n- 範囲指定の代入は、要素の型によらず展開して差し込む(Python のスライスへの代入と同じ)。内側の配列そのものを消すときは _v[0, 0] = IARRAY のように書く\n- 根がハッシュのとき(_h[\"list\"] = ...)は、もとから置き換えになる\n- 500 系には入れ子の配列が無いので、500 系の辞書の動作は変わらない\n\nTc602-13 までは、根が配列のときに内側の配列が展開されて、入れ子が崩れていた(_v[0] = _v[0] で _v が 1、2、(3,4) の3要素、_v[0] ,= 5 で 1、2、5、(3,4) の4要素になる)。\n\n途中の値ごとの動作\n\n多次元代入は、最後の段から根元の変数に向かって、それぞれの段の値を書き換えては1つ手前の段へ入れ直す。それぞれの段の値の型によって、次のように動く。\n\n| 途中の値 | 動作 |\n|---|---|\n| ハッシュ | キーの値を追加・上書きする |\n| 配列 | 要素を書き換える。範囲外なら、足りない分を VOID で埋めて末尾に追加する |\n| 文字列 | 簡易配列として書き換える |\n| 数値 | 配列に変えてから書き換える。0 番目は VOID になり、元の数値は失われる |\n| 無い(範囲外・キーが無い) | 未定義の変数と同じく、汎用配列を作って書き換える |\n\n_a = (\"p,q\", 1)\n_a[0][1] = \"Q\" // _a[0] は \"p,Q\"\n\n_h = IHASH(\"l\", (1, 2))\n_h[\"l\"][4] = 9 // _h[\"l\"] は 1,2,VOID,VOID,9\n\n_n = (1, 2.5)\n_n[1][2] = 9 // _n[1] は配列 (VOID,VOID,9)\n\n_e = IHASH()\n_e[\"n\"][\"x\"] = 5 // _e[\"n\"] は配列 (5) (ハッシュは作られない)\n_e[\"m\"][2] = 5 // _e[\"m\"] は配列 (VOID,VOID,5)\n\n_e[\"n\"][\"x\"] = 5 で _e[\"n\"] が (5) になるのは、キー \"x\" を配列の序数として読むと 0 番目になるため。未定義の変数への _x[\"x\"] = 5 と同じ結果になる。\n\nTc602-13 までは、無い段を空文字列の簡易配列として書き換えていたので、_e[\"n\"] は文字列 \"5\"、_e[\"m\"] は文字列 \",,5\" になっていた。\n\n書き換えた値を1つ手前の段へ入れ直すときは、その値が配列でも展開せず、1つの要素として置き換える。右辺の配列が展開されるのは最後の段だけなので、配列の中の配列も入れ子のまま書き換えられる。\n\n_v = PARSEJSON('[[1,2],[3,4]]')\n_v[0][0] = \"A\" // _v は (\"A\",2),(3,4)\n_v[1][0] = (7, 8) // _v は (\"A\",2),(7,8,4)\n\nただし、途中の段が範囲指定のとき(_v[0, 1][0] = 9)は、取り出した範囲の配列を書き換えてから、展開して元の範囲へ差し戻す。\n\nTc602-6 までは、配列の中の配列に多次元代入すると、書き換えた内側の配列が外側の配列へ展開されて入れ子が崩れていた(上の _v[0][0] = \"A\" で _v が \"A\"、2、(3,4) の3要素になる)。途中の値が数値の場合も、作った配列が外側へ展開されていた。参照渡し(&_v[0][0])の書き戻しも同じ。\n\n代入の根元\n\n代入の根元は変数でなければならない。(式)[0] = 1 や func()[0] = 1 などはエラー E0029 になる。\n\n参照渡し\n\nフィードバック演算子(参照渡し)でも要素の要素を渡せる(Tc600-4以降)。func(&_h[\"sub\"][\"x\"]) の中で _argv[0] を書き換えると _h[\"sub\"][\"x\"] が変わる。Tc600-3 では手前の次元が無視され、_h[\"x\"] に書き込まれていた。\n\n文字列化と保存\n\n入れ子の値を文字列にすると(TOSTR、文字列との連結、埋め込みなど)、内側もそのまま , や = でつながれるので、どこまでが内側なのかわからなくなる。\n\n_h = IHASH()\n_h[\"l\"] = (1, 2)\n_h[\"m\"] = IHASH(\"x\", 1)\nTOSTR(_h) // \"l=1,2,m=x=1\"\n\n入れ子の形を保ったまま扱いたいときは次の方法を使う。\n\n| 目的 | 方法 |\n|---|---|\n| 変数をファイルに保存して復元する | SAVEVAR / RESTOREVAR。入れ子は IARRAY{...} / IHASH{...} の形で保存される(保存形式) |\n| 中身を確認する | DUMPVAR(Tc600-4以降)。入れ子は (array)[ ... ] / (hash){ ... } で表示される。LOGGING(Tc602-8以降)も、入れ子の配列を ( )、ハッシュを { } で囲んで書き出す |\n| 文字列にして受け渡す | DUMPJSON と PARSEJSON。ただし JSON で表せない区別(整数のキーと文字列のキー、VOID と空文字列など)は失われる |\n\n制限\n\n- キーが配列のハッシュは、h[キー] の序数の第1要素がキーになるため、配列をキーにして引くことはできない(foreach や HASH_KEYS では取り出せる)。キーがハッシュなら h[キー] で引ける\n\n関連\n\n- ハッシュ\n- 配列\n- HASH_VALUES\n- PARSEJSON\n- DUMPJSON\n- SAVEVAR\n- DUMPVAR\n- 600 での変更点",
16147
16191
  "url": "https://yaya-shiori.github.io/yaya-docs/grammar/13-nesting/",
16148
16192
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/grammar/13-nesting.md"
16149
16193
  },
@@ -16152,7 +16196,7 @@
16152
16196
  "title": "600 での変更点(Tc600-3以降)",
16153
16197
  "source": "yaya_docs",
16154
16198
  "category": "yaya_other",
16155
- "content": "600 での変更点(Tc600-3以降)\n\nTc600-3 以降の YAYA(600 系)で、500 系(Tc574-1 まで)から変わった仕様をまとめる。\n\n概要\n\n| 項目 | 500 系 | 600 系 |\n|---|---|---|\n| 値の型 | VOID / 整数 / 実数 / 文字列 / 汎用配列 | + ハッシュ(連想配列) |\n| GETTYPE / GETTYPEEX | 0〜4 | ハッシュは 5 |\n| 配列の要素 | スカラーだけ | 配列やハッシュも要素にできる(入れ子) |\n| 要素への代入 | a[x] = v だけ | a[x][y]... = v(多次元代入)も可 |\n| foreach | foreach 式 ; 変数 | + foreach 式 ; キー変数, 値変数 |\n| セーブファイル | 配列 a:b:c | + ハッシュ \"k\"=v:...、入れ子 IARRAY{...} / IHASH{...} |\n| 新しいシステム関数 | ― | IHASH HASH_KEYS HASH_VALUES HASH_SPLIT HASH_EXIST HASH_SIZE、Tc601-1 から FREADJSON FREADXML PARSEJSON PARSEXML、Tc602-1 から FWRITEJSON FWRITEXML DUMPJSON DUMPXML、Tc602-3 から PARSEHEADER、Tc602-5 から FREADYAML FREADTOML PARSEYAML PARSETOML FWRITEYAML FWRITETOML DUMPYAML DUMPTOML |\n| 新しい警告 | ― | W0024(ハッシュを - * / % に使った)、Tc601-1 から W0025(ファイルを開けない)・W0026(JSON/XML/YAML/TOML を解析できない)、Tc602-1 から W0027(JSON/XML/YAML/TOML に変換できない) |\n\n文法は ハッシュ と 値の入れ子と多次元代入 を参照。\n\n500 系の a[x][y] = v は読み込み時にエラー E0029 だったので、この構文を含む既存の辞書は無い。\n\n既存の辞書に影響しうる変更\n\n配列の要素の VOID 同士の比較\n\n配列の要素同士を比べるとき、両方が VOID なら等しいとみなすようになった。スカラー同士の VOID の比較と揃えたもの。\n\n- (1, 未定義の変数) == (1, 未定義の変数) が 0 から 1 になる\n- ASEARCH(未定義の変数, 配列) が、配列の中の VOID の要素の位置を返すようになる(500 系では -1)\n- HASH_EXIST、ARRAYDEDUP、ハッシュ同士の == でも同じ\n\nキーと要素の両方が VOID のときだけの変更で、整数・実数・文字列の比較は変わらない。\n\nARRAYDEDUP に型の混ざった配列を渡したとき\n\n500 系では、整数・実数・文字列が混ざった配列を渡すと、結果が並び方しだいで変わっていた。600 系では、ハッシュのキーと同じ規則で重複を除き、数値 < 文字列 の順に並べる。\n\nARRAYDEDUP((10, \"9\", 9, \"a\", 1.0, 1, \"1\"))\n// 500 系: 1,1.000000,9,10,9,a\n// 600 系: 1.000000,9,10,a\n\n1.0、1、\"1\" は同じ値とみなされ、最初のもの(1.0)が残る。整数だけ、実数だけ、文字列だけの配列の結果は 500 系と同じ。\n\nsetter・watcher に渡る配列\n\nFUNCDECL_WRITE(setter)と FUNCDECL_READ(watcher)に渡る値が汎用配列のとき、500 系では値が壊れていた(setter の _argv[1] _argv[2] が空になる、watcher の _argv[1] が先頭要素だけになる、setter の戻り値をそのまま返すと変数が空になる)。\n\n600 系では、配列は _argv の要素として入れ子のまま渡る。_argv の要素数は setter が 3、watcher が 2 のまま変わらない。\n\n500 系で配列の変数に setter や watcher を付けても正しく動いていなかったので、実害はないはず。なお、添字への代入(a[0] = v)で setter が呼ばれないのは 500 系と同じ。\n\n新しいシステム関数と同じ名前\n\n- IHASH HASH_KEYS などと同じ名前のユーザー関数は、Conflict.名前 に改名され、呼び出しはシステム関数に向く(TOAUTOEX が追加されたときと同じ仕組み)\n- 同じ名前のグローバル変数は使えない。セーブファイルから復元するときに警告 W0002 が出る\n\nセーブファイルの互換性\n\n- ハッシュや入れ子を含まない変数は、書き出す内容も読み込む結果も 500 系と同じ。500 系のセーブファイルはそのまま読める\n- ハッシュや入れ子を含む変数は新しい書式で保存される(SAVEVAR を参照)\n- ダウングレードに注意: 600 系で保存したファイルを 500 系で読むと、ハッシュや入れ子を含む変数だけが崩れる(落ちはしない。ほかの変数には影響しない)。崩れたまま保存し直すと、元の内容は失われる\n\n500 系と共用する辞書\n\nTc574-2 以降の 500 系と Tc602-2 以降の 600 系では、#ifdef __AYA_SYSTEM_YAYA6__ や #ifdef __AYA_SYSTEM_SYSFUNC_関数名__ で 600 系向けの部分を書き分けられる。読み込まれない区間は構文を解析しないので、600 系の新しい構文や関数を書いても 500 系でエラーにならない。詳しくは プリプロセス を参照。\n\n性能\n\n_a ,= x と _a[i] = x は、500 系では1回ごとに配列を丸ごと複製していた(ループで配列を育てると要素数の2乗に比例して遅くなる)。600 系ではこの複製をしないので、ループで配列を育てる処理が大幅に速くなった。\n\n関連\n\n- ハッシュ\n- 値の入れ子と多次元代入\n- フロー制御(foreach)\n- SAVEVAR\n- プリプロセス",
16199
+ "content": "600 での変更点(Tc600-3以降)\n\nTc600-3 以降の YAYA(600 系)で、500 系(Tc574-1 まで)から変わった仕様をまとめる。\n\n概要\n\n| 項目 | 500 系 | 600 系 |\n|---|---|---|\n| 値の型 | VOID / 整数 / 実数 / 文字列 / 汎用配列 | + ハッシュ(連想配列) |\n| GETTYPE / GETTYPEEX | 0〜4 | ハッシュは 5 |\n| 配列の要素 | スカラーだけ | 配列やハッシュも要素にできる(入れ子) |\n| 要素への代入 | a[x] = v だけ | a[x][y]... = v(多次元代入)も可 |\n| foreach | foreach 式 ; 変数 | + foreach 式 ; キー変数, 値変数 |\n| セーブファイル | 配列 a:b:c | + ハッシュ \"k\"=v:...、入れ子 IARRAY{...} / IHASH{...} |\n| 新しいシステム関数 | ― | IHASH HASH_KEYS HASH_VALUES HASH_SPLIT HASH_EXIST HASH_SIZE、Tc601-1 から FREADJSON FREADXML PARSEJSON PARSEXML、Tc602-1 から FWRITEJSON FWRITEXML DUMPJSON DUMPXML、Tc602-3 から PARSEHEADER、Tc602-5 から FREADYAML FREADTOML PARSEYAML PARSETOML FWRITEYAML FWRITETOML DUMPYAML DUMPTOML、Tc602-11 から SQLOPEN SQLCLOSE SQLEXEC SQLQUERY |\n| 新しい警告 | ― | W0024(ハッシュを - * / % に使った)、Tc601-1 から W0025(ファイルを開けない)・W0026(JSON/XML/YAML/TOML を解析できない)、Tc602-1 から W0027(JSON/XML/YAML/TOML に変換できない)、Tc602-11 から W0029(SQLite の処理に失敗した)、Tc602-13 から W0030(SQL のパラメータより多くの値を渡した) |\n\n文法は ハッシュ と 値の入れ子と多次元代入 を参照。\n\n500 系の a[x][y] = v は読み込み時にエラー E0029 だったので、この構文を含む既存の辞書は無い。\n\n既存の辞書に影響しうる変更\n\n配列の要素の VOID 同士の比較\n\n配列の要素同士を比べるとき、両方が VOID なら等しいとみなすようになった。スカラー同士の VOID の比較と揃えたもの。\n\n- (1, 未定義の変数) == (1, 未定義の変数) が 0 から 1 になる\n- ASEARCH(未定義の変数, 配列) が、配列の中の VOID の要素の位置を返すようになる(500 系では -1)\n- HASH_EXIST、ARRAYDEDUP、ハッシュ同士の == でも同じ\n\nキーと要素の両方が VOID のときだけの変更で、整数・実数・文字列の比較は変わらない。\n\nARRAYDEDUP に型の混ざった配列を渡したとき\n\n500 系では、整数・実数・文字列が混ざった配列を渡すと、結果が並び方しだいで変わっていた。600 系では、ハッシュのキーと同じ規則で重複を除き、数値 < 文字列 の順に並べる。\n\nARRAYDEDUP((10, \"9\", 9, \"a\", 1.0, 1, \"1\"))\n// 500 系: 1,1.000000,9,10,9,a\n// 600 系: 1.000000,9,10,a\n\n1.0、1、\"1\" は同じ値とみなされ、最初のもの(1.0)が残る。整数だけ、実数だけ、文字列だけの配列の結果は 500 系と同じ。\n\nsetter・watcher に渡る配列\n\nFUNCDECL_WRITE(setter)と FUNCDECL_READ(watcher)に渡る値が汎用配列のとき、500 系では値が壊れていた(setter の _argv[1] _argv[2] が空になる、watcher の _argv[1] が先頭要素だけになる、setter の戻り値をそのまま返すと変数が空になる)。\n\n600 系では、配列は _argv の要素として入れ子のまま渡る。_argv の要素数は setter が 3、watcher が 2 のまま変わらない。\n\n500 系で配列の変数に setter や watcher を付けても正しく動いていなかったので、実害はないはず。なお、添字への代入(a[0] = v)で setter が呼ばれないのは 500 系と同じ。\n\n新しいシステム関数と同じ名前\n\n- IHASH HASH_KEYS などと同じ名前のユーザー関数は、Conflict.名前 に改名され、呼び出しはシステム関数に向く(TOAUTOEX が追加されたときと同じ仕組み)\n- 同じ名前のグローバル変数は使えない。セーブファイルから復元するときに警告 W0002 が出る\n\n無い要素への複合代入(Tc602-10以降)\n\n複合代入(+= -= *= /= %= とコロン付き変種)の左辺が、汎用配列の範囲外の要素やハッシュの無いキーのときは、未定義の変数と同じく VOID として計算するようになった。500 系や Tc602-9 までは空文字列として計算していたので、+= 数値 が文字列の連結になっていた。\n\n_c = IHASH()\n_c[\"a\"] += 1\n_c[\"a\"] += 1 // 500 系・Tc602-9 まで: \"11\"(文字列) Tc602-10 以降: 2(整数)\n\n_a = IARRAY\n_a[2] += 1 // 500 系・Tc602-9 まで: \"1\"(文字列) Tc602-10 以降: 1(整数)\n\n- 変わるのは右辺が数値の += だけ。-= *= /= %= は空文字列も数値として扱われていたので結果は同じ。+= \"文字列\" も同じ\n- 要素があって値が空文字列のとき(_a[0] = \"\" のあとの _a[0] += 1)は、これまでどおり \"1\" になる\n- 簡易配列(文字列)の範囲外の要素は、もとから VOID として計算していた\n- Tc602-10 では、読み出し(h[\"none\"] や範囲外の a[9])は空文字列を返すままだった。Tc603-1 から読み出しも VOID になった(下記)\n- 多次元代入では最後の段だけが対象。途中の段が無いとき(空の _h への _h[\"a\"][\"b\"] += 1)は、途中の値ごとの動作 のとおり書き換える。_h[\"a\"] は Tc602-13 までは文字列の \"1\"、Tc603-1 からは配列の (1) になる\n- ,= は変わらない\n\n無い要素の読み出し(Tc603-1以降)\n\n汎用配列の範囲外の要素、ハッシュの無いキー、VOID に [ ] を付けて読むと、未定義の変数と同じく VOID を返すようになった。それまでは空文字列を返していた(簡易配列と数値の範囲外はもとから VOID)。500 系も Tc574-8 から同じ(ハッシュを除く)。詳しくは 範囲外の要素 を参照。\n\n_h = IHASH()\n_h[\"none\"] == 0 // Tc602-13 まで: 0 Tc603-1 以降: 1\n_h[\"none\"] + 1 // Tc602-13 まで: \"1\"(文字列) Tc603-1 以降: 1(整数)\nGETTYPE(_h[\"none\"]) // Tc602-13 まで: 3 Tc603-1 以降: 0\n\n== \"\" や if の判定、文字列との連結の結果は変わらない。\n\n配列の中の配列やハッシュへの代入(Tc603-1以降)\n\n範囲指定でない代入(_v[0] = x、_v[0] ,= x、_v[0] += x など)で、代入先の要素が配列かハッシュのときは、右辺を展開せずに丸ごと置き換えるようになった。それまでは根が配列だと右辺の配列が展開されて、入れ子が崩れていた(_v[0] = _v[0] でも崩れた)。代入先の要素がスカラーのときの挿入・削除(_a[1] = (8, 9)、_a[1] = IARRAY)は変わらない。詳しくは 内側の配列やハッシュを丸ごと書き換える を参照。\n\n_v = PARSEJSON('[[1,2],[3,4]]')\n_v[0] ,= 5 // Tc602-13 まで: 1,2,5,(3,4) Tc603-1 以降: (1,2,5),(3,4)\n\nセーブファイルの互換性\n\n- ハッシュや入れ子を含まない変数は、書き出す内容も読み込む結果も 500 系と同じ。500 系のセーブファイルはそのまま読める\n- ハッシュや入れ子を含む変数は新しい書式で保存される(SAVEVAR を参照)\n- ダウングレードに注意: 600 系で保存したファイルを 500 系で読むと、ハッシュや入れ子を含む変数だけが崩れる(落ちはしない。ほかの変数には影響しない)。崩れたまま保存し直すと、元の内容は失われる\n\n500 系と共用する辞書\n\nTc574-2 以降の 500 系と Tc602-2 以降の 600 系では、#ifdef __AYA_SYSTEM_YAYA6__ や #ifdef __AYA_SYSTEM_SYSFUNC_関数名__ で 600 系向けの部分を書き分けられる。読み込まれない区間は構文を解析しないので、600 系の新しい構文や関数を書いても 500 系でエラーにならない。詳しくは プリプロセス を参照。\n\n性能\n\n_a ,= x と _a[i] = x は、500 系では1回ごとに配列を丸ごと複製していた(ループで配列を育てると要素数の2乗に比例して遅くなる)。600 系ではこの複製をしないので、ループで配列を育てる処理が大幅に速くなった。\n\n関連\n\n- ハッシュ\n- 値の入れ子と多次元代入\n- フロー制御(foreach)\n- SAVEVAR\n- プリプロセス",
16156
16200
  "url": "https://yaya-shiori.github.io/yaya-docs/other/changes-600/",
16157
16201
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/other/changes-600.md"
16158
16202
  },
@@ -16237,6 +16281,15 @@
16237
16281
  "url": "https://yaya-shiori.github.io/yaya-docs/other/yaya/",
16238
16282
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/other/yaya.md"
16239
16283
  },
16284
+ {
16285
+ "id": "yaya:other/yaya6-launch",
16286
+ "title": "YAYA 6 登場",
16287
+ "source": "yaya_docs",
16288
+ "category": "yaya_other",
16289
+ "content": "YAYA 6 登場\n\n<div class=\"y6-hero\" markdown>\n\nYAYA 6 — これまでで最も賢い YAYA。\n\n</div>\n\n<div class=\"y6-lead\" markdown>\n\nYAYA 6(Tc600 系)、一般提供を開始しました。\n\nハッシュと入れ子で値を自由に組み立て、JSON・XML・YAML・TOML をそのまま読み書きし、SQLite に思い出をたくわえ、配列はループで育てても重くならない。これまでで最も賢い YAYA が、あなたのゴーストのもとへ。\n\nそしてもちろん、500 系で書いた辞書はほぼそのまま動きます。\n\n</div>\n\n<div class=\"y6-cta\" markdown>\n\nダウンロード(GitHub Releases) 500 系からの移行ガイド\n\n</div>\n\n> ご注意 このページはお祝いムードの紹介ページです。雰囲気を優先して細かいところをかなり端折っています。正確な仕様は 600 での変更点 と各リファレンスを見てください。\n\n<div class=\"y6-stats\" markdown>\n\n- 6 種類の値の型(ハッシュが仲間入り)\n- 4 形式の構造化データを読み書き\n- 1 組み込みデータベース(SQLite)\n- 1/5000 配列を育てるときのコピー回数(理論値)\n\n</div>\n\nハイライト\n\n🗝️ ハッシュを、その手に\n\nYAYA 6 は、ついにネイティブのハッシュ(連想配列)を手に入れました。名前で値を引ける。それだけで、ゴーストの記憶はこんなにすっきりします。\n\nOnMouseDoubleClick\n{\n if GETTYPE(nadenade) != 5 {\n nadenade = IHASH() // ハッシュは IHASH で作る(GETTYPE は 5)\n }\n nadenade[reference[4]] += 1 // 当たり判定の名前ごとに数える\n\n _n = nadenade[reference[4]]\n \"\\0\\s[0]%(reference[4])を触られたの、これで%(_n)回目だよ。\\e\"\n}\n\nnadenade はハッシュのままセーブファイルに保存されるので、次に起動したときもちゃんと覚えています。foreach _h ; _k, _v { ... } と書けば、キーと値を同時に受け取って回せます。\n\n→ ハッシュ\n\n🧩 値を、思いのままの形に\n\n500 系の配列の要素は、数値か文字列だけでした。YAYA 6 では、配列の中に配列、ハッシュの中に配列、配列の中にハッシュ——どんな組み合わせでも入れ子にできます。そして [ ] をつなげれば、どれだけ奥の値でも直接読み書きできます(多次元代入)。\n\n_ghost = IHASH()\n_ghost[\"sakura\"] = IHASH(\"name\", \"さくら\")\n_ghost[\"sakura\"][\"surface\"] = (0, 5, 7)\n_ghost[\"kero\"] = IHASH(\"name\", \"うにゅう\")\n_ghost[\"kero\"][\"surface\"] = (10, 11)\n\n_ghost[\"sakura\"][\"surface\"] ,= 8 // 奥の配列に追加\n_ghost[\"kero\"][\"name\"] = \"けろちゃん\" // 奥の値を直接書き換え\n_ghost[\"sakura\"][\"surface\"][0] // 0\n\nforeach _ghost ; _id, _g {\n // _g[\"name\"] で名前、_g[\"surface\"] で表情の一覧\n}\n\n- = だけでなく += や ,= も、奥の値にそのまま使える\n- 入れ子のままセーブファイルに保存でき、JSON などにもそのままの形で書き出せる\n- 中身は DUMPVAR でひと目で確認できる\n\n途中の段のハッシュは自動では作られないので、上の例のように先に IHASH() で作っておくのがお約束です。\n\n→ 値の入れ子と多次元代入\n\n🌐 マルチフォーマット理解\n\nJSON・XML・YAML・TOML・SQLite・ヘッダ形式と YAYA 6 のハッシュを行き来する図\n\nJSON も XML も YAML も TOML も、読み込めば入れ子のハッシュと配列に。いじったら、そのまま書き戻せます。設定ファイルも、ほかのツールや SAORI が吐き出したデータも、もう STRSTR と SUBSTR で切り刻む必要はありません。\n\n_conf = FREADJSON(\"config.json\")\n_name = _conf[\"user\"][\"name\"]\n_conf[\"boot\"] += 1\nFWRITEJSON(\"config.json\", _conf, \"UTF-8\", 1) // 整形して書き戻す\n\nさらに PARSEHEADER は、SHIORI や SSTP、HTTP のような「キー: 値」形式の文字列を一瞬でハッシュに分解します。\n\n_r = PARSEHEADER(_raw)\n_r[\"start\"] // 1 行目(\"HTTP/1.1 200 OK\" など)\n_r[\"header\"][\"Charset\"] // ヘッダの値\n_r[\"body\"] // 空行より後ろ\n\n🧠 ゴーストに、長期記憶を\n\nSQLite を内蔵しました。データベースを開いたら、あとは SQL で好きなだけ覚えて、好きなだけ思い出せます。何万件の会話ログだって、もう怖くない。\n\nOnLoad\n{\n SQLOPEN(\"memory.db\")\n SQLEXEC(\"memory.db\", \"CREATE TABLE IF NOT EXISTS said(word TEXT)\")\n}\n\nRemember\n{\n SQLEXEC(\"memory.db\", \"INSERT INTO said VALUES(?)\", _argv[0])\n}\n\nOnKuchiguse\n{\n _sql = \"SELECT word, count(*) AS n FROM said GROUP BY word ORDER BY n DESC LIMIT 1\"\n _top = SQLQUERY(\"memory.db\", _sql)\n \"\\0\\s[0]あなたの口ぐせは「%(_top[0]['word'])」だね。\\e\"\n}\n\n結果の 1 行はそのまま「列名 → 値」のハッシュになって返ってきます。\n\n→ SQLOPEN・SQLEXEC・SQLQUERY\n\n⚡ 配列を育てても、重くならない\n\n配列を 1 万要素まで育てるループの要素コピー回数(理論値)。YAYA 5 は約 5,000 万回、YAYA 6 は約 1 万回\n\n500 系では _a ,= x や _a[i] = x のたびに、配列を丸ごと複製していました。要素が増えるほど 1 回ごとの手間も増えるので、ループで配列を育てると要素数の 2 乗に比例して遅くなっていたのです。YAYA 6 はこの複製をやめました。大きな配列を作る辞書ほど、違いを体感できるはずです。\n\nベンチマーク\n\nYAYA 5 との比較です(自社調べ)。\n\n| 項目 | YAYA 5(Tc574) | YAYA 6(Tc603) |\n|---|---|---|\n| 値の型の種類 | 5 | 6 |\n| GETTYPE が返す最大の値 | 4 | 5 |\n| 配列の要素にできるもの | スカラーだけ | 配列やハッシュも |\n| a[x][y] = v | 読み込みエラー | 使える |\n| foreach で受け取れる変数 | 1 | 2(キーと値) |\n| 読み書きできる構造化データの形式 | 0 | 4(JSON / XML / YAML / TOML) |\n| 組み込みデータベース | なし | SQLite |\n| 1 万要素の配列を育てるときのコピー(理論値) | 約 5,000 万回 | 約 1 万回 |\n| 500 系のセーブファイル | ― | そのまま読める |\n\n進化の軌跡\n\nTc600-3 から Tc603-1 までの主な追加機能の年表\n\nYAYA 600 系は、Tc600-3 のハッシュと入れ子から始まり、リリースを重ねるごとに能力を増やしてきました。そして Tc603-1 で、初の正式版になりました。\n\n安全性と互換性\n\n強くなっても、あなたの辞書を置き去りにはしません。\n\n- 500 系の辞書はほぼそのまま動きます。 500 系でできていたことの動きは、ごく一部を除いて変わりません(変わった点は下の「既知の制限事項」を参照)。多次元代入の a[x][y] = v は 500 系では読み込みエラーだった書き方なので、既存の辞書の意味が変わることもありません\n- 500 系のセーブファイルはそのまま読めます。 ハッシュや入れ子を含まない変数は、書き出す内容も 500 系と同じです\n- 新しい関数と名前がかぶっても大丈夫。 IHASH などと同じ名前のユーザー関数は、Conflict.名前 に自動で改名されます\n- 両方で動く辞書も書けます。 #ifdef __AYA_SYSTEM_YAYA6__ で 600 系向けの部分を書き分ければ、500 系でもエラーになりません(プリプロセス)\n\n既知の制限事項\n\n- ダウングレードに注意。 600 系で保存したセーブファイルを 500 系で読むと、ハッシュや入れ子を含む変数が崩れます。崩れたまま保存し直すと元に戻りません\n- 新しいシステム関数と同じ名前のグローバル変数は使えません\n- 無い要素の読み出しや、VOID 同士の比較など、細かい動きがいくつか変わっています。ほとんどの辞書には影響しませんが、一覧は 600 での変更点 で確認できます\n\nモデルカード\n\n<div class=\"y6-card\" markdown>\n\n| 項目 | 内容 |\n|---|---|\n| 名前 | YAYA 6(Tc600 系) |\n| 種別 | SHIORI(SAORI・MAKOTO・プラグインとしても動きます) |\n| 開発 | YAYA 整備班、steve green 氏 |\n| アーキテクチャ | C++ 製の文字列処理 DLL |\n| 文法 | C 言語ふう |\n| 学習データ | なし。あなたが書いた辞書がすべて |\n| パラメータ数 | _argv の数だけ |\n| コンテキスト長 | メモリの続く限り |\n| ハルシネーション | 辞書に書いてないことは言いません |\n| ライセンス | BSD 3-Clause |\n| 料金 | 無料(入力も出力も) |\n\n</div>\n\n謝辞\n\nYAYA 6 は、steve green 氏 の開発ブランチを取り込み、500 系との互換性を調整して生まれました。そして長年 YAYA で辞書を書き続けてきた、すべてのゴースト作者に感謝を。\n\nはじめよう\n\nこれからゴーストを作るなら:紺野ややめ + 伺か Vibe Coding 道具箱\n\nテンプレートゴースト 紺野ややめ には、600 系の YAYA が最初から入っています。改造すれば、そのまま自分のゴーストになります。\n\nさらに、AI コーディングエージェント(Claude Code、Codex、GitHub Copilot など)と一緒に開発するための Vibe Coding 道具箱(開発キット)も同梱。辞書のチェックや SSP での動作確認まで、エージェントが手伝ってくれます。YAYA 6 の新機能も、エージェントに頼めばすぐ辞書に取り入れられます。\n\n1. Releases から konnoyayame.nar をダウンロードして、SSP にインストールする\n2. 手で改造するなら、ghost/master/dic/normal/ の辞書を編集する(辞書の構成は GHOST.md)\n3. AI と改造するなら、ゴーストのフォルダでエージェントを起動して「セットアップして」と頼む(準備するものは DEVKIT-GUIDE.md)\n\n道具箱は Windows と Claude Code の組み合わせで作られ、動作が確かめられています。\n\n手元のゴーストを YAYA 6 にするなら\n\n1. GitHub Releases から最新版をダウンロードする\n2. ゴーストの yaya.dll を差し替える(念のため、先にゴーストのバックアップを)\n3. 600 での変更点 にざっと目を通す\n4. 辞書に IHASH() と書いてみる\n\n紺野ややめをもとにしていないゴーストにも、Vibe Coding 道具箱だけを入れられます(別の YAYA ゴーストに開発キットを入れる)。\n\n関連\n\n- 600 での変更点\n- ハッシュ\n- 値の入れ子と多次元代入\n- プリプロセス\n- YAYAについて\n\n<div class=\"y6-byline\" markdown>\n\n---\n\nYAYA 6 の互換性確保・デバッグ・文・図: Claudia\n\n</div>",
16290
+ "url": "https://yaya-shiori.github.io/yaya-docs/other/yaya6-launch/",
16291
+ "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/other/yaya6-launch.md"
16292
+ },
16240
16293
  {
16241
16294
  "id": "yaya:startup/creating-ghost",
16242
16295
  "title": "YAYAでゴーストを作る",
@@ -16383,10 +16436,10 @@
16383
16436
  },
16384
16437
  {
16385
16438
  "id": "yaya:tips/complex-in-check",
16386
- "title": "複雑な _in_ チェック",
16439
+ "title": "複雑な `_in_` チェック",
16387
16440
  "source": "yaya_docs",
16388
16441
  "category": "yaya_tips",
16389
- "content": "複雑な in チェック\n\n概要\n\nゴーストのトーク判定などで、文字列に何かが含まれているかどうかを複雑な条件で判定するための関数。\n\n_in_ 演算子は1つの文字列が含まれるかどうかしか調べられないが、この関数を使うと AND・OR・否定を組み合わせた条件をまとめて書ける。\n\n(文責:浮子屋)\n\n関数\n\nInStrCheck\n\nInStrCheck(チェック対象文字列, チェック文字列1, チェック文字列2, ...)\n\nチェック対象文字列の中にチェック文字列が含まれているかどうかを判定し、条件を満たせば 1、満たさなければ 0 を返す。\n\n- 2つ目以降の引数(チェック文字列)はすべて AND 条件になる\n- チェック文字列は | で区切れる。区切った場合は OR 条件になる\n- チェック文字列の先頭が ! の場合、「含まれる」「含まれない」の判定が逆になる\n- ! による逆転は、| で区切ったあとの各文字列ごとに評価される\n\n判定の例\n\n// hoge が含まれ、かつ hemo が含まれるか → 1\nInStrCheck(\"hogehemo\", \"hoge\", \"hemo\")\n\n// hoge が含まれず、かつ hemo が含まれるか → 0\nInStrCheck(\"hogehemo\", \"!hoge\", \"hemo\")\n\n// hoge が含まれる、または pepe が含まれるか → 1\nInStrCheck(\"hogehemo\", \"hoge|pepe\")\n\n// (hoge が含まれる、または pepe が含まれない)、かつ humu が含まれないか → 1\nInStrCheck(\"hogehemo\", \"hoge|!pepe\", \"!humu\")\n\nコード\n\n//*****************************************************************************\n//\tInStrCheck\n//\t対象文字列の中にチェック文字列が含まれているかどうかを\n//\t複雑な条件によって判定する\n//\targv0:\t\tチェック対象文字列\n//\targv1以降:\tチェック文字列\n//\n//\tresult:0(チェック失敗)または1(チェック合格)\n//\n//\t・argv1以降の引数はAND条件となる。\n//\t・チェック文字列は | で分割可能。この場合はOR条件となる。\n//\t・チェック文字列の先頭が ! の場合、含まれる、含まれないの判定が逆になる\n//\t・上記逆転は分割後に評価される\n//*****************************************************************************\nInStrCheck\n{\n\tfor _i=1 ; _i<_argc ; _i++ {\n\t\t_words=SPLIT(_argv[_i],'|')\n\t\t_isHit=0\n\t\tforeach _words ; _word {\n\t\t\t_onHit=1\n\t\t\tif SUBSTR(_word,0,1) == '!' {\n\t\t\t\t_word=SUBSTR(_word,1,STRLEN(_word)-1)\n\t\t\t\t_onHit=0\n\t\t\t}\n\t\t\tif _word _in_ _argv[0] {\n\t\t\t\t_isHit=_isHit || _onHit\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_isHit=_isHit || (1-_onHit)\n\t\t\t}\n\t\t}\n\t\tif ! _isHit {\n\t\t\t0\n\t\t\treturn\n\t\t}\n\t}\n\t1\n}\n\n使用例\n\nOnCommunicate\n{\n if InStrCheck(reference[1], \"好き|大好き\", \"!嫌い\") {\n \"\\0\\s[1]ありがとう!\\e\"\n }\n}\n\n関連項目\n\n- 演算(in 演算子)\n- SPLIT\n- SUBSTR",
16442
+ "content": "複雑な _in_ チェック\n\n概要\n\nゴーストのトーク判定などで、文字列に何かが含まれているかどうかを複雑な条件で判定するための関数。\n\n_in_ 演算子は1つの文字列が含まれるかどうかしか調べられないが、この関数を使うと AND・OR・否定を組み合わせた条件をまとめて書ける。\n\n(文責:浮子屋)\n\n関数\n\nInStrCheck\n\nInStrCheck(チェック対象文字列, チェック文字列1, チェック文字列2, ...)\n\nチェック対象文字列の中にチェック文字列が含まれているかどうかを判定し、条件を満たせば 1、満たさなければ 0 を返す。\n\n- 2つ目以降の引数(チェック文字列)はすべて AND 条件になる\n- チェック文字列は | で区切れる。区切った場合は OR 条件になる\n- チェック文字列の先頭が ! の場合、「含まれる」「含まれない」の判定が逆になる\n- ! による逆転は、| で区切ったあとの各文字列ごとに評価される\n\n判定の例\n\n// hoge が含まれ、かつ hemo が含まれるか → 1\nInStrCheck(\"hogehemo\", \"hoge\", \"hemo\")\n\n// hoge が含まれず、かつ hemo が含まれるか → 0\nInStrCheck(\"hogehemo\", \"!hoge\", \"hemo\")\n\n// hoge が含まれる、または pepe が含まれるか → 1\nInStrCheck(\"hogehemo\", \"hoge|pepe\")\n\n// (hoge が含まれる、または pepe が含まれない)、かつ humu が含まれないか → 1\nInStrCheck(\"hogehemo\", \"hoge|!pepe\", \"!humu\")\n\nコード\n\n//*****************************************************************************\n//\tInStrCheck\n//\t対象文字列の中にチェック文字列が含まれているかどうかを\n//\t複雑な条件によって判定する\n//\targv0:\t\tチェック対象文字列\n//\targv1以降:\tチェック文字列\n//\n//\tresult:0(チェック失敗)または1(チェック合格)\n//\n//\t・argv1以降の引数はAND条件となる。\n//\t・チェック文字列は | で分割可能。この場合はOR条件となる。\n//\t・チェック文字列の先頭が ! の場合、含まれる、含まれないの判定が逆になる\n//\t・上記逆転は分割後に評価される\n//*****************************************************************************\nInStrCheck\n{\n\tfor _i=1 ; _i<_argc ; _i++ {\n\t\t_words=SPLIT(_argv[_i],'|')\n\t\t_isHit=0\n\t\tforeach _words ; _word {\n\t\t\t_onHit=1\n\t\t\tif SUBSTR(_word,0,1) == '!' {\n\t\t\t\t_word=SUBSTR(_word,1,STRLEN(_word)-1)\n\t\t\t\t_onHit=0\n\t\t\t}\n\t\t\tif _word _in_ _argv[0] {\n\t\t\t\t_isHit=_isHit || _onHit\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_isHit=_isHit || (1-_onHit)\n\t\t\t}\n\t\t}\n\t\tif ! _isHit {\n\t\t\t0\n\t\t\treturn\n\t\t}\n\t}\n\t1\n}\n\n使用例\n\nOnCommunicate\n{\n if InStrCheck(reference[1], \"好き|大好き\", \"!嫌い\") {\n \"\\0\\s[1]ありがとう!\\e\"\n }\n}\n\n関連項目\n\n- 演算(_in_ 演算子)\n- SPLIT\n- SUBSTR",
16390
16443
  "url": "https://yaya-shiori.github.io/yaya-docs/tips/complex-in-check/",
16391
16444
  "rawUrl": "https://raw.githubusercontent.com/YAYA-shiori/yaya-docs/refs/heads/main/tips/complex-in-check.md"
16392
16445
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ukagaka-doc-mcp",
3
- "version": "0.6.0",
3
+ "version": "0.6.1",
4
4
  "description": "MCP server for searching Ukagaka (伺か) technical documentation: UKADOC, YAYA docs, 里々Wiki, and 蒼空(aosora) Wiki",
5
5
  "keywords": [
6
6
  "mcp",