@famibee/skynovel 1.64.21 → 1.65.0

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 (84) hide show
  1. package/dist/Button.js +59 -57
  2. package/dist/Button.js.map +1 -1
  3. package/dist/CmnTween.js +921 -109
  4. package/dist/CmnTween.js.map +1 -1
  5. package/dist/EventMng.js +1 -1
  6. package/dist/EventMng.js.map +1 -1
  7. package/dist/GrpLayer.js +10 -11
  8. package/dist/GrpLayer.js.map +1 -1
  9. package/dist/LayerMng.js +43 -44
  10. package/dist/LayerMng.js.map +1 -1
  11. package/dist/Main.js.map +1 -1
  12. package/dist/RubySpliter.js +18 -15
  13. package/dist/RubySpliter.js.map +1 -1
  14. package/dist/ScriptIterator.js +1 -2
  15. package/dist/ScriptIterator.js.map +1 -1
  16. package/dist/SndBuf.js +83 -77
  17. package/dist/SndBuf.js.map +1 -1
  18. package/dist/SpritesMng.js +50 -46
  19. package/dist/SpritesMng.js.map +1 -1
  20. package/dist/TxtLayer.js +435 -420
  21. package/dist/TxtLayer.js.map +1 -1
  22. package/dist/Variable.js +1 -1
  23. package/dist/sn/Button.d.ts.map +1 -1
  24. package/dist/sn/CmnTween.d.ts +4 -4
  25. package/dist/sn/CmnTween.d.ts.map +1 -1
  26. package/dist/sn/FocusMng.d.ts +2 -2
  27. package/dist/sn/FocusMng.d.ts.map +1 -1
  28. package/dist/sn/FrameMng.d.ts.map +1 -1
  29. package/dist/sn/GrpLayer.d.ts.map +1 -1
  30. package/dist/sn/Log.d.ts.map +1 -1
  31. package/dist/sn/Main.d.ts.map +1 -1
  32. package/dist/sn/Pages.d.ts.map +1 -1
  33. package/dist/sn/Reading.d.ts +1 -0
  34. package/dist/sn/Reading.d.ts.map +1 -1
  35. package/dist/sn/RubySpliter.d.ts.map +1 -1
  36. package/dist/sn/SndBuf.d.ts.map +1 -1
  37. package/dist/sn/SpritesMng.d.ts.map +1 -1
  38. package/dist/sn/SysBase.d.ts.map +1 -1
  39. package/dist/sn/TxtLayer.d.ts.map +1 -1
  40. package/dist/sn/TxtStage.d.ts +2 -0
  41. package/dist/sn/TxtStage.d.ts.map +1 -1
  42. package/dist/web2.js.map +1 -1
  43. package/dist_app/Button.js +59 -57
  44. package/dist_app/Button.js.map +1 -1
  45. package/dist_app/CmnTween.js +921 -109
  46. package/dist_app/CmnTween.js.map +1 -1
  47. package/dist_app/EventMng.js +1 -1
  48. package/dist_app/EventMng.js.map +1 -1
  49. package/dist_app/GrpLayer.js +10 -11
  50. package/dist_app/GrpLayer.js.map +1 -1
  51. package/dist_app/LayerMng.js +2 -3
  52. package/dist_app/LayerMng.js.map +1 -1
  53. package/dist_app/Main.js.map +1 -1
  54. package/dist_app/RubySpliter.js +18 -15
  55. package/dist_app/RubySpliter.js.map +1 -1
  56. package/dist_app/ScriptIterator.js +1 -2
  57. package/dist_app/ScriptIterator.js.map +1 -1
  58. package/dist_app/SndBuf.js +83 -77
  59. package/dist_app/SndBuf.js.map +1 -1
  60. package/dist_app/SpritesMng.js +46 -42
  61. package/dist_app/SpritesMng.js.map +1 -1
  62. package/dist_app/TxtLayer.js +435 -420
  63. package/dist_app/TxtLayer.js.map +1 -1
  64. package/dist_app/Variable.js +1 -1
  65. package/dist_app/app2.js.map +1 -1
  66. package/dist_app/sn/Button.d.ts.map +1 -1
  67. package/dist_app/sn/CmnTween.d.ts +4 -4
  68. package/dist_app/sn/CmnTween.d.ts.map +1 -1
  69. package/dist_app/sn/FocusMng.d.ts.map +1 -1
  70. package/dist_app/sn/FrameMng.d.ts.map +1 -1
  71. package/dist_app/sn/GrpLayer.d.ts.map +1 -1
  72. package/dist_app/sn/Log.d.ts.map +1 -1
  73. package/dist_app/sn/Main.d.ts.map +1 -1
  74. package/dist_app/sn/Pages.d.ts.map +1 -1
  75. package/dist_app/sn/Reading.d.ts +1 -0
  76. package/dist_app/sn/Reading.d.ts.map +1 -1
  77. package/dist_app/sn/RubySpliter.d.ts.map +1 -1
  78. package/dist_app/sn/SndBuf.d.ts.map +1 -1
  79. package/dist_app/sn/SpritesMng.d.ts.map +1 -1
  80. package/dist_app/sn/SysBase.d.ts.map +1 -1
  81. package/dist_app/sn/TxtLayer.d.ts.map +1 -1
  82. package/dist_app/sn/TxtStage.d.ts +2 -0
  83. package/dist_app/sn/TxtStage.d.ts.map +1 -1
  84. package/package.json +4 -4
package/dist/Main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Main.js","sources":["../src/sn/Config.ts","../src/sn/AnalyzeTagArg.ts","../src/sn/Grammar.ts","../src/sn/Main.ts"],"sourcesContent":["/* ***** BEGIN LICENSE BLOCK *****\n\tCopyright (c) 2018-2025 Famibee (famibee.blog38.fc2.com)\n\n\tThis software is released under the MIT License.\n\thttp://opensource.org/licenses/mit-license.php\n** ***** END LICENSE BLOCK ***** */\n\nimport {CmnLib} from './CmnLib';\nimport type {SysBase} from './SysBase';\nimport {ConfigBase, SEARCH_PATH_ARG_EXT, type T_CFG_RAW} from './ConfigBase';\n\nexport const PROTOCOL_USERDATA\t= 'userdata:/';\nexport const PROTOCOL_DL\t\t= 'downloads:/';\n\n\nexport class Config extends ConfigBase {\n\tstatic\tasync\tgenerate(sys: SysBase) {\n\t\tconst c = new Config(sys);\n\t\tconst fn = sys.arg.cur +'prj.json';\n\t\tconst res = await sys.fetch(fn);\n\t\tif (! res.ok) throw Error(res.statusText);\n\n\t\tconst dec = await sys.dec(fn, await res.text());\n\t\tawait c.load(<T_CFG_RAW>JSON.parse(dec));\n\t\treturn c;\n\t}\n\n\tprotected\tconstructor(override readonly sys: SysBase) {super(sys)}\n\n\tprotected\toverride\tasync load(oCfg: T_CFG_RAW) {\n\t\toCfg.window ??= {width: 300, height: 300};\n\t\tCmnLib.stageW = oCfg.window.width;\n\t\tCmnLib.stageH = oCfg.window.height;\n\t\tCmnLib.debugLog = oCfg.debug.debugLog;\n\t\tawait CmnLib.init();\n\n\t\treturn super.load(oCfg);\n\t}\n\n\toverride\tsearchPath(fn: string, extptn: SEARCH_PATH_ARG_EXT = SEARCH_PATH_ARG_EXT.DEFAULT): string {\n\t\tif (fn.startsWith(PROTOCOL_DL)) {\n\t\t\treturn this.sys.path_downloads + fn.slice(11);\n\t\t}\n\t\tif (fn.startsWith(PROTOCOL_USERDATA)) {\n\t\t\treturn this.sys.path_userdata + 'storage/'+ fn.slice(10);\n\t\t}\n\n\t\treturn super.searchPath(fn, extptn);\n\t}\n\n}\n","/* ***** BEGIN LICENSE BLOCK *****\n\tCopyright (c) 2018-2025 Famibee (famibee.blog38.fc2.com)\n\n\tThis software is released under the MIT License.\n\thttp://opensource.org/licenses/mit-license.php\n** ***** END LICENSE BLOCK ***** */\n\nexport type PRM = {\n\tval\t\t: string;\n\tdef?\t: string;\n}\nexport type HPRM = {\n\t[key: string]: PRM,\n}\n\nexport type PRM_RANGE = {\n\tk_ln\t: number;\n\tk_ch\t: number;\n\tv_ln\t: number;\n\tv_ch\t: number;\n\tv_len\t: number;\n}\n\nexport function idx2LnCol(sSn: string, idx: number, lenNm = 0, ln = 0, ch = 0): {ln: number; ch: number;} {\n\tconst sBefore = sSn.slice(0, idx);\n\tconst a = sBefore.split('\\n');\n\tconst len = a.length;\n\treturn {\n\t\tln\t: ln +len -1,\n\t\tch\t: len < 2 ?ch +1+lenNm +idx :a.at(-1)?.length ?? 0,\n\t};\n}\n\n\nexport class AnalyzeTagArg {\n\t// 87 match 2725 step(0.5ms) PCRE2 https://regex101.com/r/aeN57J/1\n\t/*\n;[^\\n]*\n|\t(?<key>[^\\s=\"'#|;]+)\n\t(?: \\s | ;[^\\n]*\\n)*\n\t=\n\t(?: \\s | ;[^\\n]*\\n)*\n\t(?:\t(?<val> [^\\s\"'#|;]+)\n\t|\t([\"'#]) (?<val2>.*?) \\3 )\n\t(?: \\|\n\t\t(?: (?<def> [^\\s\"'#;]+)\n\t|\t([\"'#]) (?<def2>.*?) \\6 ) )?\n|\t(?<literal>[^\\s;]+)\n\t*/\n\treadonly\t#REG_TAGARG\t= /;[^\\n]*|(?<key>[^\\s=\"'#|;]+)(?:\\s|;[^\\n]*\\n)*=(?:\\s|;[^\\n]*\\n)*(?:(?<val>[^\\s\"'#|;]+)|([\"'#])(?<val2>.*?)\\3)(?:\\|(?:(?<def>[^\\s\"'#;]+)|([\"'#])(?<def2>.*?)\\6))?|(?<literal>[^\\s;]+)/g;\n\n\t// 【属性 = 値 | 省略値】の分析\n\tparse(args: string): void {\n\t\tthis.#hPrm = {};\n\t\tthis.#isKomeParam = false;\n\t\tfor (const {groups} of args.matchAll(this.#REG_TAGARG)) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tconst {key, val, val2, def, def2, literal} = groups!;\n\t\t\tif (key) this.#hPrm[key] = {\n\t\t\t\tval: val ?? val2 ?? '',\n\t\t\t\tdef: def ?? def2\n\t\t\t};\n\t\t\telse if (literal) {\n\t\t\t\tif (literal === '*') this.#isKomeParam = true;\n\t\t\t\telse this.#hPrm[literal] = {val: '1'};\n\t\t\t}\n\t\t}\n\t}\n\n\t// 属性と値の位置をまとめて返す\n\tparseinDetail(token: string, lenNm: number, ln: number, ch: number): {[key: string]: PRM_RANGE} {\n\t\tconst hRng: {[key: string]: PRM_RANGE} = {};\n\n\t\tconst sSn = token.slice(1+lenNm, -1);\n\t\tfor (const {groups, index, 0: z} of sSn.matchAll(this.#REG_TAGARG)) {\n\t\t\tif (! index) continue;\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tconst {key, val, val2='', literal} = groups!;\n\t\t\tif (literal) {\n\t\t\t\tif (literal.endsWith('=')) {\n\t\t\t\t\tconst lenVnm = literal.length -1;\n\t\t\t\t\tconst {ch: k_ch} = idx2LnCol(sSn, index +lenVnm, lenNm, ln, ch);\n\t\t\t\t\thRng[literal.slice(0, -1)] = {\n\t\t\t\t\t\tk_ln: ln,\n\t\t\t\t\t\tk_ch: k_ch -lenVnm,\n\t\t\t\t\t\tv_ln: ln,\n\t\t\t\t\t\tv_ch: k_ch +1,\n\t\t\t\t\t//\tv_ch: ch +1+lenNm +literal.length +1,\n\t\t\t\t\t\tv_len: 0,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (! key) continue;\n\n\t\t\tconst {ln: k_ln, ch: k_ch} = idx2LnCol(sSn, index, lenNm, ln, ch);\n\t\t\tconst {ln: v_ln, ch: v_ch} = idx2LnCol(sSn, index +z.lastIndexOf(val ?? val2) -(val ?0 :1), lenNm, ln, ch);\n\t\t\thRng[key] = {k_ln, k_ch, v_ln, v_ch, v_len: val ?val.length :val2.length +2};\n\t\t}\n\n\t\treturn hRng;\n\t}\n\n\t#hPrm: HPRM\t= {};\n\tget hPrm() {return this.#hPrm}\n\n\t#isKomeParam\t= false;\n\tget isKomeParam() {return this.#isKomeParam}\n\n}\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/* ***** BEGIN LICENSE BLOCK *****\n\tCopyright (c) 2019-2025 Famibee (famibee.blog38.fc2.com)\n\n\tThis software is released under the MIT License.\n\thttp://opensource.org/licenses/mit-license.php\n** ***** END LICENSE BLOCK ***** */\n\nimport {AnalyzeTagArg} from './AnalyzeTagArg';\nimport {getFn} from './CmnLib';\nimport {type T_Config, SEARCH_PATH_ARG_EXT} from './ConfigBase';\n\n\nexport type TArg = {\n\t':タグ名'?\t: string;\n\tcanskip?\t: boolean;\n\n\tlayer?\t: string;\t// レイヤ系\n\tclass?\t: string;\n\tindex?\t: number;\n\tdive?\t: string;\n\tpage?\t: string;\n\talpha?\t: number;\n\tpivot_x?: number;\n\tpivot_y?: number;\n\trotation?\t: number;\n\tscale_x?: number;\n\tscale_y?: number;\n\tvisible?: boolean;\n\tblendmode?\t: string;\n\n\tleft?\t: number;\n\ttop?\t: number;\n\twidth?\t: number;\n\theight?\t: number;\n\tpl?\t\t: number;\n\tpr?\t\t: number;\n\tpt?\t\t: number;\n\tpb?\t\t: number;\n\n\trotate?\t: number;\n\tin_style?\t: string;\n\tout_style?\t: string;\n\tffs?\t: string;\n\tnoffs?\t: string;\n\tkinsoku_sol?\t: string;\n\tkinsoku_eol?\t: string;\n\tkinsoku_dns?\t: string;\n\tkinsoku_bura?\t: string;\n\tbura?\t: boolean;\n\tbreak_fixed?\t\t: boolean;\n\tbreak_fixed_left?\t: number;\n\tbreak_fixed_top?\t: number;\n\n\ttime?\t: number;\n\trule?\t: string;\n\tglsl?\t: string;\n\trender?\t: boolean;\n\n\tpos?\t: string;\n\ttext?\t: string;\n\twait?\t: number;\n\trecord?\t: boolean;\n\tpic?\t: string;\n\tenabled?: boolean;\n\thint?\t\t: string;\n\thint_style?\t: string;\n\thint_opt?\t: string;\n\tclickse?\t: string;\n\tenterse?\t: string;\n\tleavese?\t: string;\n\tclicksebuf?\t: string;\n\tentersebuf?\t: string;\n\tleavesebuf?\t: string;\n\tonenter?\t: string;\n\tonleave?\t: string;\n\n\tt?\t: string;\n\tr?\t: string;\n\texp?\t: string;\n\tchar?\t: string;\n\tsesame?\t: string;\n\tcast?\t: string;\n\tval?\t: string;\n\tflags?\t: string;\n\treg?\t: string;\n\tlen?\t: string;\n\turl?\t: string;\n\tformat?\t: string;\n\tchain?\t: string;\n\tpath?\t: string;\n\n\tfn?\t\t: string;\n\tface?\t: string;\n\tlabel?\t: string;\n\tcall?\t: boolean;\n\tglobal?\t: boolean;\n\tname?\t: string;\n\tclear_local_event?\t: boolean;\n\n\tstyle?\t\t\t: string;\n\tstyle_hover?\t: string;\n\tstyle_clicked?\t: string;\n\tr_style?\t\t: string;\n\tr_style_hover?\t: string;\n\tr_style_clicked?: string;\n\tr_align?\t: string;\n\n\tb_width?\t: string;\n\tb_height?\t: string;\n\tb_color?\t: string;\n\tb_alpha?\t: number;\n\tb_alpha_isfixed?\t: boolean;\n\tb_pic?\t\t: string;\n\tback_clear?\t: string;\n\n\tmax_col?\t: string;\n\tmax_row?\t: string;\n\tbura_col?\t: string;\n\tchk_overrow?\t: string;\n\n\tdx?\t: number;\n\tdy?\t: number;\n\n\tkey?\t: string;\n\ttype?\t: string;\t// 3Dレイヤで使用\n\tcamera_target?\t: string;\n\n\targ?\t: TArg;\n\tfnc?\t: ()=> void;\n\n\tfilter?\t: string;\n\tmatrix?\t: string;\n\tclear_filter?\t: boolean;\n\tenable_filter?\t: boolean;\n\n\tease?\t: string;\n\n\tcentering?\t:boolean;\n\tx?\t\t: number | string;\n\ty?\t\t: number | string;\n\n\tid?\t\t\t: string;\n\tsrc?\t\t: string;\n\tvar_name?\t: string;\n\tset_fnc?\t: string;\n\tbreak_fnc?\t: string;\n\n\tfrom?\t: number;\n\tto?\t\t: number | string;\n\tplace?\t: number;\n\tadd?\t: string;\n\tdel?\t: string;\n\n\tbuf?\t: string;\t// 音系\n\tbuf2?\t: string;\n\tloop?\t: boolean;\n\tvolume?\t: number;\n\tret_ms?\t: number;\n\tend_ms?\t: number;\n\tjoin?\t: boolean;\n\tdo_rec?\t: boolean;\n\tpan?\t: number;\n\tstop?\t: boolean;\n\n\tclear?\t: boolean;\n\n\t// デザインモード\n\t':id_dc'?\t: string;\n\t':id_tag'?\t: string;\n\t':path'?\t: string;\n\t':ln'?\t\t: number;\n\t':col_s'?\t: number;\n\t':col_e'?\t: number;\n\t':idx_tkn'?\t: number;\n\t':token'?\t: string;\n\t':redraw'?\t: boolean;\n\tdesign_unit?: boolean;\t// デザインモードでこのマクロへの引数変更とするか(内部をサーチさせない)\n\n//\tstepin?\t\t: boolean;\t\t// 拡張機能のみ使用:false指定でステップインしない\n//\tnowarn_unused?\t: boolean;\t// 拡張機能のみ使用:未使用警告を出さない\n}\nexport type TTag = (hArg: TArg) => boolean;\nexport type T_HTag = {\n// 変数操作\n\tclearsysvar\t\t\t: TTag;\t// システム変数の全消去\n\tclearvar\t\t\t: TTag;\t// ゲーム変数の全消去\n\tlet_abs\t\t\t\t: TTag;\t// 絶対値\n\tlet_char_at\t\t\t: TTag;\t// 文字列から一字取りだし\n\tlet_index_of\t\t: TTag;\t// 文字列で検索\n\tlet_length\t\t\t: TTag;\t// 文字列の長さ\n\tlet_ml\t\t\t\t: TTag;\t// インラインテキスト代入\n\tlet_replace\t\t\t: TTag;\t// 正規表現で置換\n\tlet_round\t\t\t: TTag;\t// 四捨五入\n\tlet_search\t\t\t: TTag;\t// 正規表現で検索\n\tlet_substr\t\t\t: TTag;\t// 文字列から抜きだし\n\tlet\t\t\t\t\t: TTag;\t// 変数代入・演算\n\n// レイヤ共通\n\tadd_lay\t\t\t\t: TTag;\t// レイヤを追加する\n\tclear_lay\t\t\t: TTag;\t// レイヤ設定の消去\n\tfinish_trans\t\t: TTag;\t// トランス強制終了\n\tlay\t\t\t\t\t: TTag;\t// レイヤ設定\n\ttrans\t\t\t\t: TTag;\t// ページ裏表を交換\n\twt\t\t\t\t\t: TTag;\t// トランス終了待ち\n\tadd_filter\t\t\t: TTag;\t// フィルター追加\n\tclear_filter\t\t: TTag;\t// フィルター全削除\n\tenable_filter\t\t: TTag;\t// フィルター個別切替\n\n// トゥイーンアニメ\n\tpause_tsy\t\t\t: TTag;\t// 一時停止\n\tresume_tsy\t\t\t: TTag;\t// 一時停止再開\n\tstop_tsy\t\t\t: TTag;\t// トゥイーン中断\n\ttsy\t\t\t\t\t: TTag;\t// トゥイーン開始\n\twait_tsy\t\t\t: TTag;\t// トゥイーン終了待ち\n\n// 文字・文字レイヤ\n\tautowc\t\t\t\t: TTag;\t// 文字ごとのウェイト\n\tch\t\t\t\t\t: TTag;\t// 文字を追加する\n\tch_in_style\t\t\t: TTag;\t// 文字出現演出定義\n\tch_out_style\t\t: TTag;\t// 文字消去演出定義\n\tclear_text\t\t\t: TTag;\t// 文字消去\n\tcurrent\t\t\t\t: TTag;\t// デフォルト文字レイヤ設定\n\tendlet_ml\t\t\t: TTag;\t// インラインテキスト代入の終端\n\tendlink\t\t\t\t: TTag;\t// ハイパーリンクの終了\n\ter\t\t\t\t\t: TTag;\t// ページ両面の文字消去\n\tgraph\t\t\t\t: TTag;\t// インライン画像表示\n\tlink\t\t\t\t: TTag;\t// ハイパーリンク\n\tr\t\t\t\t\t: TTag;\t// 改行\n\trec_ch\t\t\t\t: TTag;\t// 履歴書き込み\n\trec_r\t\t\t\t: TTag;\t// 履歴改行\n\treset_rec\t\t\t: TTag;\t// 履歴リセット\n\truby2\t\t\t\t: TTag;\t// 文字列と複数ルビの追加\n\tset_focus\t\t\t: TTag;\t// フォーカス移動\n\tspan\t\t\t\t: TTag;\t// インラインスタイル設定\n\ttcy\t\t\t\t\t: TTag;\t// 縦中横を表示する\n\n// 画像・画像レイヤ\n\tadd_face\t\t\t: TTag;\t// 差分名称の定義\n\twv\t\t\t\t\t: TTag;\t// 動画再生終了待ち\n\n// HTMLフレーム\n\tadd_frame\t\t\t: TTag;\t// フレーム追加\n\tframe\t\t\t\t: TTag;\t// フレームに設定\n\tlet_frame\t\t\t: TTag;\t// フレーム変数を取得\n\tset_frame\t\t\t: TTag;\t// フレーム変数に設定\n\ttsy_frame\t\t\t: TTag;\t// フレームをトゥイーン開始\n\n// イベント\n\tclear_event\t\t\t: TTag;\t// イベントを全消去\n\tenable_event\t\t: TTag;\t// イベント有無の切替\n\tevent\t\t\t\t: TTag;\t// イベントを予約\n\tl\t\t\t\t\t: TTag;\t// 行末クリック待ち\n\tp\t\t\t\t\t: TTag;\t// 改ページクリック待ち\n\ts\t\t\t\t\t: TTag;\t// 停止する\n\tset_cancel_skip\t\t: TTag;\t// スキップ中断予約\n\twait\t\t\t\t: TTag;\t// ウェイトを入れる\n\twaitclick\t\t\t: TTag;\t// クリックを待つ\n\n// BGM・効果音\n\tfadebgm\t\t\t\t: TTag;\t// BGMのフェード\n\tfadeoutbgm\t\t\t: TTag;\t// BGMのフェードアウト\n\tfadeoutse\t\t\t: TTag;\t// 効果音のフェードアウト\n\tfadese\t\t\t\t: TTag;\t// 効果音のフェード\n\tplaybgm\t\t\t\t: TTag;\t// BGM の演奏\n\tplayse\t\t\t\t: TTag;\t// 効果音の再生\n\tstop_allse\t\t\t: TTag;\t// 全効果音再生の停止\n\tstopbgm\t\t\t\t: TTag;\t// BGM 演奏の停止\n\tstopfadese\t\t\t: TTag;\t// 音声フェードの停止\n\tstopse\t\t\t\t: TTag;\t// 効果音再生の停止\n\tvolume\t\t\t\t: TTag;\t// BGMや効果音の音量を指定\n\twb\t\t\t\t\t: TTag;\t// BGM フェードの終了待ち\n\twf\t\t\t\t\t: TTag;\t// 効果音フェードの終了待ち\n\twl\t\t\t\t\t: TTag;\t// BGM 再生の終了待ち\n\tws\t\t\t\t\t: TTag;\t// 効果音再生の終了待ち\n\txchgbuf\t\t\t\t: TTag;\t\t// サウンドバッファの交換\n\n// 条件分岐\n\telse\t\t\t\t: TTag;\t// その他ifブロック開始\n\telsif\t\t\t\t: TTag;\t// 別条件のifブロック開始\n\tendif\t\t\t\t: TTag;\t// ifブロックの終端\n\tif\t\t\t\t\t: TTag;\t// ifブロックの開始\n\n// ラベル・ジャンプ\n\tbutton\t\t\t\t: TTag;\t// ボタンを表示\n\tcall\t\t\t\t: TTag;\t// サブルーチンコール\n\tjump\t\t\t\t: TTag;\t// シナリオジャンプ\n\tpage\t\t\t\t: TTag;\t// ページ移動\n\tpop_stack\t\t\t: TTag;\t// コールスタック破棄\n\treturn\t\t\t\t: TTag;\t// サブルーチンから戻る\n\n// マクロ\n\tbracket2macro\t\t: TTag;\t// 括弧マクロの定義\n\tchar2macro\t\t\t: TTag;\t// 一文字マクロの定義\n\tendmacro\t\t\t: TTag;\t// マクロ定義の終了\n\tmacro\t\t\t\t: TTag;\t// マクロ定義の開始\n\n// しおり\n\tcopybookmark\t\t: TTag;\t// しおりの複写\n\terasebookmark\t\t: TTag;\t// しおりの消去\n\tload\t\t\t\t: TTag;\t// しおりの読込\n\trecord_place\t\t: TTag;\t// セーブポイント指定\n\treload_script\t\t: TTag;\t// スクリプト再読込\n\tsave\t\t\t\t: TTag;\t// しおりの保存\n\n// 画面揺らし\n\tquake\t\t\t\t: TTag;\t// 画面を揺らす\n\tstop_quake\t\t\t: TTag;\t// 画面揺らし中断\n\twq\t\t\t\t\t: TTag;\t// 画面揺らし終了待ち\n\n// システム\n\tclose\t\t\t\t: TTag;\t// アプリの終了\n\texport\t\t\t\t: TTag;\t// プレイデータをエクスポート\n\timport\t\t\t\t: TTag;\t// プレイデータをインポート\n\tloadplugin\t\t\t: TTag;\t// プラグインの読み込み\n\tnavigate_to\t\t\t: TTag;\t// URLを開く\n\tsnapshot\t\t\t: TTag;\t// スナップショット\n\ttitle\t\t\t\t: TTag;\t// タイトル指定\n\ttoggle_full_screen\t: TTag;\t// 全画面状態切替\n\tupdate_check\t\t: TTag;\t// 更新チェック機能\n\twindow\t\t\t\t: TTag;\t// アプリウインドウ設定\n\n// デバッグ・その他\n\tdump_lay\t\t\t: TTag;\t// レイヤのダンプ\n\tdump_script\t\t\t: TTag;\t// 外部へスクリプトを表示\n\tdump_stack\t\t\t: TTag;\t// スタックのダンプ\n\tdump_val\t\t\t: TTag;\t// 変数のダンプ\n\tlog\t\t\t\t\t: TTag;\t// ログ出力\n\ttrace\t\t\t\t: TTag;\t// デバッグ表示へ出力\n}\n\n\nexport type Script = {\n\taToken\t: string[];\t\t// トークン群\n\tlen\t\t: number;\t\t// トークン数\n\taLNum\t: number[];\t\t// トークンの行番号\n};\n\n\nexport const\tREG_TAG\t= /(?<name>[^\\s;\\]]+)/;\t// test用にexport\nexport function\ttagToken2Name_Args(token: string): [name: string, args: string] {\n\tconst e = REG_TAG.exec(token.slice(1, -1));\n\tconst g = e?.groups;\n\tif (! g) throw `タグ記述【${token}】異常です(タグ解析)`;\n\n\tconst nm = g.name!;\n\treturn [nm, token.slice(1 +nm.length, -1)];\n}\nexport function\ttagToken2Name(token: string): string {\n\tconst e = REG_TAG.exec(token.slice(1));\n\tconst g = e?.groups;\n\tif (! g) throw `タグ記述【${token}】異常です(タグ解析)`;\n\n\treturn g.name!;\n}\n\nexport function\tsplitAmpersand(token: string): {\n\t\tname: string;\n\t\ttext: string;\n\t\tcast: string | undefined;\n} {\t// テスト用にpublic\n\tconst equa = token.replaceAll('==', '=').replaceAll('!=', '≠').split('=');\n\t\t// != を弾けないので中途半端ではある\n\tconst cnt_equa = equa.length;\n\tif (cnt_equa < 2 || cnt_equa > 3) throw '「&計算」書式では「=」指定が一つか二つ必要です';\n\n\tconst [e0, e1, e2] = equa;\n\tif (e1!.startsWith('&')) throw '「&計算」書式では「&」指定が不要です';\n\treturn {\n\t\tname: e0!.replaceAll('=', '==').replaceAll('≠', '!='),\n\t\ttext: e1!.replaceAll('=', '==').replaceAll('≠', '!='),\n\t\tcast: cnt_equa === 3 ?e2!.trim() :undefined\n\t};\n}\n\n\nexport class Grammar {\n\tconstructor(private readonly cfg: T_Config) {this.setEscape('')}\n\n\t#REG_TOKEN\t: RegExp;\n\tsetEscape(ce: string) {\n\t\tif (this.#hC2M && ce in this.#hC2M) throw '[エスケープ文字] char【'+ ce +'】が登録済みの括弧マクロまたは一文字マクロです';\n\n\t\t// 1083 matches (14577 step, 9.9ms) https://regex101.com/r/dP0tAY/1\n\t\t/*\n\\\\\\S |\n \\n+\n| \\t+\n|\t\\[let_ml \\s+ [^\\]]+ ]\n\t.+? (?=\\[endlet_ml [\\]\\s])\n| \\[ (?: [^\"'#;\\]]+\n\t| ([\"'#]).*?\\1\n\t| ;[^\\n]* ) *? ]\n| ;[^\\n]*\n| &[^&\\n]+&\n| &&?(?: [^\"'#;\\n&]+ | ([\"'#]).*?\\2 )+\n| ^\\*[^\\s\\[&;\\\\]+\n| [^\\n\\t\\[;\\\\]+\n\t\t*/\n/*\n\t[^\"'#;\\]]++\n\t| ([\"'\\#]).*?\\1\n\t\t\t++ にしたいところだが、jsは未サポートらしい(2022/10/16)\n*/\n\t\t// (new RegExp(\"~\")) の場合は、バックスラッシュは2つ必要\n\t\t\t// https://qiita.com/ue5963/items/bd8e32ac9e6b12aa7fab\n\t\tthis.#REG_TOKEN = new RegExp(\n\t\t(ce\t?`\\\\${ce}\\\\S|` :'')+\t// エスケープシーケンス\n\t\t'\\\\n+'+\t\t\t\t// 改行\n\t\t'|\\\\t+'+\t\t\t// タブ文字\n\t\t'|\\\\[let_ml\\\\s+[^\\\\]]+\\\\]'+\n\t\t\t'.+?'+\t\t\t// [let_ml]〜[endlet_ml]間のテキスト\n\t\t'(?=\\\\[endlet_ml[\\\\]\\\\s])'+\n\t\t'|\\\\[(?:'+\n\t\t\t'[^\"\\'#;\\\\]]+|'+\t// タグ\n\t\t\t'([\"\\'#]).*?\\\\1' +\n\t\t\t\t// . は (?:\\\\${ ce??'\\\\' }.|[^\\\\1]) でなくてよさげ\n\t\t'|;[^\\\\n]*)*?]'+\n\t\t'|;[^\\\\n]*'+\t\t// コメント\n\t\t'|&[^&\\\\n]+&'+\t\t// &表示&\n\t\t'|&&?(?:[^\"\\'#;\\\\n&]+|([\"\\'#]).*?\\\\2)+'+\t// &代入\n\t\t'|^\\\\*[^\\\\s\\\\[&;\\\\\\\\]+'+\t// ラベル\n\t\t`|[^\\\\n\\\\t\\\\[;${ce ?`\\\\${ce}` :''}]+`,\t\t// 本文\n\t\t'gs');\n\t\tthis.#REG_CANTC2M = new RegExp(`[\\\\w\\\\s;[\\\\]*=&|《》${ce ?`\\\\${ce}` :''}]`);\n\t\tthis.#REG_TOKEN_NOTXT = new RegExp(`[\\\\n\\\\t;\\\\[*&${ce ?`\\\\${ce}` :''}]`);\n\t}\n\n\n\t// 括弧マクロの定義\n\tbracket2macro(hArg: TArg, hTag: T_HTag, scr: Script, start_idx: number) {\n\t\tconst {name, text} = hArg;\n\t\tif (! name) throw '[bracket2macro] nameは必須です';\n\t\tif (! text) throw '[bracket2macro] textは必須です';\n\t\tconst op = text.at(0);\n\t\tif (! op) throw '[bracket2macro] textは必須です';\n\t\tif (text.length !== 2) throw '[bracket2macro] textは括弧の前後を示す二文字を指定してください';\n\t\tif (! (name in hTag)) throw `[bracket2macro] 未定義のタグ又はマクロ[${name}]です`;\n\n\t\tthis.#hC2M ??= {};\n\t\tconst cl = text.charAt(1);\n\t\tif (op in this.#hC2M) throw '[bracket2macro] text【'+ op +'】が登録済みの括弧マクロまたは一文字マクロです';\n\t\tif (cl in this.#hC2M) throw '[bracket2macro] text【'+ cl +'】が登録済みの括弧マクロまたは一文字マクロです';\n\t\tif (this.#REG_CANTC2M.test(op)) throw '[bracket2macro] text【'+ op +'】は括弧マクロに使用できない文字です';\n\t\tif (this.#REG_CANTC2M.test(cl)) throw '[bracket2macro] text【'+ cl +'】は括弧マクロに使用できない文字です';\n\n\t\tthis.#hC2M[cl] = '0';\t// チェック用ダミー\n\t\tthis.#hC2M[op] = `[${name} text=`;\n\n\t\tthis.addC2M(`\\\\${op}[^\\\\${cl}]*\\\\${cl}`, `\\\\${op}\\\\${cl}`);\n\n\t\tthis.#replaceScr_C2M(scr, start_idx);\n\t}\n\t// 一文字マクロの定義\n\tchar2macro(hArg: TArg, hTag: T_HTag, scr: Script, start_idx: number) {\n\t\tconst {char, name} = hArg;\n\t\tif (! char) throw '[char2macro] charは必須です';\n\t\tthis.#hC2M ??= {};\n\t\tif (char in this.#hC2M) throw '[char2macro] char【'+ char +'】が登録済みの括弧マクロまたは一文字マクロです';\n\t\tif (this.#REG_CANTC2M.test(char)) throw '[char2macro] char【'+ char +'】は一文字マクロに使用できない文字です';\n\n\t\tif (! name) throw '[char2macro] nameは必須です';\n\t\tif (! (name in hTag)) throw `[char2macro] 未定義のタグ又はマクロ[${name}]です`;\n\n\t\tthis.#hC2M[char] = `[${name}]`;\n\n\t\tthis.addC2M(`\\\\${char}`, `\\\\${char}`);\n\n\t\tthis.#replaceScr_C2M(scr, start_idx);\n\t}\n\t#REG_CANTC2M\t: RegExp;\n\t#REGC2M\t\t\t= new RegExp('');\n\t#regStrC2M\t\t= '';\n\t#regStrC2M4not\t= '';\n\taddC2M(a: string, b: string) {\n\t\tthis.#regStrC2M += `${a}|`;\n\t\tthis.#regStrC2M4not += b;\n\t\tthis.#REGC2M = new RegExp(\n\t\t\t`(${this.#regStrC2M}[^${this.#regStrC2M4not}]+)`, 'g');\n\t}\n\n\n\tresolveScript(txt: string): Script {\n\t\tconst a: string[] = txt\n\t\t.replaceAll(/\\r\\n?/g, '\\n')\n\t\t.match(this.#REG_TOKEN)\n\t\t?.flatMap(tkn=> {\n\t\t\tif (! this.testTagLetml(tkn)) return tkn;\n\n\t\t\tconst r = /^([^\\]]+?])(.*)$/s.exec(tkn);\n\t\t\tif (! r) return tkn;\n\t\t\tconst [, a, b] = r;\n\t\t\treturn [a!, b!];\n\t\t}) ?? [];\n\n\t\tconst scr = {aToken: a, len: a.length, aLNum: []};\n\t\tthis.#replaceScr_C2M(scr);\n\n\t\tthis.#replaceScript_Wildcard(scr);\n\n\t\treturn scr;\n\t}\n\n\n\treadonly #REG_WILDCARD\t= /^\\[(call|loadplugin)\\s/;\n\treadonly #REG_WILDCARD2\t= /\\bfn\\s*=\\s*[^\\s\\]]+/;\n\t#replaceScript_Wildcard(scr: Script) {\n\t\tfor (let i=scr.len -1; i>=0; --i) {\n\t\t\tconst token = scr.aToken[i]!;\n\t\t\tif (! this.#REG_WILDCARD.test(token)) continue;\n\n\t\t\tconst [tag_name, args] = tagToken2Name_Args(token);\n\t\t\tthis.#alzTagArg.parse(args);\n\n\t\t\tconst p_fn = this.#alzTagArg.hPrm.fn;\n\t\t\tif (! p_fn) continue;\n\t\t\tconst {val: fn} = p_fn;\n\t\t\tif (! fn.endsWith('*')) continue;\n\n\t\t\tscr.aToken.splice(i, 1, '\\t', '; '+ token);\n\t\t\tscr.aLNum.splice(i, 1, NaN, NaN);\n\n\t\t\tconst ext = tag_name === 'loadplugin'\n\t\t\t\t? SEARCH_PATH_ARG_EXT.CSS\n\t\t\t\t: SEARCH_PATH_ARG_EXT.SN;\n\t\t\tconst a = this.cfg.matchPath('^'+ fn.slice(0, -1) +'.*', ext);\n\t\t\tfor (const v of a) {\n\t\t\t\tconst nt = token.replace(\n\t\t\t\t\tthis.#REG_WILDCARD2,\n\t\t\t\t\t'fn='+ decodeURIComponent(getFn(v[ext]!))\n\t\t\t\t);\n\t\t\t\t//console.log('\\t='+ nt +'=');\n\t\t\t\tscr.aToken.splice(i, 0, nt);\n\t\t\t\tscr.aLNum.splice(i, 0, NaN);\n\t\t\t}\n\t\t}\n\t\tscr.len = scr.aToken.length;\n\t}\n\t\treadonly\t#alzTagArg\t= new AnalyzeTagArg;\n\n\n\ttestTagLetml(tkn: string): boolean {return /^\\[let_ml\\s/.test(tkn)}\n\ttestTagEndLetml(tkn: string): boolean {return /^\\[endlet_ml\\s*]/.test(tkn)}\n\n\n\t#hC2M\t: {[char: string]: string} | undefined = undefined;\n\t#REG_TOKEN_NOTXT\t: RegExp;\n\t#replaceScr_C2M(scr: Script, start_idx = 0): void {\n\t\tif (! this.#hC2M) return;\n\n\t\tfor (let i=scr.len- 1; i >= start_idx; --i) {\n\t\t\tconst token = scr.aToken[i]!;\n\t\t\tif (this.testNoTxt(token.at(0) ?? '\\n')) continue;\n\t\t\t\t// 省略時は #REG_TOKEN_NOTXT に引っかかる \\n に\n\n\t\t\tconst lnum = scr.aLNum[i]!;\n\t\t\tconst a = token.match(this.#REGC2M);\n\t\t\tif (! a) continue;\n\t\t\tlet del = 1;\n\t\t\tfor (let j=a.length -1; j>=0; --j) {\n\t\t\t\tlet ch = a[j]!;\n\t\t\t\tconst macro = this.#hC2M[ch.at(0) ?? ' '];\n\t\t\t\t\t// 省略時は #REG_CANTC2M に引っかかる ' ' に\n\t\t\t\tif (macro) {\n\t\t\t\t\tch = macro +(macro.endsWith(']')\n\t\t\t\t\t\t? ''\n\t\t\t\t\t\t: `'${ch.slice(1, -1)}']`);\n\t\t\t\t\t// 文字列は半角空白を意識して''で囲むが、いずれ変えたい場合がある?\n\t\t\t\t}\n\t\t\t\tscr.aToken.splice(i, del, ch);\n\n\t\t\t\tscr.aLNum.splice(i, del, lnum);\n\t\t\t\tdel = 0;\n\t\t\t}\n\t\t}\n\t\tscr.len = scr.aToken.length;\n\t}\n\ttestNoTxt(ch: string): boolean {return this.#REG_TOKEN_NOTXT.test(ch)}\t//4tst\n\n}\n","/* ***** BEGIN LICENSE BLOCK *****\n\tCopyright (c) 2018-2025 Famibee (famibee.blog38.fc2.com)\n\n\tThis software is released under the MIT License.\n\thttp://opensource.org/licenses/mit-license.php\n** ***** END LICENSE BLOCK ***** */\n\nimport {CmnLib, argChk_Boolean, parseColor} from './CmnLib';\nimport type {T_HTag, TArg} from './Grammar';\nimport type {T_Main, Scope, T_VAL_BSNU, T_VAL_DATA} from './CmnInterface';\nimport type {SysBase} from './SysBase';\nimport {DebugMng} from './DebugMng';\nimport {Config} from './Config';\nimport {splitAmpersand, tagToken2Name_Args} from './Grammar';\nimport type {ScriptIterator} from './ScriptIterator';\nimport type {LayerMng} from './LayerMng';\nimport type {EventMng} from './EventMng';\n\nimport {type IApplicationOptions, Application, utils} from 'pixi.js';\n\n\nconst\tSN_ID\t= 'skynovel';\n\nexport class Main implements T_Main {\n\tstatic\tasync generate(sys: SysBase): Promise<Main> {\n\t\tutils.skipHello();\n\n\t\tconst m = new Main(sys);\n\t\tawait m.#init()\n\t\t.catch((e: unknown)=> console.error('Main.generate err e:%o', e));\n\n\t\treturn m;\n\t}\n\n\n\tcvs\t\t\t: HTMLCanvasElement;\n\n\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t#hTag\t\t: T_HTag\t\t= Object.create(null);\t// タグ処理辞書\n\n\t#scrItr\t\t: ScriptIterator;\n\t#layMng\t\t: LayerMng;\n\t#evtMng\t\t: EventMng;\n\n\t#aDest\t\t: (()=> void)[]\t\t= [];\n\n\n\tprivate constructor(private readonly sys: SysBase) {}\n\n\tasync #init() {\n\t\tconst cfg = await Config.generate(this.sys);\n\t\tthis.sys.setMain(this, cfg);\n\n\t\tconst hApp: IApplicationOptions = {\n\t\t\twidth\t\t\t: cfg.oCfg.window.width,\n\t\t\theight\t\t\t: cfg.oCfg.window.height,\n\t\t\tbackgroundColor\t: parseColor(String(cfg.oCfg.init.bg_color)),\n\t\t\t\t// このString()は後方互換性のため必須\n\t\t\tresolution\t\t: globalThis.devicePixelRatio,\n\t\t};\n\n\t\tconst cvs = <HTMLCanvasElement | null>document.getElementById(SN_ID);\n\t\tif (cvs) {\n\t\t\tconst clone_cvs = <HTMLCanvasElement>cvs.cloneNode(true);\n\t\t\tclone_cvs.id = SN_ID;\n\t\t\thApp.view = cvs;\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tconst p = cvs.parentNode!;\n\t\t\tthis.#aDest.unshift(()=> p.appendChild(clone_cvs));\n\t\t}\n\t\telse {\t// 自動的に作ってくれるが、どうも appendChild に遅延があるので\n\t\t\tconst c = document.createElement('canvas');\n\t\t\tc.id = SN_ID;\n\t\t\thApp.view = c;\n\t\t\tdocument.body.appendChild(c);\n\t\t\tthis.#aDest.unshift(()=> document.body.removeChild(c));\n\t\t}\n\n\t\tconst app = new Application(hApp);\n\t\tthis.#aDest.unshift(()=> {\n\t\t\tutils.clearTextureCache();\n\t\t\tthis.sys.destroy();\n\t\t\tapp.destroy(false);\t// remove canvas from DOM が非同期なのでウチがやる\n\t\t});\n\n\t\tthis.cvs = app.view;\n\t\tthis.cvs.id = SN_ID +'_act';\n\t\tif (! cvs) document.body.appendChild(this.cvs);\n\n\n\t\tconst cc = document.createElement('canvas').getContext('2d');\n\t\tif (! cc) throw '#init cc err';\n\t\tCmnLib.cc4ColorName = cc;\n\n\t\tconst [{Variable}, {PropParser}, {SoundMng}, {ScriptIterator}, {LayerMng}, {EventMng}, {Button}] = await Promise.all([\n\t\t\timport('./Variable'),\n\t\t\timport('./PropParser'),\n\t\t\timport('./SoundMng'),\n\t\t\timport('./ScriptIterator'),\n\t\t\timport('./LayerMng'),\n\t\t\timport('./EventMng'),\n\t\t\timport('./Button'),\n\t\t]);\n\n\t\tButton.init(cfg);\n\n\t\t// 変数\n\t\tconst val = new Variable(this.sys, cfg, this.#hTag);\n\t\tconst prpPrs = new PropParser(val, cfg.oCfg.init.escape);\n\t\tthis.#setVal_Nochk = (scope, nm, v, autocast)=> val.setVal_Nochk(scope, nm, v, autocast);\n\t\tthis.#getValAmpersand = v=> prpPrs.getValAmpersand(v);\n\t\tthis.#parse = s=> prpPrs.parse(s);\n\n\t\t// システム\n\t\tawait Promise.allSettled(this.sys.init(this.#hTag, app, val));\t// 変数準備完了\n\n\t\t// BGM・効果音\n\t\tconst sndMng = new SoundMng(cfg, this.#hTag, val, this, this.sys);\n\t\tthis.#aDest.unshift(()=> sndMng.destroy());\n\n\t\t// 条件分岐、ラベル・ジャンプ、マクロ、しおり\n\t\tthis.#scrItr = new ScriptIterator(cfg, this.#hTag, this, val, prpPrs, sndMng, this.sys);\n\t\tthis.#aDest.unshift(()=> this.#scrItr.destroy());\n\n\t\t// デバッグ・その他\n\t\tconst dbgMng = new DebugMng(this.sys, this.#hTag, this.#scrItr);\n\t\tthis.#aDest.unshift(()=> dbgMng.destroy());\n\t\tthis.errScript = (mes: string, isThrow = true)=> {\n\t\t\tthis.stop();\n\t\t\tDebugMng.myTrace(mes);\n\t\t\tif (CmnLib.debugLog) console.log('🍜 SKYNovel err!');\n\t\t\tif (isThrow) throw mes;\n\t\t}\n\n\t\t// レイヤ共通、文字レイヤ、画像レイヤ\n\t\tthis.#layMng = new LayerMng(cfg, this.#hTag, app, val, this, this.#scrItr, this.sys, sndMng, prpPrs);\n\t\tthis.#aDest.unshift(()=> this.#layMng.destroy());\n\n\t\t// イベント\n\t\tthis.#evtMng = new EventMng(cfg, this.#hTag, app, this, this.#layMng, val, sndMng, this.#scrItr, this.sys);\n\t\tthis.#aDest.unshift(()=> this.#evtMng.destroy());\n\n\t\tthis.#aDest.unshift(()=> {\n\t\t\tthis.stop();\n\t\t\tthis.#isLoop = false;\n\n\t\t\tconst fncDummy = ()=> true;\n\t\t\tfor (const key in this.#hTag) this.#hTag[<keyof T_HTag>key] = fncDummy;\n\t\t});\n\t}\n\n\n\tdestroy() {\n\t\tthis.resume = this.destroy = ()=> { /* empty */ };\t// destroy()連打対策\n\n\t\tthis.cvs.parentElement?.removeChild(this.cvs);\n\t\t\t// (ギャラリーで)document.body はエラーになる\n\t\tfor (const f of this.#aDest) f();\n\t\tthis.#aDest = [];\n\t}\n\n\n\terrScript = (_mes: string, _isThrow = true)=> { /* empty */ }\n\n\n\tresumeByJumpOrCall(hArg: TArg) {\n\t\tif (hArg.url) {\n\t\t\tthis.#hTag.navigate_to(hArg);\n\t\t\tthis.#scrItr.jumpJustBefore();\n\t\t\treturn;\n\t\t}\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-base-to-string\n\t\tthis.#setVal_Nochk('tmp', 'sn.eventArg', String(hArg.arg ?? ''));\n\t\tthis.#setVal_Nochk('tmp', 'sn.eventLabel', hArg.label ?? '');\n// console.log(`📜 %cresumeByJumpOrCall:%o`, 'color:#3B0;', hArg);\n\t\tif (argChk_Boolean(hArg, 'call', false)) {\n\t\t\tthis.#scrItr.subIdxToken();\t// 「コール元の次」に進めず、「コール元」に戻す\n\t\t\tif (this.#hTag.call(hArg)) return;\n\t\t}\n\t\telse {\n\t\t\tthis.#hTag.clear_event({});\n\t\t\tif (this.#hTag.jump(hArg)) return;\n\t\t}\n\t\tthis.resume();\n\t}\n\t\t#setVal_Nochk = (_scope: Scope, _nm: string, _val: T_VAL_BSNU, _autocast = false)=> { /* empty */ }\n\n\tresume() {\n// console.log(`📜🟢 resume!`);\n\t\t// スクリプトが動くとき、ブレイクマークなど消去\n\t\tthis.#layMng.clearBreak();\n\t\tthis.#scrItr.noticeBreak(false);\n\t\tthis.#evtMng.hideHint();\n\n\t\tqueueMicrotask(()=> {void this.#main()});\n\t}\n\treadonly stop = ()=> {\n// console.log(`📜🔴 stop!`);\n\t\tthis.#scrItr.noticeBreak(true);\n\t};\n\n\tsetLoop(isLoop: boolean, mes = '') {\n\t\t///console.log('setLoop:'+ (isLoop ?'resume!' :'stop!') +' mes:'+ mes);\n\t\t// eslint-disable-next-line no-cond-assign\n\t\tif (this.#isLoop = isLoop) this.resume(); else this.stop();\n\t\tthis.sys.setTitleInfo(mes ?` -- ${mes}中` :'');\n\t}\n\t// oxlint-disable-next-line no-unused-private-class-members\n\t#isLoop = true;\n\n\t//MARK: メイン処理(シナリオ解析)\n\tasync #main() {\n\t\tlet errHd = '';\n\t\ttry {\n\t\t\twhile (this.#isLoop) {\n\t\t\t\tlet token = this.#scrItr.nextToken();\n\t\t\t\tif (! token) return;\t// 初期化前に終了した場合向け\n\n\t\t\t\tconst uc = token.charCodeAt(0);\t// TokenTopUnicode\n\t\t\t\t// \\t タブ\n\t\t\t\tif (uc === 9) continue;\n\t\t\t\t// \\n 改行\n\t\t\t\tif (uc === 10) {this.#scrItr.addLineNum(token.length); continue}\n\t\t\t\t// [ タグ開始\n\t\t\t\tif (uc === 91) {\n\t\t\t\t\terrHd = 'タグ開始';\n\t\t\t\t\tif (this.#scrItr.isBreak(token)) return;\n\n\t\t\t\t\tconst [tag_name, args] = tagToken2Name_Args(token);\n\t\t\t\t\terrHd = `[${tag_name}]例外`;\n\n\t\t\t\t\tconst cl = (token.match(/\\n/g) ?? []).length;\n\t\t\t\t\tif (cl > 0) this.#scrItr.addLineNum(cl);\n\t\t\t\t\tif (await this.#scrItr.タグ解析(\n\t\t\t\t\t\t<keyof T_HTag>tag_name, args\n\t\t\t\t\t)) {this.stop(); return}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// & 変数操作・変数表示\n\t\t\t\t// an時代・瀬戸愛羅さんより https://famibee.blog.fc2.com/blog-entry-245.html\n\t\t\t\tif (uc === 38) {\n\t\t\t\t\tif (! token.endsWith('&')) {\n\t\t\t\t\t\terrHd = '変数計算';\n\t\t\t\t\t\tif (this.#scrItr.isBreak(token)) return;\n\t\t\t\t\t\tconst o = splitAmpersand(token.slice(1));\n\t\t\t\t\t\to.name = this.#getValAmpersand(o.name);\n\t\t\t\t\t\to.text = String(this.#parse(o.text));\n\t\t\t\t\t\tthis.#hTag.let(o);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\terrHd = '変数操作';\n\t\t\t\t\tif (token.charAt(1) === '&') throw new Error('「&表示&」書式では「&」指定が不要です');\n\t\t\t\t\ttoken = String(this.#parse( token.slice(1, -1) ));\n\t\t\t\t\t\t// -> 文字表示 へ\n\t\t\t\t}\n\t\t\t\t// ; コメント\n\t\t\t\telse if (uc === 59) continue;\n\t\t\t\t// * ラベル\n\t\t\t\telse if (uc === 42 && token.length > 1) continue;\n\n\t\t\t\t// 文字表示\n\t\t\t\terrHd = '文字表示';\n\t\t\t\tthis.#layMng.setNormalChWait();\n\t\t\t\tconst tl = this.#layMng.currentTxtlayForeNeedErr;\n\t\t\t\ttl.tagCh(token);\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tthis.errScript(`${errHd} ${\n\t\t\t\te instanceof Error ?`mes=${e.message}(${e.name})` :String(e)\n\t\t\t}`, false);\n\t\t}\n\t}\n\t\t#getValAmpersand\t= (_v: string)=> '';\n\t\t#parse\t\t\t\t: (_s: string)=> T_VAL_DATA;\n\n}\n"],"names":["PROTOCOL_USERDATA","PROTOCOL_DL","Config","ConfigBase","sys","c","fn","res","dec","oCfg","CmnLib","extptn","SEARCH_PATH_ARG_EXT","idx2LnCol","sSn","idx","lenNm","ln","ch","len","AnalyzeTagArg","#REG_TAGARG","args","#hPrm","#isKomeParam","groups","key","val","val2","def","def2","literal","token","hRng","index","z","lenVnm","k_ch","k_ln","v_ln","v_ch","REG_TAG","tagToken2Name_Args","g","nm","tagToken2Name","splitAmpersand","equa","cnt_equa","e0","e1","e2","Grammar","cfg","#REG_TOKEN","ce","#hC2M","#REG_CANTC2M","#REG_TOKEN_NOTXT","hArg","hTag","scr","start_idx","name","text","op","cl","#replaceScr_C2M","char","#REGC2M","#regStrC2M","#regStrC2M4not","a","b","txt","tkn","r","#replaceScript_Wildcard","#REG_WILDCARD","#REG_WILDCARD2","i","tag_name","#alzTagArg","p_fn","ext","v","nt","getFn","lnum","del","j","macro","SN_ID","Main","utils.skipHello","m","#init","e","#hTag","#scrItr","#layMng","#evtMng","#aDest","hApp","parseColor","cvs","clone_cvs","p","app","Application","utils.clearTextureCache","cc","Variable","PropParser","SoundMng","ScriptIterator","LayerMng","EventMng","Button","prpPrs","#setVal_Nochk","scope","autocast","#getValAmpersand","#parse","s","sndMng","dbgMng","DebugMng","mes","isThrow","#isLoop","fncDummy","f","_mes","_isThrow","argChk_Boolean","_scope","_nm","_val","_autocast","#main","isLoop","errHd","uc","o","_v"],"mappings":"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"}
1
+ {"version":3,"file":"Main.js","sources":["../src/sn/Config.ts","../src/sn/AnalyzeTagArg.ts","../src/sn/Grammar.ts","../src/sn/Main.ts"],"sourcesContent":["/* ***** BEGIN LICENSE BLOCK *****\n\tCopyright (c) 2018-2025 Famibee (famibee.blog38.fc2.com)\n\n\tThis software is released under the MIT License.\n\thttp://opensource.org/licenses/mit-license.php\n** ***** END LICENSE BLOCK ***** */\n\nimport {CmnLib} from './CmnLib';\nimport type {SysBase} from './SysBase';\nimport {ConfigBase, SEARCH_PATH_ARG_EXT, type T_CFG_RAW} from './ConfigBase';\n\nexport const PROTOCOL_USERDATA\t= 'userdata:/';\nexport const PROTOCOL_DL\t\t= 'downloads:/';\n\n\nexport class Config extends ConfigBase {\n\tstatic\tasync\tgenerate(sys: SysBase) {\n\t\tconst c = new Config(sys);\n\t\tconst fn = sys.arg.cur +'prj.json';\n\t\tconst res = await sys.fetch(fn);\n\t\tif (! res.ok) throw Error(res.statusText);\n\n\t\tconst dec = await sys.dec(fn, await res.text());\n\t\tawait c.load(<T_CFG_RAW>JSON.parse(dec));\n\t\treturn c;\n\t}\n\n\tprotected\tconstructor(override readonly sys: SysBase) {super(sys)}\n\n\tprotected\toverride\tasync load(oCfg: T_CFG_RAW) {\n\t\toCfg.window ??= {width: 300, height: 300};\n\t\tCmnLib.stageW = oCfg.window.width;\n\t\tCmnLib.stageH = oCfg.window.height;\n\t\tCmnLib.debugLog = oCfg.debug.debugLog;\n\t\tawait CmnLib.init();\n\n\t\treturn super.load(oCfg);\n\t}\n\n\toverride\tsearchPath(fn: string, extptn: SEARCH_PATH_ARG_EXT = SEARCH_PATH_ARG_EXT.DEFAULT): string {\n\t\tif (fn.startsWith(PROTOCOL_DL)) {\n\t\t\treturn this.sys.path_downloads + fn.slice(11);\n\t\t}\n\t\tif (fn.startsWith(PROTOCOL_USERDATA)) {\n\t\t\treturn this.sys.path_userdata + 'storage/'+ fn.slice(10);\n\t\t}\n\n\t\treturn super.searchPath(fn, extptn);\n\t}\n\n}\n","/* ***** BEGIN LICENSE BLOCK *****\n\tCopyright (c) 2018-2025 Famibee (famibee.blog38.fc2.com)\n\n\tThis software is released under the MIT License.\n\thttp://opensource.org/licenses/mit-license.php\n** ***** END LICENSE BLOCK ***** */\n\nexport type PRM = {\n\tval\t\t: string;\n\tdef?\t: string;\n}\nexport type HPRM = {\n\t[key: string]: PRM,\n}\n\nexport type PRM_RANGE = {\n\tk_ln\t: number;\n\tk_ch\t: number;\n\tv_ln\t: number;\n\tv_ch\t: number;\n\tv_len\t: number;\n}\n\nexport function idx2LnCol(sSn: string, idx: number, lenNm = 0, ln = 0, ch = 0): {ln: number; ch: number;} {\n\tconst sBefore = sSn.slice(0, idx);\n\tconst a = sBefore.split('\\n');\n\tconst len = a.length;\n\treturn {\n\t\tln\t: ln +len -1,\n\t\tch\t: len < 2 ?ch +1+lenNm +idx :a.at(-1)?.length ?? 0,\n\t};\n}\n\n\nexport class AnalyzeTagArg {\n\t// 87 match 2725 step(0.5ms) PCRE2 https://regex101.com/r/aeN57J/1\n\t/*\n;[^\\n]*\n|\t(?<key>[^\\s=\"'#|;]+)\n\t(?: \\s | ;[^\\n]*\\n)*\n\t=\n\t(?: \\s | ;[^\\n]*\\n)*\n\t(?:\t(?<val> [^\\s\"'#|;]+)\n\t|\t([\"'#]) (?<val2>.*?) \\3 )\n\t(?: \\|\n\t\t(?: (?<def> [^\\s\"'#;]+)\n\t|\t([\"'#]) (?<def2>.*?) \\6 ) )?\n|\t(?<literal>[^\\s;]+)\n\t*/\n\treadonly\t#REG_TAGARG\t= /;[^\\n]*|(?<key>[^\\s=\"'#|;]+)(?:\\s|;[^\\n]*\\n)*=(?:\\s|;[^\\n]*\\n)*(?:(?<val>[^\\s\"'#|;]+)|([\"'#])(?<val2>.*?)\\3)(?:\\|(?:(?<def>[^\\s\"'#;]+)|([\"'#])(?<def2>.*?)\\6))?|(?<literal>[^\\s;]+)/g;\n\n\t// 【属性 = 値 | 省略値】の分析\n\tparse(args: string): void {\n\t\tthis.#hPrm = {};\n\t\tthis.#isKomeParam = false;\n\t\tfor (const {groups} of args.matchAll(this.#REG_TAGARG)) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tconst {key, val, val2, def, def2, literal} = groups!;\n\t\t\tif (key) this.#hPrm[key] = {\n\t\t\t\tval: val ?? val2 ?? '',\n\t\t\t\tdef: def ?? def2\n\t\t\t};\n\t\t\telse if (literal) {\n\t\t\t\tif (literal === '*') this.#isKomeParam = true;\n\t\t\t\telse this.#hPrm[literal] = {val: '1'};\n\t\t\t}\n\t\t}\n\t}\n\n\t// 属性と値の位置をまとめて返す\n\tparseinDetail(token: string, lenNm: number, ln: number, ch: number): {[key: string]: PRM_RANGE} {\n\t\tconst hRng: {[key: string]: PRM_RANGE} = {};\n\n\t\tconst sSn = token.slice(1+lenNm, -1);\n\t\tfor (const {groups, index, 0: z} of sSn.matchAll(this.#REG_TAGARG)) {\n\t\t\tif (! index) continue;\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tconst {key, val, val2='', literal} = groups!;\n\t\t\tif (literal) {\n\t\t\t\tif (literal.endsWith('=')) {\n\t\t\t\t\tconst lenVnm = literal.length -1;\n\t\t\t\t\tconst {ch: k_ch} = idx2LnCol(sSn, index +lenVnm, lenNm, ln, ch);\n\t\t\t\t\thRng[literal.slice(0, -1)] = {\n\t\t\t\t\t\tk_ln: ln,\n\t\t\t\t\t\tk_ch: k_ch -lenVnm,\n\t\t\t\t\t\tv_ln: ln,\n\t\t\t\t\t\tv_ch: k_ch +1,\n\t\t\t\t\t//\tv_ch: ch +1+lenNm +literal.length +1,\n\t\t\t\t\t\tv_len: 0,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (! key) continue;\n\n\t\t\tconst {ln: k_ln, ch: k_ch} = idx2LnCol(sSn, index, lenNm, ln, ch);\n\t\t\tconst {ln: v_ln, ch: v_ch} = idx2LnCol(sSn, index +z.lastIndexOf(val ?? val2) -(val ?0 :1), lenNm, ln, ch);\n\t\t\thRng[key] = {k_ln, k_ch, v_ln, v_ch, v_len: val ?val.length :val2.length +2};\n\t\t}\n\n\t\treturn hRng;\n\t}\n\n\t#hPrm: HPRM\t= {};\n\tget hPrm() {return this.#hPrm}\n\n\t#isKomeParam\t= false;\n\tget isKomeParam() {return this.#isKomeParam}\n\n}\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/* ***** BEGIN LICENSE BLOCK *****\n\tCopyright (c) 2019-2025 Famibee (famibee.blog38.fc2.com)\n\n\tThis software is released under the MIT License.\n\thttp://opensource.org/licenses/mit-license.php\n** ***** END LICENSE BLOCK ***** */\n\nimport {AnalyzeTagArg} from './AnalyzeTagArg';\nimport {getFn} from './CmnLib';\nimport {type T_Config, SEARCH_PATH_ARG_EXT} from './ConfigBase';\n\n\nexport type TArg = {\n\t':タグ名'?\t: string;\n\tcanskip?\t: boolean;\n\n\tlayer?\t: string;\t// レイヤ系\n\tclass?\t: string;\n\tindex?\t: number;\n\tdive?\t: string;\n\tpage?\t: string;\n\talpha?\t: number;\n\tpivot_x?: number;\n\tpivot_y?: number;\n\trotation?\t: number;\n\tscale_x?: number;\n\tscale_y?: number;\n\tvisible?: boolean;\n\tblendmode?\t: string;\n\n\tleft?\t: number;\n\ttop?\t: number;\n\twidth?\t: number;\n\theight?\t: number;\n\tpl?\t\t: number;\n\tpr?\t\t: number;\n\tpt?\t\t: number;\n\tpb?\t\t: number;\n\n\trotate?\t: number;\n\tin_style?\t: string;\n\tout_style?\t: string;\n\tffs?\t: string;\n\tnoffs?\t: string;\n\tkinsoku_sol?\t: string;\n\tkinsoku_eol?\t: string;\n\tkinsoku_dns?\t: string;\n\tkinsoku_bura?\t: string;\n\tbura?\t: boolean;\n\tbreak_fixed?\t\t: boolean;\n\tbreak_fixed_left?\t: number;\n\tbreak_fixed_top?\t: number;\n\n\ttime?\t: number;\n\trule?\t: string;\n\tglsl?\t: string;\n\trender?\t: boolean;\n\n\tpos?\t: string;\n\ttext?\t: string;\n\twait?\t: number;\n\trecord?\t: boolean;\n\tpic?\t: string;\n\tenabled?: boolean;\n\thint?\t\t: string;\n\thint_style?\t: string;\n\thint_opt?\t: string;\n\tclickse?\t: string;\n\tenterse?\t: string;\n\tleavese?\t: string;\n\tclicksebuf?\t: string;\n\tentersebuf?\t: string;\n\tleavesebuf?\t: string;\n\tonenter?\t: string;\n\tonleave?\t: string;\n\n\tt?\t: string;\n\tr?\t: string;\n\texp?\t: string;\n\tchar?\t: string;\n\tsesame?\t: string;\n\tcast?\t: string;\n\tval?\t: string;\n\tflags?\t: string;\n\treg?\t: string;\n\tlen?\t: string;\n\turl?\t: string;\n\tformat?\t: string;\n\tchain?\t: string;\n\tpath?\t: string;\n\n\tfn?\t\t: string;\n\tface?\t: string;\n\tlabel?\t: string;\n\tcall?\t: boolean;\n\tglobal?\t: boolean;\n\tname?\t: string;\n\tclear_local_event?\t: boolean;\n\n\tstyle?\t\t\t: string;\n\tstyle_hover?\t: string;\n\tstyle_clicked?\t: string;\n\tr_style?\t\t: string;\n\tr_style_hover?\t: string;\n\tr_style_clicked?: string;\n\tr_align?\t: string;\n\n\tb_width?\t: string;\n\tb_height?\t: string;\n\tb_color?\t: string;\n\tb_alpha?\t: number;\n\tb_alpha_isfixed?\t: boolean;\n\tb_pic?\t\t: string;\n\tback_clear?\t: string;\n\n\tmax_col?\t: string;\n\tmax_row?\t: string;\n\tbura_col?\t: string;\n\tchk_overrow?\t: string;\n\n\tdx?\t: number;\n\tdy?\t: number;\n\n\tkey?\t: string;\n\ttype?\t: string;\t// 3Dレイヤで使用\n\tcamera_target?\t: string;\n\n\targ?\t: TArg;\n\tfnc?\t: ()=> void;\n\n\tfilter?\t: string;\n\tmatrix?\t: string;\n\tclear_filter?\t: boolean;\n\tenable_filter?\t: boolean;\n\n\tease?\t: string;\n\n\tcentering?\t:boolean;\n\tx?\t\t: number | string;\n\ty?\t\t: number | string;\n\n\tid?\t\t\t: string;\n\tsrc?\t\t: string;\n\tvar_name?\t: string;\n\tset_fnc?\t: string;\n\tbreak_fnc?\t: string;\n\n\tfrom?\t: number;\n\tto?\t\t: number | string;\n\tplace?\t: number;\n\tadd?\t: string;\n\tdel?\t: string;\n\n\tbuf?\t: string;\t// 音系\n\tbuf2?\t: string;\n\tloop?\t: boolean;\n\tvolume?\t: number;\n\tret_ms?\t: number;\n\tend_ms?\t: number;\n\tjoin?\t: boolean;\n\tdo_rec?\t: boolean;\n\tpan?\t: number;\n\tstop?\t: boolean;\n\n\tclear?\t: boolean;\n\n\t// デザインモード\n\t':id_dc'?\t: string;\n\t':id_tag'?\t: string;\n\t':path'?\t: string;\n\t':ln'?\t\t: number;\n\t':col_s'?\t: number;\n\t':col_e'?\t: number;\n\t':idx_tkn'?\t: number;\n\t':token'?\t: string;\n\t':redraw'?\t: boolean;\n\tdesign_unit?: boolean;\t// デザインモードでこのマクロへの引数変更とするか(内部をサーチさせない)\n\n//\tstepin?\t\t: boolean;\t\t// 拡張機能のみ使用:false指定でステップインしない\n//\tnowarn_unused?\t: boolean;\t// 拡張機能のみ使用:未使用警告を出さない\n}\nexport type TTag = (hArg: TArg) => boolean;\nexport type T_HTag = {\n// 変数操作\n\tclearsysvar\t\t\t: TTag;\t// システム変数の全消去\n\tclearvar\t\t\t: TTag;\t// ゲーム変数の全消去\n\tlet_abs\t\t\t\t: TTag;\t// 絶対値\n\tlet_char_at\t\t\t: TTag;\t// 文字列から一字取りだし\n\tlet_index_of\t\t: TTag;\t// 文字列で検索\n\tlet_length\t\t\t: TTag;\t// 文字列の長さ\n\tlet_ml\t\t\t\t: TTag;\t// インラインテキスト代入\n\tlet_replace\t\t\t: TTag;\t// 正規表現で置換\n\tlet_round\t\t\t: TTag;\t// 四捨五入\n\tlet_search\t\t\t: TTag;\t// 正規表現で検索\n\tlet_substr\t\t\t: TTag;\t// 文字列から抜きだし\n\tlet\t\t\t\t\t: TTag;\t// 変数代入・演算\n\n// レイヤ共通\n\tadd_lay\t\t\t\t: TTag;\t// レイヤを追加する\n\tclear_lay\t\t\t: TTag;\t// レイヤ設定の消去\n\tfinish_trans\t\t: TTag;\t// トランス強制終了\n\tlay\t\t\t\t\t: TTag;\t// レイヤ設定\n\ttrans\t\t\t\t: TTag;\t// ページ裏表を交換\n\twt\t\t\t\t\t: TTag;\t// トランス終了待ち\n\tadd_filter\t\t\t: TTag;\t// フィルター追加\n\tclear_filter\t\t: TTag;\t// フィルター全削除\n\tenable_filter\t\t: TTag;\t// フィルター個別切替\n\n// トゥイーンアニメ\n\tpause_tsy\t\t\t: TTag;\t// 一時停止\n\tresume_tsy\t\t\t: TTag;\t// 一時停止再開\n\tstop_tsy\t\t\t: TTag;\t// トゥイーン中断\n\ttsy\t\t\t\t\t: TTag;\t// トゥイーン開始\n\twait_tsy\t\t\t: TTag;\t// トゥイーン終了待ち\n\n// 文字・文字レイヤ\n\tautowc\t\t\t\t: TTag;\t// 文字ごとのウェイト\n\tch\t\t\t\t\t: TTag;\t// 文字を追加する\n\tch_in_style\t\t\t: TTag;\t// 文字出現演出定義\n\tch_out_style\t\t: TTag;\t// 文字消去演出定義\n\tclear_text\t\t\t: TTag;\t// 文字消去\n\tcurrent\t\t\t\t: TTag;\t// デフォルト文字レイヤ設定\n\tendlet_ml\t\t\t: TTag;\t// インラインテキスト代入の終端\n\tendlink\t\t\t\t: TTag;\t// ハイパーリンクの終了\n\ter\t\t\t\t\t: TTag;\t// ページ両面の文字消去\n\tgraph\t\t\t\t: TTag;\t// インライン画像表示\n\tlink\t\t\t\t: TTag;\t// ハイパーリンク\n\tr\t\t\t\t\t: TTag;\t// 改行\n\trec_ch\t\t\t\t: TTag;\t// 履歴書き込み\n\trec_r\t\t\t\t: TTag;\t// 履歴改行\n\treset_rec\t\t\t: TTag;\t// 履歴リセット\n\truby2\t\t\t\t: TTag;\t// 文字列と複数ルビの追加\n\tset_focus\t\t\t: TTag;\t// フォーカス移動\n\tspan\t\t\t\t: TTag;\t// インラインスタイル設定\n\ttcy\t\t\t\t\t: TTag;\t// 縦中横を表示する\n\n// 画像・画像レイヤ\n\tadd_face\t\t\t: TTag;\t// 差分名称の定義\n\twv\t\t\t\t\t: TTag;\t// 動画再生終了待ち\n\n// HTMLフレーム\n\tadd_frame\t\t\t: TTag;\t// フレーム追加\n\tframe\t\t\t\t: TTag;\t// フレームに設定\n\tlet_frame\t\t\t: TTag;\t// フレーム変数を取得\n\tset_frame\t\t\t: TTag;\t// フレーム変数に設定\n\ttsy_frame\t\t\t: TTag;\t// フレームをトゥイーン開始\n\n// イベント\n\tclear_event\t\t\t: TTag;\t// イベントを全消去\n\tenable_event\t\t: TTag;\t// イベント有無の切替\n\tevent\t\t\t\t: TTag;\t// イベントを予約\n\tl\t\t\t\t\t: TTag;\t// 行末クリック待ち\n\tp\t\t\t\t\t: TTag;\t// 改ページクリック待ち\n\ts\t\t\t\t\t: TTag;\t// 停止する\n\tset_cancel_skip\t\t: TTag;\t// スキップ中断予約\n\twait\t\t\t\t: TTag;\t// ウェイトを入れる\n\twaitclick\t\t\t: TTag;\t// クリックを待つ\n\n// BGM・効果音\n\tfadebgm\t\t\t\t: TTag;\t// BGMのフェード\n\tfadeoutbgm\t\t\t: TTag;\t// BGMのフェードアウト\n\tfadeoutse\t\t\t: TTag;\t// 効果音のフェードアウト\n\tfadese\t\t\t\t: TTag;\t// 効果音のフェード\n\tplaybgm\t\t\t\t: TTag;\t// BGM の演奏\n\tplayse\t\t\t\t: TTag;\t// 効果音の再生\n\tstop_allse\t\t\t: TTag;\t// 全効果音再生の停止\n\tstopbgm\t\t\t\t: TTag;\t// BGM 演奏の停止\n\tstopfadese\t\t\t: TTag;\t// 音声フェードの停止\n\tstopse\t\t\t\t: TTag;\t// 効果音再生の停止\n\tvolume\t\t\t\t: TTag;\t// BGMや効果音の音量を指定\n\twb\t\t\t\t\t: TTag;\t// BGM フェードの終了待ち\n\twf\t\t\t\t\t: TTag;\t// 効果音フェードの終了待ち\n\twl\t\t\t\t\t: TTag;\t// BGM 再生の終了待ち\n\tws\t\t\t\t\t: TTag;\t// 効果音再生の終了待ち\n\txchgbuf\t\t\t\t: TTag;\t\t// サウンドバッファの交換\n\n// 条件分岐\n\telse\t\t\t\t: TTag;\t// その他ifブロック開始\n\telsif\t\t\t\t: TTag;\t// 別条件のifブロック開始\n\tendif\t\t\t\t: TTag;\t// ifブロックの終端\n\tif\t\t\t\t\t: TTag;\t// ifブロックの開始\n\n// ラベル・ジャンプ\n\tbutton\t\t\t\t: TTag;\t// ボタンを表示\n\tcall\t\t\t\t: TTag;\t// サブルーチンコール\n\tjump\t\t\t\t: TTag;\t// シナリオジャンプ\n\tpage\t\t\t\t: TTag;\t// ページ移動\n\tpop_stack\t\t\t: TTag;\t// コールスタック破棄\n\treturn\t\t\t\t: TTag;\t// サブルーチンから戻る\n\n// マクロ\n\tbracket2macro\t\t: TTag;\t// 括弧マクロの定義\n\tchar2macro\t\t\t: TTag;\t// 一文字マクロの定義\n\tendmacro\t\t\t: TTag;\t// マクロ定義の終了\n\tmacro\t\t\t\t: TTag;\t// マクロ定義の開始\n\n// しおり\n\tcopybookmark\t\t: TTag;\t// しおりの複写\n\terasebookmark\t\t: TTag;\t// しおりの消去\n\tload\t\t\t\t: TTag;\t// しおりの読込\n\trecord_place\t\t: TTag;\t// セーブポイント指定\n\treload_script\t\t: TTag;\t// スクリプト再読込\n\tsave\t\t\t\t: TTag;\t// しおりの保存\n\n// 画面揺らし\n\tquake\t\t\t\t: TTag;\t// 画面を揺らす\n\tstop_quake\t\t\t: TTag;\t// 画面揺らし中断\n\twq\t\t\t\t\t: TTag;\t// 画面揺らし終了待ち\n\n// システム\n\tclose\t\t\t\t: TTag;\t// アプリの終了\n\texport\t\t\t\t: TTag;\t// プレイデータをエクスポート\n\timport\t\t\t\t: TTag;\t// プレイデータをインポート\n\tloadplugin\t\t\t: TTag;\t// プラグインの読み込み\n\tnavigate_to\t\t\t: TTag;\t// URLを開く\n\tsnapshot\t\t\t: TTag;\t// スナップショット\n\ttitle\t\t\t\t: TTag;\t// タイトル指定\n\ttoggle_full_screen\t: TTag;\t// 全画面状態切替\n\tupdate_check\t\t: TTag;\t// 更新チェック機能\n\twindow\t\t\t\t: TTag;\t// アプリウインドウ設定\n\n// デバッグ・その他\n\tdump_lay\t\t\t: TTag;\t// レイヤのダンプ\n\tdump_script\t\t\t: TTag;\t// 外部へスクリプトを表示\n\tdump_stack\t\t\t: TTag;\t// スタックのダンプ\n\tdump_val\t\t\t: TTag;\t// 変数のダンプ\n\tlog\t\t\t\t\t: TTag;\t// ログ出力\n\ttrace\t\t\t\t: TTag;\t// デバッグ表示へ出力\n}\n\n\nexport type Script = {\n\taToken\t: string[];\t\t// トークン群\n\tlen\t\t: number;\t\t// トークン数\n\taLNum\t: number[];\t\t// トークンの行番号\n};\n\n\nexport const\tREG_TAG\t= /(?<name>[^\\s;\\]]+)/;\t// test用にexport\nexport function\ttagToken2Name_Args(token: string): [name: string, args: string] {\n\tconst e = REG_TAG.exec(token.slice(1, -1));\n\tconst g = e?.groups;\n\tif (! g) throw `タグ記述【${token}】異常です(タグ解析)`;\n\n\tconst nm = g.name!;\n\treturn [nm, token.slice(1 +nm.length, -1)];\n}\nexport function\ttagToken2Name(token: string): string {\n\tconst e = REG_TAG.exec(token.slice(1));\n\tconst g = e?.groups;\n\tif (! g) throw `タグ記述【${token}】異常です(タグ解析)`;\n\n\treturn g.name!;\n}\n\nexport function\tsplitAmpersand(token: string): {\n\t\tname: string;\n\t\ttext: string;\n\t\tcast: string | undefined;\n} {\t// テスト用にpublic\n\tconst equa = token.replaceAll('==', '=').replaceAll('!=', '≠').split('=');\n\t\t// != を弾けないので中途半端ではある\n\tconst cnt_equa = equa.length;\n\tif (cnt_equa < 2 || cnt_equa > 3) throw '「&計算」書式では「=」指定が一つか二つ必要です';\n\n\tconst [e0, e1, e2] = equa;\n\tif (e1!.startsWith('&')) throw '「&計算」書式では「&」指定が不要です';\n\treturn {\n\t\tname: e0!.replaceAll('=', '==').replaceAll('≠', '!='),\n\t\ttext: e1!.replaceAll('=', '==').replaceAll('≠', '!='),\n\t\tcast: cnt_equa === 3 ?e2!.trim() :undefined\n\t};\n}\n\n\nexport class Grammar {\n\tconstructor(private readonly cfg: T_Config) {this.setEscape('')}\n\n\t#REG_TOKEN\t: RegExp;\n\tsetEscape(ce: string) {\n\t\tif (this.#hC2M && ce in this.#hC2M) throw '[エスケープ文字] char【'+ ce +'】が登録済みの括弧マクロまたは一文字マクロです';\n\n\t\t// 1083 matches (14577 step, 9.9ms) https://regex101.com/r/dP0tAY/1\n\t\t/*\n\\\\\\S |\n \\n+\n| \\t+\n|\t\\[let_ml \\s+ [^\\]]+ ]\n\t.+? (?=\\[endlet_ml [\\]\\s])\n| \\[ (?: [^\"'#;\\]]+\n\t| ([\"'#]).*?\\1\n\t| ;[^\\n]* ) *? ]\n| ;[^\\n]*\n| &[^&\\n]+&\n| &&?(?: [^\"'#;\\n&]+ | ([\"'#]).*?\\2 )+\n| ^\\*[^\\s\\[&;\\\\]+\n| [^\\n\\t\\[;\\\\]+\n\t\t*/\n/*\n\t[^\"'#;\\]]++\n\t| ([\"'\\#]).*?\\1\n\t\t\t++ にしたいところだが、jsは未サポートらしい(2022/10/16)\n*/\n\t\t// (new RegExp(\"~\")) の場合は、バックスラッシュは2つ必要\n\t\t\t// https://qiita.com/ue5963/items/bd8e32ac9e6b12aa7fab\n\t\tthis.#REG_TOKEN = new RegExp(\n\t\t(ce\t?`\\\\${ce}\\\\S|` :'')+\t// エスケープシーケンス\n\t\t'\\\\n+'+\t\t\t\t// 改行\n\t\t'|\\\\t+'+\t\t\t// タブ文字\n\t\t'|\\\\[let_ml\\\\s+[^\\\\]]+\\\\]'+\n\t\t\t'.+?'+\t\t\t// [let_ml]〜[endlet_ml]間のテキスト\n\t\t'(?=\\\\[endlet_ml[\\\\]\\\\s])'+\n\t\t'|\\\\[(?:'+\n\t\t\t'[^\"\\'#;\\\\]]+|'+\t// タグ\n\t\t\t'([\"\\'#]).*?\\\\1' +\n\t\t\t\t// . は (?:\\\\${ ce??'\\\\' }.|[^\\\\1]) でなくてよさげ\n\t\t'|;[^\\\\n]*)*?]'+\n\t\t'|;[^\\\\n]*'+\t\t// コメント\n\t\t'|&[^&\\\\n]+&'+\t\t// &表示&\n\t\t'|&&?(?:[^\"\\'#;\\\\n&]+|([\"\\'#]).*?\\\\2)+'+\t// &代入\n\t\t'|^\\\\*[^\\\\s\\\\[&;\\\\\\\\]+'+\t// ラベル\n\t\t`|[^\\\\n\\\\t\\\\[;${ce ?`\\\\${ce}` :''}]+`,\t\t// 本文\n\t\t'gs');\n\t\tthis.#REG_CANTC2M = new RegExp(`[\\\\w\\\\s;[\\\\]*=&|《》${ce ?`\\\\${ce}` :''}]`);\n\t\tthis.#REG_TOKEN_NOTXT = new RegExp(`[\\\\n\\\\t;\\\\[*&${ce ?`\\\\${ce}` :''}]`);\n\t}\n\n\n\t// 括弧マクロの定義\n\tbracket2macro(hArg: TArg, hTag: T_HTag, scr: Script, start_idx: number) {\n\t\tconst {name, text} = hArg;\n\t\tif (! name) throw '[bracket2macro] nameは必須です';\n\t\tif (! text) throw '[bracket2macro] textは必須です';\n\t\tconst op = text.at(0);\n\t\tif (! op) throw '[bracket2macro] textは必須です';\n\t\tif (text.length !== 2) throw '[bracket2macro] textは括弧の前後を示す二文字を指定してください';\n\t\tif (! (name in hTag)) throw `[bracket2macro] 未定義のタグ又はマクロ[${name}]です`;\n\n\t\tthis.#hC2M ??= {};\n\t\tconst cl = text.charAt(1);\n\t\tif (op in this.#hC2M) throw '[bracket2macro] text【'+ op +'】が登録済みの括弧マクロまたは一文字マクロです';\n\t\tif (cl in this.#hC2M) throw '[bracket2macro] text【'+ cl +'】が登録済みの括弧マクロまたは一文字マクロです';\n\t\tif (this.#REG_CANTC2M.test(op)) throw '[bracket2macro] text【'+ op +'】は括弧マクロに使用できない文字です';\n\t\tif (this.#REG_CANTC2M.test(cl)) throw '[bracket2macro] text【'+ cl +'】は括弧マクロに使用できない文字です';\n\n\t\tthis.#hC2M[cl] = '0';\t// チェック用ダミー\n\t\tthis.#hC2M[op] = `[${name} text=`;\n\n\t\tthis.addC2M(`\\\\${op}[^\\\\${cl}]*\\\\${cl}`, `\\\\${op}\\\\${cl}`);\n\n\t\tthis.#replaceScr_C2M(scr, start_idx);\n\t}\n\t// 一文字マクロの定義\n\tchar2macro(hArg: TArg, hTag: T_HTag, scr: Script, start_idx: number) {\n\t\tconst {char, name} = hArg;\n\t\tif (! char) throw '[char2macro] charは必須です';\n\t\tthis.#hC2M ??= {};\n\t\tif (char in this.#hC2M) throw '[char2macro] char【'+ char +'】が登録済みの括弧マクロまたは一文字マクロです';\n\t\tif (this.#REG_CANTC2M.test(char)) throw '[char2macro] char【'+ char +'】は一文字マクロに使用できない文字です';\n\n\t\tif (! name) throw '[char2macro] nameは必須です';\n\t\tif (! (name in hTag)) throw `[char2macro] 未定義のタグ又はマクロ[${name}]です`;\n\n\t\tthis.#hC2M[char] = `[${name}]`;\n\n\t\tthis.addC2M(`\\\\${char}`, `\\\\${char}`);\n\n\t\tthis.#replaceScr_C2M(scr, start_idx);\n\t}\n\t#REG_CANTC2M\t: RegExp;\n\t#REGC2M\t\t\t= new RegExp('');\n\t#regStrC2M\t\t= '';\n\t#regStrC2M4not\t= '';\n\taddC2M(a: string, b: string) {\n\t\tthis.#regStrC2M += `${a}|`;\n\t\tthis.#regStrC2M4not += b;\n\t\tthis.#REGC2M = new RegExp(\n\t\t\t`(${this.#regStrC2M}[^${this.#regStrC2M4not}]+)`, 'g');\n\t}\n\n\n\tresolveScript(txt: string): Script {\n\t\tconst a: string[] = txt\n\t\t.replaceAll(/\\r\\n?/g, '\\n')\n\t\t.match(this.#REG_TOKEN)\n\t\t?.flatMap(tkn=> {\n\t\t\tif (! this.testTagLetml(tkn)) return tkn;\n\n\t\t\tconst r = /^([^\\]]+?])(.*)$/s.exec(tkn);\n\t\t\tif (! r) return tkn;\n\t\t\tconst [, a, b] = r;\n\t\t\treturn [a!, b!];\n\t\t}) ?? [];\n\n\t\tconst scr = {aToken: a, len: a.length, aLNum: []};\n\t\tthis.#replaceScr_C2M(scr);\n\n\t\tthis.#replaceScript_Wildcard(scr);\n\n\t\treturn scr;\n\t}\n\n\n\treadonly #REG_WILDCARD\t= /^\\[(call|loadplugin)\\s/;\n\treadonly #REG_WILDCARD2\t= /\\bfn\\s*=\\s*[^\\s\\]]+/;\n\t#replaceScript_Wildcard(scr: Script) {\n\t\tfor (let i=scr.len -1; i>=0; --i) {\n\t\t\tconst token = scr.aToken[i]!;\n\t\t\tif (! this.#REG_WILDCARD.test(token)) continue;\n\n\t\t\tconst [tag_name, args] = tagToken2Name_Args(token);\n\t\t\tthis.#alzTagArg.parse(args);\n\n\t\t\tconst p_fn = this.#alzTagArg.hPrm.fn;\n\t\t\tif (! p_fn) continue;\n\t\t\tconst {val: fn} = p_fn;\n\t\t\tif (! fn.endsWith('*')) continue;\n\n\t\t\tscr.aToken.splice(i, 1, '\\t', '; '+ token);\n\t\t\tscr.aLNum.splice(i, 1, NaN, NaN);\n\n\t\t\tconst ext = tag_name === 'loadplugin'\n\t\t\t\t? SEARCH_PATH_ARG_EXT.CSS\n\t\t\t\t: SEARCH_PATH_ARG_EXT.SN;\n\t\t\tconst a = this.cfg.matchPath('^'+ fn.slice(0, -1) +'.*', ext);\n\t\t\tfor (const v of a) {\n\t\t\t\tconst nt = token.replace(\n\t\t\t\t\tthis.#REG_WILDCARD2,\n\t\t\t\t\t'fn='+ decodeURIComponent(getFn(v[ext]!))\n\t\t\t\t);\n\t\t\t\t//console.log('\\t='+ nt +'=');\n\t\t\t\tscr.aToken.splice(i, 0, nt);\n\t\t\t\tscr.aLNum.splice(i, 0, NaN);\n\t\t\t}\n\t\t}\n\t\tscr.len = scr.aToken.length;\n\t}\n\t\treadonly\t#alzTagArg\t= new AnalyzeTagArg;\n\n\n\ttestTagLetml(tkn: string): boolean {return /^\\[let_ml\\s/.test(tkn)}\n\ttestTagEndLetml(tkn: string): boolean {return /^\\[endlet_ml\\s*]/.test(tkn)}\n\n\n\t#hC2M\t: {[char: string]: string} | undefined = undefined;\n\t#REG_TOKEN_NOTXT\t: RegExp;\n\t#replaceScr_C2M(scr: Script, start_idx = 0): void {\n\t\tif (! this.#hC2M) return;\n\n\t\tfor (let i=scr.len- 1; i >= start_idx; --i) {\n\t\t\tconst token = scr.aToken[i]!;\n\t\t\tif (this.testNoTxt(token.at(0) ?? '\\n')) continue;\n\t\t\t\t// 省略時は #REG_TOKEN_NOTXT に引っかかる \\n に\n\n\t\t\tconst lnum = scr.aLNum[i]!;\n\t\t\tconst a = token.match(this.#REGC2M);\n\t\t\tif (! a) continue;\n\t\t\tlet del = 1;\n\t\t\tfor (let j=a.length -1; j>=0; --j) {\n\t\t\t\tlet ch = a[j]!;\n\t\t\t\tconst macro = this.#hC2M[ch.at(0) ?? ' '];\n\t\t\t\t\t// 省略時は #REG_CANTC2M に引っかかる ' ' に\n\t\t\t\tif (macro) {\n\t\t\t\t\tch = macro +(macro.endsWith(']')\n\t\t\t\t\t\t? ''\n\t\t\t\t\t\t: `'${ch.slice(1, -1)}']`);\n\t\t\t\t\t// 文字列は半角空白を意識して''で囲むが、いずれ変えたい場合がある?\n\t\t\t\t}\n\t\t\t\tscr.aToken.splice(i, del, ch);\n\n\t\t\t\tscr.aLNum.splice(i, del, lnum);\n\t\t\t\tdel = 0;\n\t\t\t}\n\t\t}\n\t\tscr.len = scr.aToken.length;\n\t}\n\ttestNoTxt(ch: string): boolean {return this.#REG_TOKEN_NOTXT.test(ch)}\t//4tst\n\n}\n","/* ***** BEGIN LICENSE BLOCK *****\n\tCopyright (c) 2018-2025 Famibee (famibee.blog38.fc2.com)\n\n\tThis software is released under the MIT License.\n\thttp://opensource.org/licenses/mit-license.php\n** ***** END LICENSE BLOCK ***** */\n\nimport {CmnLib, argChk_Boolean, parseColor} from './CmnLib';\nimport type {T_HTag, TArg} from './Grammar';\nimport type {T_Main, Scope, T_VAL_BSNU, T_VAL_DATA} from './CmnInterface';\nimport type {SysBase} from './SysBase';\nimport {DebugMng} from './DebugMng';\nimport {Config} from './Config';\nimport {splitAmpersand, tagToken2Name_Args} from './Grammar';\nimport type {ScriptIterator} from './ScriptIterator';\nimport type {LayerMng} from './LayerMng';\nimport type {EventMng} from './EventMng';\n\nimport {type IApplicationOptions, Application, utils} from 'pixi.js';\n\n\nconst\tSN_ID\t= 'skynovel';\n\n\nexport class Main implements T_Main {\n\tstatic\tasync generate(sys: SysBase): Promise<Main> {\n\t\tutils.skipHello();\n\n\t\tconst m = new Main(sys);\n\t\tawait m.#init()\n\t\t.catch((e: unknown)=> console.error('Main.generate err e:%o', e));\n\n\t\treturn m;\n\t}\n\n\n\tcvs\t\t\t: HTMLCanvasElement;\n\n\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t#hTag\t\t: T_HTag\t\t= Object.create(null);\t// タグ処理辞書\n\n\t#scrItr\t\t: ScriptIterator;\n\t#layMng\t\t: LayerMng;\n\t#evtMng\t\t: EventMng;\n\n\t#aDest\t\t: (()=> void)[]\t\t= [];\n\n\n\tprivate constructor(private readonly sys: SysBase) {}\n\n\tasync #init() {\n\t\tconst cfg = await Config.generate(this.sys);\n\t\tthis.sys.setMain(this, cfg);\n\n\t\tconst hApp: IApplicationOptions = {\n\t\t\twidth\t\t\t: cfg.oCfg.window.width,\n\t\t\theight\t\t\t: cfg.oCfg.window.height,\n\t\t\tbackgroundColor\t: parseColor(String(cfg.oCfg.init.bg_color)),\n\t\t\t\t// このString()は後方互換性のため必須\n\t\t\tresolution\t\t: globalThis.devicePixelRatio,\n\t\t};\n\n\t\tconst cvs = <HTMLCanvasElement | null>document.getElementById(SN_ID);\n\t\tif (cvs) {\n\t\t\tconst clone_cvs = <HTMLCanvasElement>cvs.cloneNode(true);\n\t\t\tclone_cvs.id = SN_ID;\n\t\t\thApp.view = cvs;\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tconst p = cvs.parentNode!;\n\t\t\tthis.#aDest.unshift(()=> p.appendChild(clone_cvs));\n\t\t}\n\t\telse {\t// 自動的に作ってくれるが、どうも appendChild に遅延があるので\n\t\t\tconst c = document.createElement('canvas');\n\t\t\tc.id = SN_ID;\n\t\t\thApp.view = c;\n\t\t\tdocument.body.appendChild(c);\n\t\t\tthis.#aDest.unshift(()=> document.body.removeChild(c));\n\t\t}\n\n\t\tconst app = new Application(hApp);\n\t\tthis.#aDest.unshift(()=> {\n\t\t\tutils.clearTextureCache();\n\t\t\tthis.sys.destroy();\n\t\t\tapp.destroy(false);\t// remove canvas from DOM が非同期なのでウチがやる\n\t\t});\n\n\t\tthis.cvs = app.view;\n\t\tthis.cvs.id = SN_ID +'_act';\n\t\tif (! cvs) document.body.appendChild(this.cvs);\n\n\n\t\tconst cc = document.createElement('canvas').getContext('2d');\n\t\tif (! cc) throw '#init cc err';\n\t\tCmnLib.cc4ColorName = cc;\n\n\t\tconst [{Variable}, {PropParser}, {SoundMng}, {ScriptIterator}, {LayerMng}, {EventMng}, {Button}] = await Promise.all([\n\t\t\timport('./Variable'),\n\t\t\timport('./PropParser'),\n\t\t\timport('./SoundMng'),\n\t\t\timport('./ScriptIterator'),\n\t\t\timport('./LayerMng'),\n\t\t\timport('./EventMng'),\n\t\t\timport('./Button'),\n\t\t]);\n\n\t\tButton.init(cfg);\n\n\t\t// 変数\n\t\tconst val = new Variable(this.sys, cfg, this.#hTag);\n\t\tconst prpPrs = new PropParser(val, cfg.oCfg.init.escape);\n\t\tthis.#setVal_Nochk = (scope, nm, v, autocast)=> val.setVal_Nochk(scope, nm, v, autocast);\n\t\tthis.#getValAmpersand = v=> prpPrs.getValAmpersand(v);\n\t\tthis.#parse = s=> prpPrs.parse(s);\n\n\t\t// システム\n\t\tawait Promise.allSettled(this.sys.init(this.#hTag, app, val));\t// 変数準備完了\n\n\t\t// BGM・効果音\n\t\tconst sndMng = new SoundMng(cfg, this.#hTag, val, this, this.sys);\n\t\tthis.#aDest.unshift(()=> sndMng.destroy());\n\n\t\t// 条件分岐、ラベル・ジャンプ、マクロ、しおり\n\t\tthis.#scrItr = new ScriptIterator(cfg, this.#hTag, this, val, prpPrs, sndMng, this.sys);\n\t\tthis.#aDest.unshift(()=> this.#scrItr.destroy());\n\n\t\t// デバッグ・その他\n\t\tconst dbgMng = new DebugMng(this.sys, this.#hTag, this.#scrItr);\n\t\tthis.#aDest.unshift(()=> dbgMng.destroy());\n\t\tthis.errScript = (mes: string, isThrow = true)=> {\n\t\t\tthis.stop();\n\t\t\tDebugMng.myTrace(mes);\n\t\t\tif (CmnLib.debugLog) console.log('🍜 SKYNovel err!');\n\t\t\tif (isThrow) throw mes;\n\t\t}\n\n\t\t// レイヤ共通、文字レイヤ、画像レイヤ\n\t\tthis.#layMng = new LayerMng(cfg, this.#hTag, app, val, this, this.#scrItr, this.sys, sndMng, prpPrs);\n\t\tthis.#aDest.unshift(()=> this.#layMng.destroy());\n\n\t\t// イベント\n\t\tthis.#evtMng = new EventMng(cfg, this.#hTag, app, this, this.#layMng, val, sndMng, this.#scrItr, this.sys);\n\t\tthis.#aDest.unshift(()=> this.#evtMng.destroy());\n\n\t\tthis.#aDest.unshift(()=> {\n\t\t\tthis.stop();\n\t\t\tthis.#isLoop = false;\n\n\t\t\tconst fncDummy = ()=> true;\n\t\t\tfor (const key in this.#hTag) this.#hTag[<keyof T_HTag>key] = fncDummy;\n\t\t});\n\t}\n\n\n\tdestroy() {\n\t\tthis.resume = this.destroy = ()=> { /* empty */ };\t// destroy()連打対策\n\n\t\tthis.cvs.parentElement?.removeChild(this.cvs);\n\t\t\t// (ギャラリーで)document.body はエラーになる\n\t\tfor (const f of this.#aDest) f();\n\t\tthis.#aDest = [];\n\t}\n\n\n\terrScript = (_mes: string, _isThrow = true)=> { /* empty */ }\n\n\n\tresumeByJumpOrCall(hArg: TArg) {\n\t\tif (hArg.url) {\n\t\t\tthis.#hTag.navigate_to(hArg);\n\t\t\tthis.#scrItr.jumpJustBefore();\n\t\t\treturn;\n\t\t}\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-base-to-string\n\t\tthis.#setVal_Nochk('tmp', 'sn.eventArg', String(hArg.arg ?? ''));\n\t\tthis.#setVal_Nochk('tmp', 'sn.eventLabel', hArg.label ?? '');\n// console.log(`📜 %cresumeByJumpOrCall:%o`, 'color:#3B0;', hArg);\n\t\tif (argChk_Boolean(hArg, 'call', false)) {\n\t\t\tthis.#scrItr.subIdxToken();\t// 「コール元の次」に進めず、「コール元」に戻す\n\t\t\tif (this.#hTag.call(hArg)) return;\n\t\t}\n\t\telse {\n\t\t\tthis.#hTag.clear_event({});\n\t\t\tif (this.#hTag.jump(hArg)) return;\n\t\t}\n\t\tthis.resume();\n\t}\n\t\t#setVal_Nochk = (_scope: Scope, _nm: string, _val: T_VAL_BSNU, _autocast = false)=> { /* empty */ }\n\n\tresume() {\n// console.log(`📜🟢 resume!`);\n\t\t// スクリプトが動くとき、ブレイクマークなど消去\n\t\tthis.#layMng.clearBreak();\n\t\tthis.#scrItr.noticeBreak(false);\n\t\tthis.#evtMng.hideHint();\n\n\t\tqueueMicrotask(()=> {void this.#main()});\n\t}\n\treadonly stop = ()=> {\n// console.log(`📜🔴 stop!`);\n\t\tthis.#scrItr.noticeBreak(true);\n\t};\n\n\tsetLoop(isLoop: boolean, mes = '') {\n\t\t///console.log('setLoop:'+ (isLoop ?'resume!' :'stop!') +' mes:'+ mes);\n\t\t// eslint-disable-next-line no-cond-assign\n\t\tif (this.#isLoop = isLoop) this.resume(); else this.stop();\n\t\tthis.sys.setTitleInfo(mes ?` -- ${mes}中` :'');\n\t}\n\t// oxlint-disable-next-line no-unused-private-class-members\n\t#isLoop = true;\n\n\t//MARK: メイン処理(シナリオ解析)\n\tasync #main() {\n\t\tlet errHd = '';\n\t\ttry {\n\t\t\twhile (this.#isLoop) {\n\t\t\t\tlet token = this.#scrItr.nextToken();\n\t\t\t\tif (! token) return;\t// 初期化前に終了した場合向け\n\n\t\t\t\tconst uc = token.charCodeAt(0);\t// TokenTopUnicode\n\t\t\t\t// \\t タブ\n\t\t\t\tif (uc === 9) continue;\n\t\t\t\t// \\n 改行\n\t\t\t\tif (uc === 10) {this.#scrItr.addLineNum(token.length); continue}\n\t\t\t\t// [ タグ開始\n\t\t\t\tif (uc === 91) {\n\t\t\t\t\terrHd = 'タグ開始';\n\t\t\t\t\tif (this.#scrItr.isBreak(token)) return;\n\n\t\t\t\t\tconst [tag_name, args] = tagToken2Name_Args(token);\n\t\t\t\t\terrHd = `[${tag_name}]例外`;\n\n\t\t\t\t\tconst cl = (token.match(/\\n/g) ?? []).length;\n\t\t\t\t\tif (cl > 0) this.#scrItr.addLineNum(cl);\n\t\t\t\t\tif (await this.#scrItr.タグ解析(\n\t\t\t\t\t\t<keyof T_HTag>tag_name, args\n\t\t\t\t\t)) {this.stop(); return}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// & 変数操作・変数表示\n\t\t\t\t// an時代・瀬戸愛羅さんより https://famibee.blog.fc2.com/blog-entry-245.html\n\t\t\t\tif (uc === 38) {\n\t\t\t\t\tif (! token.endsWith('&')) {\n\t\t\t\t\t\terrHd = '変数計算';\n\t\t\t\t\t\tif (this.#scrItr.isBreak(token)) return;\n\t\t\t\t\t\tconst o = splitAmpersand(token.slice(1));\n\t\t\t\t\t\to.name = this.#getValAmpersand(o.name);\n\t\t\t\t\t\to.text = String(this.#parse(o.text));\n\t\t\t\t\t\tthis.#hTag.let(o);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\terrHd = '変数操作';\n\t\t\t\t\tif (token.charAt(1) === '&') throw new Error('「&表示&」書式では「&」指定が不要です');\n\t\t\t\t\ttoken = String(this.#parse( token.slice(1, -1) ));\n\t\t\t\t\t\t// -> 文字表示 へ\n\t\t\t\t}\n\t\t\t\t// ; コメント\n\t\t\t\telse if (uc === 59) continue;\n\t\t\t\t// * ラベル\n\t\t\t\telse if (uc === 42 && token.length > 1) continue;\n\n\t\t\t\t// 文字表示\n\t\t\t\terrHd = '文字表示';\n\t\t\t\tthis.#layMng.setNormalChWait();\n\t\t\t\tconst tl = this.#layMng.currentTxtlayForeNeedErr;\n\t\t\t\ttl.tagCh(token);\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tthis.errScript(`${errHd} ${\n\t\t\t\te instanceof Error ?`mes=${e.message}(${e.name})` :String(e)\n\t\t\t}`, false);\n\t\t}\n\t}\n\t\t#getValAmpersand\t= (_v: string)=> '';\n\t\t#parse\t\t\t\t: (_s: string)=> T_VAL_DATA;\n\n}\n"],"names":["PROTOCOL_USERDATA","PROTOCOL_DL","Config","ConfigBase","sys","c","fn","res","dec","oCfg","CmnLib","extptn","SEARCH_PATH_ARG_EXT","idx2LnCol","sSn","idx","lenNm","ln","ch","len","AnalyzeTagArg","#REG_TAGARG","args","#hPrm","#isKomeParam","groups","key","val","val2","def","def2","literal","token","hRng","index","z","lenVnm","k_ch","k_ln","v_ln","v_ch","REG_TAG","tagToken2Name_Args","g","nm","tagToken2Name","splitAmpersand","equa","cnt_equa","e0","e1","e2","Grammar","cfg","#REG_TOKEN","ce","#hC2M","#REG_CANTC2M","#REG_TOKEN_NOTXT","hArg","hTag","scr","start_idx","name","text","op","cl","#replaceScr_C2M","char","#REGC2M","#regStrC2M","#regStrC2M4not","a","b","txt","tkn","r","#replaceScript_Wildcard","#REG_WILDCARD","#REG_WILDCARD2","i","tag_name","#alzTagArg","p_fn","ext","v","nt","getFn","lnum","del","j","macro","SN_ID","Main","utils.skipHello","m","#init","e","#hTag","#scrItr","#layMng","#evtMng","#aDest","hApp","parseColor","cvs","clone_cvs","p","app","Application","utils.clearTextureCache","cc","Variable","PropParser","SoundMng","ScriptIterator","LayerMng","EventMng","Button","prpPrs","#setVal_Nochk","scope","autocast","#getValAmpersand","#parse","s","sndMng","dbgMng","DebugMng","mes","isThrow","#isLoop","fncDummy","f","_mes","_isThrow","argChk_Boolean","_scope","_nm","_val","_autocast","#main","isLoop","errHd","uc","o","_v"],"mappings":"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"}
@@ -16,14 +16,14 @@ class o {
16
16
  }
17
17
  /*
18
18
  ★Unicodeで「漢字」の正規表現 – ものかの http://tama-san.com/kanji-regex/
19
- 2E80..2FDFCJK部首補助+康熙部首
20
- 3005々(漢字の踊り字)
21
- 3007〇(漢数字のゼロ)
22
- 303B〻(漢字の踊り字)
23
- 3400..4DBFCJK統合漢字拡張A
24
- 4E00..9FFFCJK統合漢字
25
- F900..FAFFCJK互換漢字
26
- 20000..2FFFFCJK統合漢字拡張B〜F+CJK互換漢字追加+念のためU+2FFFFまで
19
+ 2E80..2FDF CJK部首補助+康熙部首
20
+ 3005 々(漢字の踊り字)
21
+ 3007 〇(漢数字のゼロ)
22
+ 303B 〻(漢字の踊り字)
23
+ 3400..4DBF CJK統合漢字拡張A
24
+ 4E00..9FFF CJK統合漢字
25
+ F900..FAFF CJK互換漢字
26
+ 20000..2FFFF CJK統合漢字拡張B〜F+CJK互換漢字追加+念のためU+2FFFFまで
27
27
 
28
28
  [\x{2E80}-\x{2FDF}々〇〻\x{3400}-\x{4DBF}\x{4E00}-\x{9FFF}\x{F900}-\x{FAFF}\x{20000}-\x{2FFFF}]
29
29
  [\u2E80-\u2FDF々〇〻\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF\u20000-\u2FFFF]
@@ -46,20 +46,21 @@ class o {
46
46
  }
47
47
  putTxt(t) {
48
48
  for (const { groups: s } of t.matchAll(o.#n)) {
49
- const { ruby: c, kan_ruby: e, kan: r = "", ce: i, txt: f = "", str: n = "" } = s;
49
+ if (!s) break;
50
+ const { ruby: c, kan_ruby: e, kan: a = "", ce: i, txt: r = "", str: n = "" } = s;
50
51
  if (c) {
51
52
  this.putTxtRb(decodeURIComponent(n), c);
52
53
  continue;
53
54
  }
54
55
  if (e) {
55
- this.putTxtRb(r, e);
56
+ this.putTxtRb(a, e);
56
57
  continue;
57
58
  }
58
59
  if (i) {
59
60
  this.#t(i.slice(1), "");
60
61
  continue;
61
62
  }
62
- for (const a of Array.from(f)) this.#t(a, "");
63
+ for (const f of Array.from(r)) this.#t(f, "");
63
64
  }
64
65
  }
65
66
  putTxtRb(t, s) {
@@ -70,17 +71,19 @@ class o {
70
71
  const c = Array.from(t), e = c.length;
71
72
  if (/^\*.?$/.test(s)) {
72
73
  const n = "center|" + (s === "*" ? o.#s : s.charAt(1));
73
- for (let a = 0; a < e; ++a) this.#t(c[a], n);
74
+ for (const f of c) this.#t(f, n);
74
75
  return;
75
76
  }
76
77
  if (e === 1 || !s.includes(" ")) {
77
78
  this.#t(t, decodeURIComponent(s));
78
79
  return;
79
80
  }
80
- const r = s.split(" "), i = r.length, f = i > e ? i : e;
81
- for (let n = 0; n < f; ++n) this.#t(
81
+ const a = s.split(" "), i = a.length, r = i > e ? i : e;
82
+ for (let n = 0; n < r; ++n) this.#t(
83
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
82
84
  n < e ? c[n] : "",
83
- n < i ? decodeURIComponent(r[n]) : ""
85
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
86
+ n < i ? decodeURIComponent(a[n]) : ""
84
87
  );
85
88
  }
86
89
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RubySpliter.js","sources":["../src/sn/RubySpliter.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/* eslint-disable no-irregular-whitespace */\n/* ***** BEGIN LICENSE BLOCK *****\n\tCopyright (c) 2018-2025 Famibee (famibee.blog38.fc2.com)\n\n\tThis software is released under the MIT License.\n\thttp://opensource.org/licenses/mit-license.php\n** ***** END LICENSE BLOCK ***** */\n\nimport type {TArg} from './Grammar';\nimport type {T_PutCh} from './CmnInterface';\n\nexport type IAutoPage = (idx: number, str: string) => void;\n\n\nexport class RubySpliter {\n\tstatic\t#sesame\t\t= 'ヽ';\n\tstatic\tsetting(hArg: TArg) {if (hArg.sesame) RubySpliter.#sesame = hArg.sesame}\n\tstatic\tgetSesame() {return RubySpliter.#sesame}\n\n\tstatic\tdestroy() {RubySpliter.#sesame = 'ヽ'}\n\n\t#putCh\t: T_PutCh\t= ()=> { /* empty */ };\n\tinit(putCh: T_PutCh) {this.#putCh = putCh}\n\n/*\n\t\t★Unicodeで「漢字」の正規表現 – ものかの http://tama-san.com/kanji-regex/\n\t\t2E80..2FDF CJK部首補助+康熙部首\n\t\t3005々(漢字の踊り字)\n\t\t3007〇(漢数字のゼロ)\n\t\t303B〻(漢字の踊り字)\n\t\t3400..4DBF CJK統合漢字拡張A\n\t\t4E00..9FFF CJK統合漢字\n\t\tF900..FAFF CJK互換漢字\n\t\t20000..2FFFF CJK統合漢字拡張B〜F+CJK互換漢字追加+念のためU+2FFFFまで\n\n\t\t[\\x{2E80}-\\x{2FDF}々〇〻\\x{3400}-\\x{4DBF}\\x{4E00}-\\x{9FFF}\\x{F900}-\\x{FAFF}\\x{20000}-\\x{2FFFF}]\n\t\t[\\u2E80-\\u2FDF々〇〻\\u3400-\\u4DBF\\u4E00-\\u9FFF\\uF900-\\uFAFF\\u20000-\\u2FFFF]\n\t\t[⺀-⿟々〇〻㐀-䶿一-鿿豈-﫿\\u20000-\\u2FFFF]\t\t// 含まれない文字がある\n\t\t[⺀-⿟々〇〻㐀-鿿豈-﫿\\u20000-\\u2FFFF]\t\t\t// ヽ--30FD が変に引っかかる。多分\\u2000-\\u2FFF解釈\n\t\t\\\\u{20000}-\\\\u{2FFFF}\t// 五桁だとエラー\n\n\t\t【2022/10/03】ruby正規表現のUnicode プロパティ(とPOSIX文字クラス) - Qiita https://qiita.com/Takayuki_Nakano/items/8d38beaddb84b488d683\n\t\t\t> このHiraganaプロパティ、長音記号は含まれていません。\n\t\t\t> \\p{Han}…簡体字や繁体字、韓国語の漢字…ベトナム語の漢字にもマッチ\n\n\t\t・Unicode文字一覧表 - instant tools https://tools.m-bsys.com/ex/unicode_table.php\n*/\n\tstatic\t#REG_RUBY\t: RegExp;\n\tstatic\tsetEscape(ce: string) {\n\t\t// 830 match 11293 step(1.7ms) PCRE2 https://regex101.com/r/BBrQtC/1\n\t\t/*\n(?<txt4>\\\\\\S)\n|\t|(?<str>[^《\\n]+)《(?<ruby>[^》\\n]+)》\n|\t(?: (?<kan>[⺀-⿟々〇〻㐀-鿿豈-﫿]+ [ぁ-ヿ]* | [^ |《》\\n])\n\t\t《(?<kan_ruby>[^》\\n]+)》)\n|\t(?<txt>\n\t[\\xD800-\\xDBFF][\\xDC00-\\xDFFF]\n|\t[^|《》]+?\n|\t.)\n\t\t*/\n\t\t// (new RegExp(\"~\")) の場合は、バックスラッシュは2つ必要\n\t\tRubySpliter.#REG_RUBY = new RegExp(\n\t\t\t(ce ?`(?<ce>\\\\${ce}\\\\S)|` :'')+\n\t\t\t'|(?<str>[^《\\\\n]+)《(?<ruby>[^》\\\\n]+)》'+\n\t\t\t'|(?:(?<kan>[⺀-⿟々〇〻㐀-鿿豈-﫿]+[ぁ-ヿ]*|[^ |《》\\\\n])'+\n\t\t\t'《(?<kan_ruby>[^》\\\\n]+)》)'+\n\t\t\t'|(?<txt>'+\n\t\t\t'[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]'+\t// 上位 + 下位サロゲート\n\t\t\t'|[^|《》]+?'+\t\t// 不要だが細切れにしないほうが後々効率で有利\n\t\t\t'|.)',\n\t\t\t'gs'\n\t\t);\n\t}\n\n\tputTxt(text: string) {\n\t\tfor (const {groups} of text.matchAll(RubySpliter.#REG_RUBY)) {\n\t\t\tconst {ruby, kan_ruby, kan='', ce, txt='', str=''} = groups!;\n\t\t\tif (ruby) {this.putTxtRb(decodeURIComponent(str), ruby); continue}\n\n\t\t\tif (kan_ruby) {this.putTxtRb(kan, kan_ruby); continue}\n\t\t\tif (ce) {this.#putCh(ce.slice(1), ''); continue}\n\n\t\t\tfor (const v of Array.from(txt)) this.#putCh(v, '');\n\t\t\t\t// txt.split('')や [...txt] はサロゲートペアで問題\n\t\t}\n\t}\n\n\tputTxtRb(text: string, ruby: string) {\t// テスト用にpublic\n\t\t// 自動区切りを行わない(内部的 json文法)\n\t\tif (/^\\w+|{\"/.test(ruby)) {this.#putCh(text, ruby); return}\n\n\t\tconst a: string[] = Array.from(text);\n\t\tconst len = a.length;\n\t\tif (/^\\*.?$/.test(ruby)) {\t// 傍点文法\n\t\t\tconst rb_ses = 'center|'+ (ruby === '*' ?RubySpliter.#sesame :ruby.charAt(1));\n\t\t\tfor (let i=0; i<len; ++i) this.#putCh(a[i]!, rb_ses);\n\t\t\treturn;\n\t\t}\n\n\t\t// 自動区切りを行わない(単漢字など)\n\t\tif (len === 1 || ! ruby.includes(' ')) {\n\t\t\tthis.#putCh(text, decodeURIComponent(ruby));\n\t\t\treturn;\n\t\t}\n\n\t\t// 空白がある場合はユーザが区切りを指定しているものと見なす\n\t\tconst aR = ruby.split(' ');\n\t\tconst lenR = aR.length;\n\t\tconst len_max = lenR > len ?lenR :len;\n\t\tfor (let i=0; i<len_max; ++i) this.#putCh(\n\t\t\ti < len ? a[i]! : '',\n\t\t\ti < lenR ? decodeURIComponent(aR[i]!) : ''\n\t\t);\n\t}\n\n}\n"],"names":["RubySpliter","#sesame","hArg","#putCh","putCh","#REG_RUBY","ce","text","groups","ruby","kan_ruby","kan","txt","str","v","a","len","rb_ses","i","aR","lenR","len_max"],"mappings":"AAeO,MAAMA,EAAY;AAAA,EACxB,OAAOC,KAAW;AAAA,EAClB,OAAO,QAAQC,GAAY;AAAC,IAAIA,EAAK,WAAQF,EAAYC,KAAUC,EAAK;AAAA,EAAM;AAAA,EAC9E,OAAO,YAAY;AAAC,WAAOF,EAAYC;AAAA,EAAO;AAAA,EAE9C,OAAO,UAAU;AAAC,IAAAD,EAAYC,KAAU;AAAA,EAAG;AAAA,EAE3CE,KAAmB,MAAK;AAAA,EAAc;AAAA,EACtC,KAAKC,GAAgB;AAAC,SAAKD,KAASC;AAAA,EAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyBzC,OAAOC;AAAA,EACP,OAAO,UAAUC,GAAY;AAa5B,IAAAN,EAAYK,KAAY,IAAI;AAAA,OAC1BC,IAAI,WAAWA,CAAE,UAAS,MAC3B;AAAA,MAOA;AAAA,IAAA;AAAA,EAEF;AAAA,EAEA,OAAOC,GAAc;AACpB,eAAW,EAAC,QAAAC,OAAWD,EAAK,SAASP,EAAYK,EAAS,GAAG;AAC5D,YAAM,EAAC,MAAAI,GAAM,UAAAC,GAAU,KAAAC,IAAI,IAAI,IAAAL,GAAI,KAAAM,IAAI,IAAI,KAAAC,IAAI,GAAA,IAAML;AACrD,UAAIC,GAAM;AAAC,aAAK,SAAS,mBAAmBI,CAAG,GAAGJ,CAAI;AAAG;AAAA,MAAQ;AAEjE,UAAIC,GAAU;AAAC,aAAK,SAASC,GAAKD,CAAQ;AAAG;AAAA,MAAQ;AACrD,UAAIJ,GAAI;AAAC,aAAKH,GAAOG,EAAG,MAAM,CAAC,GAAG,EAAE;AAAG;AAAA,MAAQ;AAE/C,iBAAWQ,KAAK,MAAM,KAAKF,CAAG,EAAG,MAAKT,GAAOW,GAAG,EAAE;AAAA,IAEnD;AAAA,EACD;AAAA,EAEA,SAASP,GAAcE,GAAc;AAEpC,QAAI,UAAU,KAAKA,CAAI,GAAG;AAAC,WAAKN,GAAOI,GAAME,CAAI;AAAG;AAAA,IAAM;AAE1D,UAAMM,IAAc,MAAM,KAAKR,CAAI,GAC7BS,IAAMD,EAAE;AACd,QAAI,SAAS,KAAKN,CAAI,GAAG;AACxB,YAAMQ,IAAS,aAAYR,MAAS,MAAKT,EAAYC,KAASQ,EAAK,OAAO,CAAC;AAC3E,eAASS,IAAE,GAAGA,IAAEF,GAAK,EAAEE,EAAG,MAAKf,GAAOY,EAAEG,CAAC,GAAID,CAAM;AACnD;AAAA,IACD;AAGA,QAAID,MAAQ,KAAK,CAAEP,EAAK,SAAS,GAAG,GAAG;AACtC,WAAKN,GAAOI,GAAM,mBAAmBE,CAAI,CAAC;AAC1C;AAAA,IACD;AAGA,UAAMU,IAAKV,EAAK,MAAM,GAAG,GACnBW,IAAOD,EAAG,QACVE,IAAUD,IAAOJ,IAAKI,IAAMJ;AAClC,aAASE,IAAE,GAAGA,IAAEG,GAAS,EAAEH,EAAG,MAAKf;AAAA,MAClCe,IAAIF,IAAMD,EAAEG,CAAC,IAAK;AAAA,MAClBA,IAAIE,IAAO,mBAAmBD,EAAGD,CAAC,CAAE,IAAI;AAAA,IAAA;AAAA,EAE1C;AAED;"}
1
+ {"version":3,"file":"RubySpliter.js","sources":["../src/sn/RubySpliter.ts"],"sourcesContent":["/* eslint-disable no-irregular-whitespace */\n/* ***** BEGIN LICENSE BLOCK *****\n\tCopyright (c) 2018-2025 Famibee (famibee.blog38.fc2.com)\n\n\tThis software is released under the MIT License.\n\thttp://opensource.org/licenses/mit-license.php\n** ***** END LICENSE BLOCK ***** */\n\nimport type {TArg} from './Grammar';\nimport type {T_PutCh} from './CmnInterface';\n\nexport type IAutoPage = (idx: number, str: string) => void;\n\n\nexport class RubySpliter {\n\tstatic\t#sesame\t\t= 'ヽ';\n\tstatic\tsetting(hArg: TArg) {if (hArg.sesame) RubySpliter.#sesame = hArg.sesame}\n\tstatic\tgetSesame() {return RubySpliter.#sesame}\n\n\tstatic\tdestroy() {RubySpliter.#sesame = 'ヽ'}\n\n\t#putCh\t: T_PutCh\t= ()=> { /* empty */ };\n\tinit(putCh: T_PutCh) {this.#putCh = putCh}\n\n/*\n\t\t★Unicodeで「漢字」の正規表現 – ものかの http://tama-san.com/kanji-regex/\n\t\t2E80..2FDF\tCJK部首補助+康熙部首\n\t\t3005\t\t々(漢字の踊り字)\n\t\t3007\t\t〇(漢数字のゼロ)\n\t\t303B\t\t〻(漢字の踊り字)\n\t\t3400..4DBF\t\tCJK統合漢字拡張A\n\t\t4E00..9FFF\t\tCJK統合漢字\n\t\tF900..FAFF\t\tCJK互換漢字\n\t\t20000..2FFFF\tCJK統合漢字拡張B〜F+CJK互換漢字追加+念のためU+2FFFFまで\n\n\t\t[\\x{2E80}-\\x{2FDF}々〇〻\\x{3400}-\\x{4DBF}\\x{4E00}-\\x{9FFF}\\x{F900}-\\x{FAFF}\\x{20000}-\\x{2FFFF}]\n\t\t[\\u2E80-\\u2FDF々〇〻\\u3400-\\u4DBF\\u4E00-\\u9FFF\\uF900-\\uFAFF\\u20000-\\u2FFFF]\n\t\t[⺀-⿟々〇〻㐀-䶿一-鿿豈-﫿\\u20000-\\u2FFFF]\t\t// 含まれない文字がある\n\t\t[⺀-⿟々〇〻㐀-鿿豈-﫿\\u20000-\\u2FFFF]\t\t\t// ヽ--30FD が変に引っかかる。多分\\u2000-\\u2FFF解釈\n\t\t\\\\u{20000}-\\\\u{2FFFF}\t// 五桁だとエラー\n\n\t\t【2022/10/03】ruby正規表現のUnicode プロパティ(とPOSIX文字クラス) - Qiita https://qiita.com/Takayuki_Nakano/items/8d38beaddb84b488d683\n\t\t\t> このHiraganaプロパティ、長音記号は含まれていません。\n\t\t\t> \\p{Han}…簡体字や繁体字、韓国語の漢字…ベトナム語の漢字にもマッチ\n\n\t\t・Unicode文字一覧表 - instant tools https://tools.m-bsys.com/ex/unicode_table.php\n*/\n\tstatic\t#REG_RUBY\t: RegExp;\n\tstatic\tsetEscape(ce: string) {\n\t\t// 830 match 11293 step(1.7ms) PCRE2 https://regex101.com/r/BBrQtC/1\n\t\t/*\n(?<txt4>\\\\\\S)\n|\t|(?<str>[^《\\n]+)《(?<ruby>[^》\\n]+)》\n|\t(?: (?<kan>[⺀-⿟々〇〻㐀-鿿豈-﫿]+ [ぁ-ヿ]* | [^ |《》\\n])\n\t\t《(?<kan_ruby>[^》\\n]+)》)\n|\t(?<txt>\n\t[\\xD800-\\xDBFF][\\xDC00-\\xDFFF]\n|\t[^|《》]+?\n|\t.)\n\t\t*/\n\t\t// (new RegExp(\"~\")) の場合は、バックスラッシュは2つ必要\n\t\tRubySpliter.#REG_RUBY = new RegExp(\n\t\t\t(ce ?`(?<ce>\\\\${ce}\\\\S)|` :'')+\n\t\t\t'|(?<str>[^《\\\\n]+)《(?<ruby>[^》\\\\n]+)》'+\n\t\t\t'|(?:(?<kan>[⺀-⿟々〇〻㐀-鿿豈-﫿]+[ぁ-ヿ]*|[^ |《》\\\\n])'+\n\t\t\t'《(?<kan_ruby>[^》\\\\n]+)》)'+\n\t\t\t'|(?<txt>'+\n\t\t\t'[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]'+\t// 上位 + 下位サロゲート\n\t\t\t'|[^|《》]+?'+\t\t// 不要だが細切れにしないほうが後々効率で有利\n\t\t\t'|.)',\n\t\t\t'gs'\n\t\t);\n\t}\n\n\tputTxt(text: string) {\n\t\tfor (const {groups} of text.matchAll(RubySpliter.#REG_RUBY)) {\n\t\t\tif (! groups) break;\n\t\t\tconst {ruby, kan_ruby, kan='', ce, txt='', str=''} = groups;\n\t\t\tif (ruby) {this.putTxtRb(decodeURIComponent(str), ruby); continue}\n\n\t\t\tif (kan_ruby) {this.putTxtRb(kan, kan_ruby); continue}\n\t\t\tif (ce) {this.#putCh(ce.slice(1), ''); continue}\n\n\t\t\tfor (const v of Array.from(txt)) this.#putCh(v, '');\n\t\t\t\t// txt.split('')や [...txt] はサロゲートペアで問題\n\t\t}\n\t}\n\n\tputTxtRb(text: string, ruby: string) {\t// テスト用にpublic\n\t\t// 自動区切りを行わない(内部的 json文法)\n\t\tif (/^\\w+|{\"/.test(ruby)) {this.#putCh(text, ruby); return}\n\n\t\tconst a: string[] = Array.from(text);\n\t\tconst len = a.length;\n\t\tif (/^\\*.?$/.test(ruby)) {\t// 傍点文法\n\t\t\tconst rb_ses = 'center|'+ (ruby === '*' ?RubySpliter.#sesame :ruby.charAt(1));\n\t\t\tfor (const s of a) this.#putCh(s, rb_ses);\n\t\t\treturn;\n\t\t}\n\n\t\t// 自動区切りを行わない(単漢字など)\n\t\tif (len === 1 || ! ruby.includes(' ')) {\n\t\t\tthis.#putCh(text, decodeURIComponent(ruby));\n\t\t\treturn;\n\t\t}\n\n\t\t// 空白がある場合はユーザが区切りを指定しているものと見なす\n\t\tconst aR = ruby.split(' ');\n\t\tconst lenR = aR.length;\n\t\tconst len_max = lenR > len ?lenR :len;\n\t\tfor (let i=0; i<len_max; ++i) this.#putCh(\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\ti < len ? a[i]! : '',\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\ti < lenR ? decodeURIComponent(aR[i]!) : ''\n\t\t);\n\t}\n\n}\n"],"names":["RubySpliter","#sesame","hArg","#putCh","putCh","#REG_RUBY","ce","text","groups","ruby","kan_ruby","kan","txt","str","v","a","len","rb_ses","s","aR","lenR","len_max","i"],"mappings":"AAcO,MAAMA,EAAY;AAAA,EACxB,OAAOC,KAAW;AAAA,EAClB,OAAO,QAAQC,GAAY;AAAC,IAAIA,EAAK,WAAQF,EAAYC,KAAUC,EAAK;AAAA,EAAM;AAAA,EAC9E,OAAO,YAAY;AAAC,WAAOF,EAAYC;AAAA,EAAO;AAAA,EAE9C,OAAO,UAAU;AAAC,IAAAD,EAAYC,KAAU;AAAA,EAAG;AAAA,EAE3CE,KAAmB,MAAK;AAAA,EAAc;AAAA,EACtC,KAAKC,GAAgB;AAAC,SAAKD,KAASC;AAAA,EAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyBzC,OAAOC;AAAA,EACP,OAAO,UAAUC,GAAY;AAa5B,IAAAN,EAAYK,KAAY,IAAI;AAAA,OAC1BC,IAAI,WAAWA,CAAE,UAAS,MAC3B;AAAA,MAOA;AAAA,IAAA;AAAA,EAEF;AAAA,EAEA,OAAOC,GAAc;AACpB,eAAW,EAAC,QAAAC,OAAWD,EAAK,SAASP,EAAYK,EAAS,GAAG;AAC5D,UAAI,CAAEG,EAAQ;AACd,YAAM,EAAC,MAAAC,GAAM,UAAAC,GAAU,KAAAC,IAAI,IAAI,IAAAL,GAAI,KAAAM,IAAI,IAAI,KAAAC,IAAI,GAAA,IAAML;AACrD,UAAIC,GAAM;AAAC,aAAK,SAAS,mBAAmBI,CAAG,GAAGJ,CAAI;AAAG;AAAA,MAAQ;AAEjE,UAAIC,GAAU;AAAC,aAAK,SAASC,GAAKD,CAAQ;AAAG;AAAA,MAAQ;AACrD,UAAIJ,GAAI;AAAC,aAAKH,GAAOG,EAAG,MAAM,CAAC,GAAG,EAAE;AAAG;AAAA,MAAQ;AAE/C,iBAAWQ,KAAK,MAAM,KAAKF,CAAG,EAAG,MAAKT,GAAOW,GAAG,EAAE;AAAA,IAEnD;AAAA,EACD;AAAA,EAEA,SAASP,GAAcE,GAAc;AAEpC,QAAI,UAAU,KAAKA,CAAI,GAAG;AAAC,WAAKN,GAAOI,GAAME,CAAI;AAAG;AAAA,IAAM;AAE1D,UAAMM,IAAc,MAAM,KAAKR,CAAI,GAC7BS,IAAMD,EAAE;AACd,QAAI,SAAS,KAAKN,CAAI,GAAG;AACxB,YAAMQ,IAAS,aAAYR,MAAS,MAAKT,EAAYC,KAASQ,EAAK,OAAO,CAAC;AAC3E,iBAAWS,KAAKH,EAAG,MAAKZ,GAAOe,GAAGD,CAAM;AACxC;AAAA,IACD;AAGA,QAAID,MAAQ,KAAK,CAAEP,EAAK,SAAS,GAAG,GAAG;AACtC,WAAKN,GAAOI,GAAM,mBAAmBE,CAAI,CAAC;AAC1C;AAAA,IACD;AAGA,UAAMU,IAAKV,EAAK,MAAM,GAAG,GACnBW,IAAOD,EAAG,QACVE,IAAUD,IAAOJ,IAAKI,IAAMJ;AAClC,aAASM,IAAE,GAAGA,IAAED,GAAS,EAAEC,EAAG,MAAKnB;AAAA;AAAA,MAElCmB,IAAIN,IAAMD,EAAEO,CAAC,IAAK;AAAA;AAAA,MAElBA,IAAIF,IAAO,mBAAmBD,EAAGG,CAAC,CAAE,IAAI;AAAA,IAAA;AAAA,EAE1C;AAED;"}
@@ -3,8 +3,7 @@ import { c as O, C as L, a as $ } from "./CallStack.js";
3
3
  import { G as I, A as M, t as T, a as x } from "./Main.js";
4
4
  import { R as j } from "./RubySpliter.js";
5
5
  import { D as k } from "./DebugMng.js";
6
- import { C as y } from "./CmnTween.js";
7
- import { a as _, R as N } from "./Reading.js";
6
+ import { a as _, C as y, R as N } from "./CmnTween.js";
8
7
  import { a as W } from "./SndBuf.js";
9
8
  class p {
10
9
  //MARK: コンストラクタ