@famibee/skynovel 1.65.0 → 2.0.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.
- package/README.md +3 -3
- package/dist/Button.js +131 -163
- package/dist/Button.js.map +1 -1
- package/dist/CallStack.js +19 -22
- package/dist/CallStack.js.map +1 -1
- package/dist/CmnInterface.js +91 -0
- package/dist/CmnInterface.js.map +1 -0
- package/dist/CmnLib.js +94 -0
- package/dist/CmnLib.js.map +1 -0
- package/dist/Config.js +26 -0
- package/dist/Config.js.map +1 -0
- package/dist/ConfigBase.js +152 -0
- package/dist/ConfigBase.js.map +1 -0
- package/dist/DebugMng.js +89 -102
- package/dist/DebugMng.js.map +1 -1
- package/dist/EventListenerCtn.js +21 -0
- package/dist/EventListenerCtn.js.map +1 -0
- package/dist/EventMng.js +1435 -1577
- package/dist/EventMng.js.map +1 -1
- package/dist/Grammar.js +194 -0
- package/dist/Grammar.js.map +1 -0
- package/dist/GrpLayer.js +163 -195
- package/dist/GrpLayer.js.map +1 -1
- package/dist/Layer.js +260 -0
- package/dist/Layer.js.map +1 -0
- package/dist/LayerMng.js +810 -991
- package/dist/LayerMng.js.map +1 -1
- package/dist/Main.js +144 -393
- package/dist/Main.js.map +1 -1
- package/dist/PropParser.js +936 -834
- package/dist/PropParser.js.map +1 -1
- package/dist/Reading.js +917 -786
- package/dist/Reading.js.map +1 -1
- package/dist/RubySpliter.js +59 -92
- package/dist/RubySpliter.js.map +1 -1
- package/dist/ScriptIterator.js +805 -1034
- package/dist/ScriptIterator.js.map +1 -1
- package/dist/SndBuf.js +1097 -1332
- package/dist/SndBuf.js.map +1 -1
- package/dist/SoundMng.js +124 -135
- package/dist/SoundMng.js.map +1 -1
- package/dist/SpritesMng.js +220 -232
- package/dist/SpritesMng.js.map +1 -1
- package/dist/SysBase.js +1729 -0
- package/dist/SysBase.js.map +1 -0
- package/dist/TxtLayer.js +1212 -1397
- package/dist/TxtLayer.js.map +1 -1
- package/dist/Variable.js +398 -466
- package/dist/Variable.js.map +1 -1
- package/dist/chunk.js +18 -0
- package/dist/gamepad.js +723 -511
- package/dist/gamepad.js.map +1 -1
- package/dist/pixi.js +13422 -0
- package/dist/pixi.js.map +1 -0
- package/dist/platform.js +424 -369
- package/dist/platform.js.map +1 -1
- package/dist/sn/AnalyzeTagArg.d.ts +1 -1
- package/dist/sn/AnalyzeTagArg.d.ts.map +1 -1
- package/dist/sn/CmnInterface.d.ts +3 -1
- package/dist/sn/CmnInterface.d.ts.map +1 -1
- package/dist/sn/CmnLib.d.ts.map +1 -1
- package/dist/sn/CmnTween.d.ts +3 -3
- package/dist/sn/CmnTween.d.ts.map +1 -1
- package/dist/sn/EventMng.d.ts.map +1 -1
- package/dist/sn/Grammar.d.ts +1 -1
- package/dist/sn/Grammar.d.ts.map +1 -1
- package/dist/sn/PropParser.d.ts +2 -2
- package/dist/sn/PropParser.d.ts.map +1 -1
- package/dist/sn/Reading.d.ts +6 -0
- package/dist/sn/Reading.d.ts.map +1 -1
- package/dist/sn/ScriptIterator.d.ts.map +1 -1
- package/dist/sn/SndBuf.d.ts +27 -16
- package/dist/sn/SndBuf.d.ts.map +1 -1
- package/dist/sn/SoundMng.d.ts +4 -1
- package/dist/sn/SoundMng.d.ts.map +1 -1
- package/dist/sn/SysBase.d.ts.map +1 -1
- package/dist/sn/TxtStage.d.ts +2 -1
- package/dist/sn/TxtStage.d.ts.map +1 -1
- package/dist/test/ValTest.d.ts +1 -1
- package/dist/test/ValTest.d.ts.map +1 -1
- package/dist/web.js +653 -8
- package/dist/web.js.map +1 -1
- package/dist_app/Button.js +131 -163
- package/dist_app/Button.js.map +1 -1
- package/dist_app/CallStack.js +19 -22
- package/dist_app/CallStack.js.map +1 -1
- package/dist_app/CmnInterface.js +91 -0
- package/dist_app/CmnInterface.js.map +1 -0
- package/dist_app/CmnLib.js +94 -0
- package/dist_app/CmnLib.js.map +1 -0
- package/dist_app/Config.js +26 -0
- package/dist_app/Config.js.map +1 -0
- package/dist_app/ConfigBase.js +152 -0
- package/dist_app/ConfigBase.js.map +1 -0
- package/dist_app/DebugMng.js +92 -0
- package/dist_app/DebugMng.js.map +1 -0
- package/dist_app/EventListenerCtn.js +21 -0
- package/dist_app/EventListenerCtn.js.map +1 -0
- package/dist_app/EventMng.js +1435 -1577
- package/dist_app/EventMng.js.map +1 -1
- package/dist_app/Grammar.js +194 -0
- package/dist_app/Grammar.js.map +1 -0
- package/dist_app/GrpLayer.js +163 -195
- package/dist_app/GrpLayer.js.map +1 -1
- package/dist_app/Layer.js +260 -0
- package/dist_app/Layer.js.map +1 -0
- package/dist_app/LayerMng.js +810 -991
- package/dist_app/LayerMng.js.map +1 -1
- package/dist_app/Main.js +144 -392
- package/dist_app/Main.js.map +1 -1
- package/dist_app/PropParser.js +936 -834
- package/dist_app/PropParser.js.map +1 -1
- package/dist_app/Reading.js +917 -786
- package/dist_app/Reading.js.map +1 -1
- package/dist_app/RubySpliter.js +59 -92
- package/dist_app/RubySpliter.js.map +1 -1
- package/dist_app/ScriptIterator.js +805 -1033
- package/dist_app/ScriptIterator.js.map +1 -1
- package/dist_app/SndBuf.js +1097 -1332
- package/dist_app/SndBuf.js.map +1 -1
- package/dist_app/SoundMng.js +124 -135
- package/dist_app/SoundMng.js.map +1 -1
- package/dist_app/SpritesMng.js +220 -231
- package/dist_app/SpritesMng.js.map +1 -1
- package/dist_app/SysBase.js +1729 -0
- package/dist_app/SysBase.js.map +1 -0
- package/dist_app/TxtLayer.js +1212 -1396
- package/dist_app/TxtLayer.js.map +1 -1
- package/dist_app/Variable.js +398 -466
- package/dist_app/Variable.js.map +1 -1
- package/dist_app/app.js +211 -8
- package/dist_app/app.js.map +1 -1
- package/dist_app/appMain.js +20 -21
- package/dist_app/appMain.js.map +1 -1
- package/dist_app/chunk.js +18 -0
- package/dist_app/gamepad.js +723 -511
- package/dist_app/gamepad.js.map +1 -1
- package/dist_app/pixi.js +11181 -0
- package/dist_app/pixi.js.map +1 -0
- package/dist_app/platform.js +424 -369
- package/dist_app/platform.js.map +1 -1
- package/dist_app/preload.js +2 -2
- package/dist_app/preload.js.map +1 -1
- package/dist_app/sn/AnalyzeTagArg.d.ts +1 -1
- package/dist_app/sn/AnalyzeTagArg.d.ts.map +1 -1
- package/dist_app/sn/CmnInterface.d.ts +3 -1
- package/dist_app/sn/CmnInterface.d.ts.map +1 -1
- package/dist_app/sn/CmnLib.d.ts.map +1 -1
- package/dist_app/sn/CmnTween.d.ts +3 -3
- package/dist_app/sn/CmnTween.d.ts.map +1 -1
- package/dist_app/sn/EventMng.d.ts.map +1 -1
- package/dist_app/sn/Grammar.d.ts +1 -1
- package/dist_app/sn/Grammar.d.ts.map +1 -1
- package/dist_app/sn/PropParser.d.ts +2 -2
- package/dist_app/sn/PropParser.d.ts.map +1 -1
- package/dist_app/sn/Reading.d.ts +6 -0
- package/dist_app/sn/Reading.d.ts.map +1 -1
- package/dist_app/sn/ScriptIterator.d.ts.map +1 -1
- package/dist_app/sn/SndBuf.d.ts +27 -16
- package/dist_app/sn/SndBuf.d.ts.map +1 -1
- package/dist_app/sn/SoundMng.d.ts +4 -1
- package/dist_app/sn/SoundMng.d.ts.map +1 -1
- package/dist_app/sn/SysBase.d.ts.map +1 -1
- package/dist_app/sn/TxtStage.d.ts +2 -1
- package/dist_app/sn/TxtStage.d.ts.map +1 -1
- package/dist_app/test/ValTest.d.ts +1 -1
- package/dist_app/test/ValTest.d.ts.map +1 -1
- package/package.json +23 -13
- package/dist/CmnTween.js +0 -1005
- package/dist/CmnTween.js.map +0 -1
- package/dist/web2.js +0 -21644
- package/dist/web2.js.map +0 -1
- package/dist_app/CmnTween.js +0 -1005
- package/dist_app/CmnTween.js.map +0 -1
- package/dist_app/app2.js +0 -18547
- package/dist_app/app2.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScriptIterator.js","sources":["../src/sn/ScriptIterator.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\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 {argChk_Boolean, getFn, CmnLib, argChk_Num, RPN_COMP_CHIN} from './CmnLib';\nimport type {T_HTag, TArg, Script, TTag} from './Grammar';\nimport type {T_Main, T_Variable, T_Mark, T_PropParser, T_HEvt2Fnc} from './CmnInterface';\nimport {creSAVEDATA} from './CmnInterface';\nimport type {Config} from './Config';\nimport {CallStack, creCSArg, creMP, type ICallStackArg} from './CallStack';\nimport {Grammar, tagToken2Name_Args, tagToken2Name} from './Grammar';\nimport {AnalyzeTagArg} from './AnalyzeTagArg';\nimport {RubySpliter} from './RubySpliter';\nimport type {EventMng} from './EventMng';\nimport type {LayerMng} from './LayerMng';\nimport {DebugMng} from './DebugMng';\nimport type {SoundMng} from './SoundMng';\nimport type {SysBase} from './SysBase';\nimport {SEARCH_PATH_ARG_EXT} from './ConfigBase';\nimport {CmnTween} from './CmnTween';\nimport {Reading, ReadingState} from './Reading';\nimport {BUF_BGM} from './SndBuf';\n\nimport {Loader} from 'pixi.js';\n\ntype HScript = {\n\t[fn: string]: Script;\n}\n\ntype ISeek = {\n\tidx\t\t: number;\n\tln\t\t: number;\n}\n\n\nconst enum BreakState {Running, Wait, Break, Breaking, Step, Stepping, StepOuting, StepOut}\n\nconst enum SndProcOnLoad {\n\tMINIMAL_STOP,\n\tNO_TOUCH,\n\tALL_STOP_AND_PLAY,\n}\n\n\nexport class ScriptIterator {\n\t#script\t\t: Script\t= {aToken: [''], len: 1, aLNum: [1]};\n\n\t#scriptFn\t= '';\n\tget scriptFn() {return this.#scriptFn}\n\t#idxToken\t= 0;\n\tget idxToken() {return this.#idxToken}\n\tsubIdxToken() {--this.#idxToken}\n\t#lineNum\t= 0;\n\tget lineNum() {return this.#lineNum}\n\treadonly addLineNum\t= (len: number)=> {this.#lineNum += len};\n\tjumpJustBefore() {this.#jumpWork(this.#scriptFn, '', --this.#idxToken)}\n\t\t// 直前にジャンプ\n\n\n\t#aCallStk\t: CallStack[]\t= [];\t// FILOバッファ(push/pop)\n\n\treadonly\t#grm;\n\treadonly\t#alzTagArg\t= new AnalyzeTagArg;\n\n\n\t//MARK: コンストラクタ\n\tconstructor(private readonly cfg: Config, private readonly hTag: T_HTag, private readonly main: T_Main, private readonly val: T_Variable, private readonly prpPrs: T_PropParser, private readonly sndMng: SoundMng, private readonly sys: SysBase) {\n\t\t// 変数操作\n\t\thTag.let_ml\t\t= o=> this.#let_ml(o);\t// インラインテキスト代入\n\t\thTag.endlet_ml\t= ()=> false;\t\t\t// インラインテキスト代入終端\n\t\t\t// [if]ブロック内で【未定義のタグ[endlet_ml]です】エラーが発生する対策\n\n\t\t// デバッグ・その他\n\t\thTag.dump_stack\t= ()=> this.#dump_stack();\t// スタックのダンプ\n\t\thTag.dump_script= o=> this.#dump_script(o);\t// スクリプトのダンプ\n\n\t\t// 条件分岐\n\t\thTag.else\t\t=\t\t\t\t\t\t\t// その他ifブロック開始\n\t\thTag.elsif\t\t=\t\t\t\t\t\t\t// 別条件のifブロック開始\n\t\thTag.endif\t\t= ()=> this.#endif();\t\t// ifブロックの終端\n\t\thTag.if\t\t\t= o=> this.#if(o);\t\t\t// ifブロックの開始\n\n\t\t// ラベル・ジャンプ\n\t\t//hTag.button\t// LayerMng.ts内で定義\t\t// ボタンを表示\n\t\thTag.call\t\t= o=> this.#call(o);\t\t// サブルーチンコール\n\t\thTag.jump\t\t= o=> this.#jump(o);\t\t// シナリオジャンプ\n\t\t//hTag.page\t\t= // ReadState が担当に\t\t// ページ移動\n\t\thTag.pop_stack\t= o=> this.#pop_stack(o);\t// コールスタック破棄\n\t\thTag.return\t\t= o=> this.#return(o);\t\t// サブルーチンから戻る\n\n\t\t// マクロ\n\t\thTag.bracket2macro\t= o=> this.#bracket2macro(o);// 括弧マクロの定義\n\t\thTag.char2macro\t\t= o=> this.#char2macro(o);\t// 一文字マクロの定義\n\t\thTag.endmacro\t\t= o=> this.#return(o);\t\t// マクロ定義の終了\n\t\thTag.macro\t\t\t= o=> this.#macro(o);\t\t// マクロ定義の開始\n\n\t\t// しおり\n\t\t//hTag.copybookmark\t\t// Variable.ts内で定義\t// しおりの複写\n\t\t//hTag.erasebookmark\t// Variable.ts内で定義\t// しおりの消去\n\t\thTag.load\t\t\t= o=> this.#load(o);\t\t\t// しおりの読込\n\t\thTag.reload_script\t= o=> this.#reload_script(o);\t// スクリプト再読込\n\t\thTag.record_place\t= ()=> this.#record_place();\t// セーブポイント指定\n\t\thTag.save\t\t\t= o=> this.#save(o);\t\t\t// しおりの保存\n\n\n\t\tif (cfg.oCfg.debug.token) this.#dbgToken = token=> {if (token.trim() !== '') console.log(`🌱 トークン ${this.#scriptFn}:${String(this.#lineNum)} (i:${String(this.#idxToken)} cs:${String(this.#aCallStk.length)}) %c【${token}】`, 'background-color:#350;')};\n\t\tif (cfg.oCfg.debug.tag) this.#procDebugtag = tag_name=> console.log(`🌲 タグ解析 ${this.#scriptFn}:${String(this.#lineNum)} (i:${String(this.#idxToken)} cs:${String(this.#aCallStk.length)}) %c[${tag_name} %o]`, 'background-color:#30B;', this.#alzTagArg.hPrm);\n\n\t\tval.defTmp('const.sn.aIfStk.length', ()=> this.#aIfStk.length);\n\t\tval.defTmp('const.sn.vctCallStk.length', ()=> this.#aCallStk.length);\n\n\t\tthis.#grm = new Grammar(cfg);\n\n\t\tconst ce = cfg.oCfg.init.escape;\n\t\tthis.#grm.setEscape(ce);\n\t\tRubySpliter.setEscape(ce);\n\n\t\tif (CmnLib.isDbg) {\n\t\t\t// sys.addHook((type, o)=> (<[nm: string]: ((o: any)=> void)>this.#hHook)[type]?.(o));\n\t\t\tconst _h = this.#hHook;\n\t\t\t// type t = keyof typeof this.#hHook;\n\t\t\t// sys.addHook((type: keyof typeof _h, o)=> this.#hHook[ type ]?.(o));\t// x\n\t\t\tsys.addHook((type, o)=> this.#hHook[ <keyof typeof _h>type ]?.(o));\n\t\t\t// sys.addHook((type, o)=> this.#hHook[type]?.(o));\n\t\t\tthis.isBreak = token=> this.#isBreak_base(token);\n\n\t\t\tconst fnc = ()=> this.analyzeInit();\n\t\t\tthis.analyzeInit = ()=> {\n\t\t\t\tthis.analyzeInit = ()=> { /* empty */ };\n\t\t\t\tthis.sys.send2Dbg('hi', {});\n\t\t\t};\n\t\t\tthis.#hHook.auth = o=> {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\t\tconst hLineBP = o.hBreakpoint.hFn2hLineBP;\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\t\t\t\tfor (const [fn, v] of Object.entries(hLineBP)) this.#regBreakPoint(fn, <any>v);\n\n\t\t\t\tScriptIterator.#hFuncBP = {};\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\t\tfor (const v of o.hBreakpoint.aFunc) {\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\t\t\tScriptIterator.#hFuncBP[v.name] = 1;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\t\tif (o.stopOnEntry) {\n\t\t\t\t\tlet tkn;\n\t\t\t\t\t// eslint-disable-next-line no-cond-assign\n\t\t\t\t\twhile (tkn = this.nextToken()) {\n\t\t\t\t\t\t// if (! tkn) break;\t// 初期化前に終了した場合向け\n\n\t\t\t\t\t\tconst uc = tkn.charCodeAt(0);\t// TokenTopUnicode\n\t\t\t\t\t\tif (uc === 91) break;\t// [ タグ開始\n\t\t\t\t\t\tif (uc === 38) break;\t// & 変数操作・変数表示\n\t\t\t\t\t\tif (uc === 42 && tkn.length === 1) break;\t// 単文字の *\n\t\t\t\t\t\tif (uc === 10) this.#lineNum += tkn.length;\t// \\n 改行\n\t\t\t\t\t}\n\t\t\t\t\tthis.sys.callHook('stopOnEntry', {});\n\t\t\t\t\tthis.analyzeInit = fnc;\n\t\t\t\t\tthis.analyzeInit();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.noticeWait = ()=> {\n\t\t\t\t\t\tthis.noticeWait = ()=> { /* empty */ };\n\t\t\t\t\t\tthis.sys.callHook('stopOnEntry', {});\t// sn全体へ通知\n\n//\t\t\t\t\t\tthis.sys.callHook('continue', {});\t// sn全体へ通知\n//\t\t\t\t\t\tthis.breakState = BreakState.breaking;\n\t\t\t\t\t};\n\n\t\t\t\t\tthis.analyzeInit = fnc;\n\t\t\t\t\tthis.analyzeInit();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse this.recodeDesign = ()=> { /* empty */ };\n\t}\n\tnoticeWait = ()=> { /* empty */ };\n\t#regBreakPoint(fn: string, o: {[ln: number]: any}) {\n\t\tScriptIterator.#hFn2hLineBP[this.#cnvSnPath4Dbg(fn)] = o;\n\t}\n\n\tdestroy() {this.isBreak = this.#record_place = ()=> false}\n\n\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\treadonly #hHook\t: {[nm: string]: (o: any)=> void;} = {\n\t\tauth: ()=> { /* empty */ }, // constructorでセット\n\t\t//launch:\t// ここでは冒頭停止に間に合わないのでanalyzeInit()で\n\t\tdisconnect: ()=> {\n\t\t\tScriptIterator.#hFn2hLineBP = {};\n\t\t\tScriptIterator.#hFuncBP = {};\n\t\t\tthis.isBreak = ()=> false;\n\n\t\t\tthis.#hHook.continue!({});\n\t\t\tthis.#breakState = BreakState.Running;\n\t\t},\n\t\trestart: ()=> {this.isBreak = ()=> false},\n\n\t\t// ブレークポイント登録\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n\t\tadd_break: o=> this.#regBreakPoint(o.fn, o.o),\n\t\tdata_break: o=> {\n\t\t\tif (this.#breakState !== BreakState.Running) return;\n\n\t\t\tthis.#breakState = BreakState.Wait;\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\tthis.main.setLoop(false, `変数 ${String(o.dataId)}【${String(o.old_v)}】→【${String(o.new_v)}】データブレーク`);\n\t\t\tthis.sys.callHook('stopOnDataBreakpoint', {});\t// sn全体へ通知\n\t\t\tthis.sys.send2Dbg('stopOnDataBreakpoint', {});\n\t\t},\n\t\tset_func_break: o=> {\n\t\t\tScriptIterator.#hFuncBP = {};\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\tfor (const v of o.a) ScriptIterator.#hFuncBP[v.name] = 1;\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n\t\t\tthis.sys.send2Dbg(o.ri, {});\n\t\t},\n\n\t\t// 情報問い合わせ系\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n\t\tstack: o=> this.sys.send2Dbg(o.ri, {a: this.#aStack()}),\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n\t\teval: o=> {this.sys.send2Dbg(o.ri, {v: this.prpPrs.parse(o.txt)})},\n\n\t\t// デバッガからの操作系\n\t\tcontinue: ()=> {\n\t\t\tif (this.#isIdxOverLast()) return;\n\n\t\t\tthis.#idxToken -= this.#idxDx4Dbg;\n\t\t\tthis.#breakState = BreakState.Breaking;\n\t\t\tthis.main.setLoop(true);\n\t\t\tthis.main.resume();\t// jumpループ後などで停止している場合があるので\n\t\t},\n\t\tstepover: o=> this.#go_stepover(o),\n\t\tstepin: ()=> {\n\t\t\tif (this.#isIdxOverLast()) return;\n\n\t\t\tconst tkn = this.#script.aToken[this.#idxToken -this.#idxDx4Dbg];\n\t\t\tthis.sys.callHook(`stopOnStep${this.#REGSTEPIN.test(tkn ?? '') ?'In' :''}`, {});\t// sn全体へ通知\n\n\t\t\tthis.#idxToken -= this.#idxDx4Dbg;\n\t\t\tthis.#breakState = this.#breakState === BreakState.Wait\n\t\t\t\t? BreakState.Step\n\t\t\t\t: BreakState.Stepping;\n\t\t\tthis.main.setLoop(true);\n\t\t\tthis.main.resume();\t// jumpループ後などで停止している場合があるので\n\t\t},\n\t\tstepout: o=> {\n\t\t\tif (this.#isIdxOverLast()) return;\n\n\t\t\tif (this.#aCallStk.length > 0) this.#go_stepout(true);\n\t\t\telse this.#go_stepover(o);\n\t\t},\n\t\tpause: ()=> {\n\t\t\tthis.#breakState = BreakState.Step;\n\t\t\tthis.main.setLoop(false, '一時停止');\n\t\t\tthis.sys.send2Dbg('stopOnStep', {});\n\t\t},\n\t\tstopOnEntry: ()=> {\n\t\t\tthis.#breakState = BreakState.Step;\n\t\t\tthis.main.setLoop(false, '一時停止');\n\t\t\tthis.sys.send2Dbg('stopOnEntry', {});\n\t\t},\n\t} as const;\n\treadonly #cnvSnPath = (fn: string)=> this.cfg.searchPath(fn, SEARCH_PATH_ARG_EXT.SCRIPT);\n\treadonly #cnvSnPath4Dbg = (fn: string)=>\n\t\tthis.sys.pathBaseCnvSnPath4Dbg + this.#cnvSnPath(fn);\n\t#go_stepover(o: any) {\n\t\tif (this.#isIdxOverLast()) return;\n\n\t\tconst tkn = this.#script.aToken[this.#idxToken -this.#idxDx4Dbg];\n\t\tif (this.#REGSTEPIN.test(tkn ?? '')) this.#go_stepout(false);\n\t\telse {\n\t\t\tthis.sys.callHook('stopOnStep', {});\t// sn全体へ通知\n\t\t\tthis.#hHook.stepin!(o);\n\t\t}\n\t}\n\t#go_stepout(out: boolean) {\n\t\tthis.sys.callHook(`stopOnStep${out ?'Out' :''}`, {});\t// sn全体へ通知\n\t\tthis.#csDepth_macro_esc = this.#aCallStk.length -(out ?1 :0);\n\t\tthis.#idxToken -= this.#idxDx4Dbg;\n\t\tthis.#breakState = out ?BreakState.StepOut :BreakState.StepOuting;\n\t\tthis.main.setLoop(true);\n\t\tthis.main.resume();\t// jumpループ後などで停止している場合があるので\n\t}\n\t#csDepth_macro_esc\t= 0;\n\tget #idxDx4Dbg() {\n\t\treturn this.#breakState === BreakState.Break\n\t\t\t|| this.#breakState === BreakState.Step ?1 :0\n\t}\n\t#isIdxOverLast(): boolean {\n\t\tif (this.#idxToken < this.#script.len) return false;\n\t\tthis.sys.callHook('stopOnEntry', {});\t// sn全体へ通知\n\t\tthis.main.setLoop(false, 'スクリプト終端です isIdxOverLast');\n\t\treturn true;\n\t}\n\n\t// reload 再生成 Main に受け渡すため static\n\tstatic\t#hFn2hLineBP: {[fn: string]: {[ln: number]: any}} = {};\n\tstatic\t#hFuncBP: {[tag_name: string]: 1} = {};\n\t#breakState\t= BreakState.Running;\n\t\t// https://raw.githubusercontent.com/famibee/SKYNovel-vscode-extension/master/src/doc/BreakStateSMD.pu\n\tisBreak = (_token: string)=> false;\n\t#isBreak_base(token: string): boolean {\n\t\tswitch (this.#breakState) {\n\t\t\tcase BreakState.StepOuting:\tthis.#subHitCondition();\n\t\t\t\tthis.#breakState = BreakState.StepOut;\tbreak;\n\t\t\tcase BreakState.StepOut:\n\t\t\t\tif (this.#aCallStk.length !== this.#csDepth_macro_esc) break;\n\n\t\t\t\tthis.#breakState = BreakState.Step;\n\t\t\t\tthis.main.setLoop(false, 'ステップ実行');\n\t\t\t\tthis.sys.send2Dbg('stopOnStep', {});\n\t\t\t\treturn true;\t// タグを実行せず、直前停止\n\n\t\t\tcase BreakState.Stepping:\tthis.#subHitCondition();\n\t\t\t\tthis.#breakState = BreakState.Step;\tbreak;\n\t\t\tcase BreakState.Step:\t\tthis.#subHitCondition();\n\t\t\t\tthis.main.setLoop(false, 'ステップ実行');\n\t\t\t\tthis.sys.send2Dbg('stopOnStep', {});\n\t\t\t\treturn true;\t// タグを実行せず、直前停止\n\n\t\t\tcase BreakState.Breaking:\tthis.#subHitCondition();\n\t\t\t\tthis.#breakState = BreakState.Running;\tbreak;\n\n\t\t\tdefault:\n\t\t\t{\t// 関数ブレークポイント\n\t\t\t\tif (tagToken2Name(token) in ScriptIterator.#hFuncBP) {\n\t\t\t\t\tthis.#breakState = BreakState.Break;\n\t\t\t\t\tthis.main.setLoop(false, `関数 ${token} ブレーク`);\n\t\t\t\t\tthis.sys.callHook('stopOnBreakpoint', {});\t// sn全体へ通知\n\t\t\t\t\tthis.sys.send2Dbg('stopOnBreakpoint', {});\n\t\t\t\t\treturn true;\t// タグを実行せず、直前停止\n\t\t\t\t}\n\t\t\t}\n\t\t\t{\t// ブレークポイント\n\t\t\t\tconst bp = ScriptIterator.#hFn2hLineBP[this.#cnvSnPath4Dbg(this.#scriptFn)];\n\t\t\t\tif (! bp) break;\n\n\t\t\t\tconst o = bp[this.#lineNum];\n\t\t\t\tif (! o) break;\n\n//console.log(`fn:ScriptIterator.ts line:145 👺 【bs:${this.#breakState} idx:${this.#idxToken} ln:${this.#lineNum} tkn:${this.#script.aToken[this.#idxToken -1]}:】 o:%o`, o);\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n\t\t\t\tif (o.condition) {if (! this.prpPrs.parse(o.condition)) break}\n\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\t\telse if ('hitCondition' in o && --o.hitCondition > 0) break;\n\t\t\t\tconst isBreak = this.#breakState === BreakState.Running;\n\t\t\t\tthis.#breakState = BreakState.Break;\n\t\t\t\tthis.main.setLoop(false, isBreak ?\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\t\t\t(o.condition ? '条件' :'ヒットカウント') +'ブレーク'\n\t\t\t\t\t :'ステップ実行');\n\t\t\t\tconst type = isBreak ?'stopOnBreakpoint' :'stopOnStep';\n\t\t\t\tthis.sys.callHook(type, {});\t// sn全体へ通知\n\t\t\t\tthis.sys.send2Dbg(type, {});\n\t\t\t}\n\t\t\t\treturn true;\t// タグを実行せず、直前停止\n\t\t}\n\n\t\treturn false;\t// no break、タグを実行\n\t}\n\t#subHitCondition() {\t// step実行中でbreakしないがヒットカウントだけ減算\n\t\tconst o = ScriptIterator.#hFn2hLineBP[getFn(this.#scriptFn)]?.[this.#lineNum];\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\tif (o?.hitCondition) --o.hitCondition;\n\t}\n\n\t#aStack(): {fn: string, ln: number, col: number, nm: string, ma: string}[] {\n\t\tconst idx_n = this.#breakState === BreakState.Breaking ?1 :0;\n\t\tconst tkn0 = this.#script.aToken[this.#idxToken -1 +idx_n]!;\n\n\t\tconst fn0 = this.#cnvSnPath4Dbg(this.#scriptFn);\n\t\tconst tag_name0 = tagToken2Name(tkn0);\n\t\tconst nm = tag_name0 ?`[${tag_name0}]` :tkn0;\n//console.log(`fn:ScriptIterator.ts aStack breakState:${this.#breakState} idx:${this.#idxToken -1} idx_n:${idx_n} tkn0:${tkn0}: fn0:${fn0} nm:${nm} tkn02:${this.#script.aToken[this.#idxToken -1]}: +tkn02:${this.#script.aToken[this.#idxToken]}:`);\n//console.log(`fn:ScriptIterator.ts a:%o anum:%o`, this.script.aToken, this.script.aLNum);\n\t\tconst ma = String(this.val.getVal('mp:const.sn.macro') ?? '{}');\n\t\tif (this.#idxToken === 0) return [{fn: fn0, ln: 1, col: 1, nm, ma}];\n\n\t\tconst lc0 = this.#cnvIdx2lineCol(this.#script, this.#idxToken);// -1不要\n//console.log(`fn:ScriptIterator.ts ln:${lc0.ln} col:${lc0.col_s} col2:${this.#script.aLNum[this.#idxToken -1]}`);\n\t\tconst a = [{fn: fn0, ln: lc0.ln, col: lc0.col_s +1, nm, ma}];\n\t\tconst len = this.#aCallStk.length;\n\t\tif (len === 0) return a;\n\n\t\tfor (let i=len -1; i>=0; --i) {\n\t\t\tconst cs = this.#aCallStk[i]!;\n\t\t\tconst st = this.#hScript[cs.fn];\n\t\t\tif (! st) continue;\n\t\t\tconst tkn = st.aToken[cs.idx -1];\n\t\t\tif (! tkn) continue;\n\t\t\tconst lc = this.#cnvIdx2lineCol(st, cs.idx);\t// -1不要\n\n\t\t\tconst tag_name = tagToken2Name(tkn);\n\t\t\ta.push({\n\t\t\t\tfn\t: this.#cnvSnPath4Dbg(cs.fn),\n\t\t\t\tln\t: lc.ln,\n\t\t\t\tcol\t: lc.col_s +1,\n\t\t\t\tnm\t: tag_name ?`[${tag_name}]` :tkn,\n\t\t\t\tma\t: cs.csArg[':hMp']['const.sn.macro'],\n\t\t\t});\n\t\t}\n\n\t\treturn a;\n\t}\n\n\t// result = true : waitする resume()で再開\n\t#procDebugtag\t= (_tag_name: string)=> { /* empty */ };\n\t//MARK: タグ解析\n\tasync\tタグ解析(tag_name: string, args: string): Promise<boolean> {\n\t\tconst tag_fnc = this.hTag[<keyof T_HTag>tag_name];\n\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\tif (! tag_fnc) throw `未定義のタグ【${tag_name}】です`;\n\n\t\tthis.#alzTagArg.parse(args);\n\t\tthis.#procDebugtag(tag_name);\n\n\t\tconst hPrm = this.#alzTagArg.hPrm;\n\t\tif (hPrm.cond) {\n\t\t\tconst cond = hPrm.cond.val;\n\t\t\tif (! cond || cond.startsWith('&')) throw '属性condは「&」が不要です';\n\t\t\tconst p = this.prpPrs.parse(cond);\n\t\t\tconst ps = String(p);\n\t\t\tif (ps === 'null' || ps === 'undefined') return false;\n\t\t\tif (! p) return false;\n\t\t}\n\n\t\tlet hArg: TArg = {};\n\t\tconst csa: ICallStackArg = this.#aCallStk.at(-1)?.csArg ?? creCSArg();\n\n\t\tconst len = this.#aCallStk.length;\n\t\tif (this.#alzTagArg.isKomeParam) {\n\t\t\tif (len === 0) throw '属性「*」はマクロのみ有効です';\n\t\t\thArg = {...csa};\n\t\t}\n\t\thArg[':タグ名'] = tag_name;\n\t// #region タグ位置のコールスタック情報を埋め込むコード(デバッグ用)\n\t/*\t{\n\t\t\tconst lc0 = this.#cnvIdx2lineCol(this.#script, this.#idxToken);\n\t\t\tlet now = `存在位置 fn:${this.#scriptFn} line:${lc0.ln} col:${lc0.col_s +1}`;\n\t\t\thArg[':path'] = now;\n\t\t\tconst len = this.#aCallStk.length;\n\t\t\tif (len > 0) {\n\t\t\t\tfor (let i=len -1; i>=0; --i) {\n\t\t\t\t\tconst cs = this.#aCallStk[i];\n\t\t\t\t\tconst hMp = cs.csArg[':hMp'];\n\t\t\t\t\tconst from_macro_nm = hMp ?hMp[':タグ名'] :undefined;\n\t\t\t\t\tconst call_nm = cs.csArg[':タグ名'] ?? '';\n\t\t\t\t\tconst lc = this.#cnvIdx2lineCol(this.#hScript[cs.fn], cs.idx);\n\t\t\t\t\tnow += ` <- (${len -i}) fn:${cs.fn} line:${lc.ln\n\t\t\t\t\t\t} col:${lc.col_s +1\n\t\t\t\t\t\t}`+ (from_macro_nm ?'(['+ from_macro_nm +']マクロ内)' :' ')+\n\t\t\t\t\t\t`で [${call_nm} ...]をコール`;\n\t\t\t\t}\n\t\t\t}\n\t\t}*/\n\t// #endregion\n\t// #region タグ位置情報を埋め込むコード(デバッグ用)\n//\t\thArg[':path'] = this.#scriptFn;\n//\t\thArg[':ln'] = this.#lineNum;\n\t// #endregion\n\t\t// valやdefの値について。null はありえない。'null'や'undefined' はありえる。\n\t\t// 省略時以外で undefined はない。a=undefined と書いても 'undefined' になる\n\t\tfor (const [arg_nm, {val, def}] of Object.entries(hPrm)) {\n\t\t\tlet v = val;\n\t\t\tif (val.startsWith('%')) {\n\t\t\t\tif (len === 0) throw '属性「%」はマクロ定義内でのみ使用できます(そのマクロの引数を示す簡略文法であるため)';\n\n\t\t\t\tconst mac = (<{[nm: string]: any}>csa)[v.slice(1)];\n\t\t\t\tif (mac) {(<{[nm: string]: any}>hArg)[arg_nm] = mac; continue}\n\n\t\t\t\tif (def === undefined || def === 'null') continue;\n\t\t\t\t\t// defの'null'指定。%変数が無い場合、タグやマクロに属性を渡さない\n\t\t\t\tv = def;\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\t\tv = this.prpPrs.getValAmpersand(v ?? '');\n\t\t\tif (v !== 'undefined') {(<{[nm: string]: any}>hArg)[arg_nm] = v; continue}\n\n\t\t\tif (def === undefined) continue;\n\t\t\tv = this.prpPrs.getValAmpersand(def);\n\t\t\tif (v !== 'undefined') (<{[nm: string]: any}>hArg)[arg_nm] = v;\n\t\t\t\t// 存在しない値の場合、属性を渡さない\n\t\t}\n\n\t\t// (一部タグの処理直前に)文字出現処理を終わらせる\n\t\tif (Reading.needGoTxt && this.#setTag2ChIn.has(tag_name)) {\n\t\t\tconst {promise, resolve} = Promise.withResolvers();\n\t\t\tReading.beginProc(RPN_COMP_CHIN, ()=> resolve(0), false, ()=> resolve(0));\n\t\t\tReading.goTxt();\n\t\t\tthis.val.saveKidoku();\n\t\t\tawait promise;\n\t\t}\n\t\t// (一部タグの処理直前に)画面トランジションを止める\n\t\tif (this.#setTag2FinishTrans.has(tag_name)) {\n\t\t\tthis.#evtMng.hideHint();\n\t\t\tCmnTween.stopEndTrans();\n\t\t}\n\t\t// キー押しっぱなしスキップで処理せずスルーする\n\t\tconst fncBypass = this.#hTag2SkipBypass[tag_name];\n\t\tif (fncBypass\n\t\t\t&& argChk_Boolean(hArg, 'canskip', this.#hTag2CanSkip[tag_name] ?? true)\n\t\t\t&& this.#evtMng.isSkipping) return fncBypass(hArg);\n\n\t\treturn tag_fnc(hArg);\n\t}\n\t\t// 文字出現演出を待つタグ\n\t\t//\tここで列挙せずタグ処理で文字表示を始めたい場合、goTxt()すること\n\t\treadonly\t#setTag2ChIn = new Set([\n\t\t// 変数操作\n\t\t\t// 'clearsysvar',\t// システム変数の全消去\n\t\t\t// 'clearvar',\t\t// ゲーム変数の全消去\n\t\t\t// 'let_abs',\t\t// 絶対値\n\t\t\t// 'let_char_at',\t// 文字列から一字取りだし\n\t\t\t// 'let_index_of',\t// 文字列で検索\n\t\t\t// 'let_length',\t// 文字列の長さ\n\t\t\t// 'let_ml',\t\t// インラインテキスト代入\n\n\t\t\t// 'let_replace',\t// 正規表現で置換\n\t\t\t// 'let_round',\t\t// 四捨五入\n\t\t\t// 'let_search',\t// 正規表現で検索\n\t\t\t// 'let_substr',\t// 文字列から抜きだし\n\t\t\t// 'let',\t\t\t// 変数代入・演算\n\n\t\t// レイヤ共通\n\t\t\t// 'add_lay',\t\t// レイヤを追加する\n\t\t\t// 'clear_lay',\t// レイヤ設定の消去\n\t\t\t// 'finish_trans',\t// トランス強制終了\n\t\t\t// 'lay',\t// レイヤ設定\n\t\t\t'trans',\t// ページ裏表を交換\n\t\t\t'wt',\t// トランス終了待ち\n\t\t\t// 'add_filter',\t// フィルター追加\n\t\t\t// 'clear_filter',\t// フィルター全削除\n\t\t\t// 'enable_filter',// フィルター個別切替\n\n\t\t// トゥイーンアニメ\n\t\t\t// 'pause_tsy',\t// 一時停止\n\t\t\t// 'resume_tsy',\t// 一時停止再開\n\t\t\t// 'stop_tsy',\t// トゥイーン中断\n\t\t\t// 'tsy',\t\t// トゥイーン開始\n\t\t\t'wait_tsy',\t// トゥイーン終了待ち\n\n\t\t// 文字・文字レイヤ\n\t\t\t// 'autowc',\t// 文字ごとのウェイト\n\t\t\t// 'ch',\t\t// 文字を追加する\n\t\t\t// 'ch_in_style',\t// 文字出現演出定義\n\t\t\t// 'ch_out_style',\t// 文字消去演出定義\n\t\t\t// 'clear_text',\t// 文字消去\n\t\t\t// 'current',\t// デフォルト文字レイヤ設定\n\t\t\t// 'endlet_ml',\t// インラインテキスト代入の終端\n\t\t\t// 'endlink',\t// ハイパーリンクの終了\n\t\t\t// 'er',\t\t// ページ両面の文字消去\n\t\t\t// 'graph',\t\t// インライン画像表示\n\t\t\t// 'link',\t\t// ハイパーリンク\n\t\t\t// 'r',\t\t\t// 改行\n\t\t\t// 'rec_ch',\t// 履歴書き込み\n\t\t\t// 'rec_r',\t\t// 履歴改行\n\t\t\t// 'reset_rec',\t// 履歴リセット\n\t\t\t// 'ruby2',\t\t// 文字列と複数ルビの追加\n\t\t\t// 'set_focus',\t// フォーカス移動\n\t\t\t// 'span',\t\t// インラインスタイル設定\n\t\t\t// 'tcy',\t\t// 縦中横を表示する\n\n\t\t// 画像・画像レイヤ\n\t\t\t// 'add_face',\t// 差分名称の定義\n\t\t\t'wv',\t\t// 動画再生終了待ち\n\n\t\t// HTMLフレーム\n\t\t\t// 'add_frame',\t// フレーム追加\n\t\t\t// 'frame',\t// フレームに設定\n\t\t\t// 'let_frame',\t// フレーム変数を取得\n\t\t\t// 'set_frame',\t// フレーム変数に設定\n\t\t\t// 'tsy_frame',\t// フレームをトゥイーン開始\n\n\t\t// イベント\n\t\t\t// 'clear_event',\t// イベントを全消去\n\t\t\t// 'enable_event',\t// イベント有無の切替\n\t\t\t// 'event',\t// イベントを予約\n\t\t\t'l',\t// 行末クリック待ち\n\t\t\t'p',\t// 改ページクリック待ち\n\t\t\t's',\t// 停止する\n\t\t\t// [set_cancel_skip] スキップ中断予約\n\t\t\t'wait',\t\t// ウェイトを入れる\n\t\t\t'waitclick',\t// クリックを待つ\n\n\t\t// BGM・効果音\n\t\t\t// 'fadebgm',\t// BGMのフェード\n\t\t\t// 'fadeoutbgm',// BGMのフェードアウト\n\t\t\t// 'fadeoutse',\t// 効果音のフェードアウト\n\t\t\t// 'fadese',\t// 効果音のフェード\n\t\t\t// 'playbgm',\t// BGM の演奏\n\t\t\t// 'playse',\t// 効果音の再生\n\t\t\t// 'stop_allse',// 全効果音再生の停止\n\t\t\t// 'stopbgm',\t// BGM 演奏の停止\n\t\t\t// 'stopfadese',// 音声フェードの停止\n\t\t\t// 'stopse',\t// 効果音再生の停止\n\t\t\t// 'volume',\t// BGMや効果音の音量を指定\n\t\t\t'wb',\t// BGM フェードの終了待ち\n\t\t\t'wf',\t// 効果音フェードの終了待ち\n\t\t\t'wl',\t// BGM 再生の終了待ち\n\t\t\t'ws',\t// 効果音再生の終了待ち\n\t\t\t// 'xchgbuf',\t// サウンドバッファの交換\n\n\t\t// 条件分岐\n\t\t\t// 'else',\t// その他ifブロック開始\n\t\t\t// 'elsif',\t// 別条件のifブロック開始\n\t\t\t// 'endif',\t// ifブロックの終端\n\t\t\t// 'if',\t// ifブロックの開始\n\n\t\t// ラベル・ジャンプ\n\t\t\t// 'button',\t// ボタンを表示\n\t\t\t// 'call',\t\t// サブルーチンコール\n\t\t\t// 'jump',\t\t// シナリオジャンプ\n\t\t\t// 'page',\t\t// ページ移動\n\t\t\t// 'pop_stack',\t// コールスタック破棄\n\t\t\t// 'return',\t// サブルーチンから戻る\n\n\t\t// マクロ\n\t\t\t// 'bracket2macro',\t// 括弧マクロの定義\n\t\t\t// 'char2macro',\t// 一文字マクロの定義\n\t\t\t// 'endmacro',\t// マクロ定義の終了\n\t\t\t// 'macro',\t\t// マクロ定義の開始\n\n\t\t// しおり\n\t\t\t// 'copybookmark',\t// しおりの複写\n\t\t\t// 'erasebookmark',\t// しおりの消去\n\t\t\t// 'load',\t\t\t// しおりの読込\n\t\t\t// 'record_place',\t// セーブポイント指定\n\t\t\t// 'reload_script',\t// スクリプト再読込\n\t\t\t// 'save',\t\t\t// しおりの保存\n\n\t\t// 画面揺らし\n\t\t\t'quake',\t\t// 画面を揺らす\n\t\t\t// 'stop_quake',// 画面揺らし中断\n\t\t\t'wq',\t\t// 画面揺らし終了待ち\n\n\t\t// システム\n\t\t\t// 'close',\t\t// アプリの終了\n\t\t\t// 'export',\t// プレイデータをエクスポート\n\t\t\t// 'import',\t// プレイデータをインポート\n\t\t\t// 'loadplugin',\t// プラグインの読み込み\n\t\t\t// 'navigate_to',\t// URLを開く\n\t\t\t// 'snapshot',\t\t// スナップショット\n\t\t\t// 'title',\t\t// タイトル指定\n\t\t\t// 'toggle_full_screen',\t// 全画面状態切替\n\t\t\t// 'update_check',\t// 更新チェック機能\n\t\t\t// 'window',\t// アプリウインドウ設定\n\n\t\t// デバッグ・その他\n\t\t\t// 'dump_lay',\t\t// レイヤのダンプ\n\t\t\t// 'dump_script',\t// 外部へスクリプトを表示\n\t\t\t// 'dump_stack',\t// スタックのダンプ\n\t\t\t// 'dump_val',\t\t// 変数のダンプ\n\t\t\t// 'log',\t\t// ログ出力\n\t\t\t// 'trace',\t\t// デバッグ表示へ出力\n\t\t]);\n\t\treadonly\t#setTag2FinishTrans = new Set([\n\t\t\t'finish_trans',\t// トランス強制終了\n\t\t\t'trans',\t\t// ページ裏表を交換\n\t\t\t'quake',\t\t// 画面を揺らす\n\t\t\t'stop_quake',\t// 画面揺らし中断\n\t\t\t'add_filter',\t// フィルター追加\n\t\t]);\n\t\t// キー押しっぱなしスキップで処理せずスルーするタグ\n\t\treadonly\t#hTag2SkipBypass: {[tag_name: string]: TTag} = {\n\t\t\t'wt'\t\t: ()=> {CmnTween.stopEndTrans(); return false},\n\t\t\t\t\t\t\t\t\t\t\t// トランス終了待ち\n\t\t\t'wait_tsy'\t: o=> this.hTag.stop_tsy(o),\t// トゥイーン終了待ち\n\t\t\t// 'wv',\t\t:タグ内部で処理\t// 動画再生終了待ち\n\t\t\t'wait'\t\t\t: ()=> false,\t// ウェイトを入れる\n\t\t\t// 'playbgm',\t:スルー不可\t\t// BGM の演奏\n\t\t\t// 'playse',\t:タグ内部で処理\t// 効果音の再生\n\t\t\t'wb'\t: ()=> this.hTag.stopfadese({buf: BUF_BGM}),\n\t\t\t\t\t\t\t\t\t\t\t// BGM フェードの終了待ち\n\t\t\t'wf'\t: o=> this.hTag.stopfadese(o),\t// 効果音フェードの終了待ち\n\t\t\t// 'ws'\t\t:タグ内部で処理\t// 効果音再生の終了待ち\n\t\t\t'wq'\t: ()=> this.hTag.stop_quake({}),\t// 画面揺らし終了待ち\n\t\t\t// fade系\t:タグ内部で処理\n\t\t\t// 'ch'\t\t:タグ内部で処理\t// 文字を追加する\n\t\t\t// 'tsy'\t:タグ内部で処理\t// トゥイーン開始\n\t\t\t// 'trans'\t:タグ内部で処理\t// ページ裏表を交換\n\t\t\t'quake'\t\t: ()=> false,\t\t// 画面を揺らす\n\t\t};\n\t\t// タグ処理中にクリックなどで即終わらせられるタグ(canskip 属性がある)\n\t\treadonly\t#hTag2CanSkip: {[tag_name: string]: boolean} = {\n\t\t\t\t\t\t// デフォルト値\n\t\t\t'wt'\t\t: true ,\t// [wt]トランス終了待ち\n\t\t\t'wait_tsy'\t: true ,\t// [wait_tsy]トゥイーン終了待ち\n\t\t\t'wv'\t\t: true ,\t// [wv]動画再生終了待ち\n\t\t\t'wait'\t\t: true ,\t// [wait]ウェイトを入れる\n\t\t\t'playbgm'\t: false,\t// [playbgm]BGM の演奏\n\t\t\t'playse'\t: true ,\t// [playse]効果音の再生\n\t\t\t'wb'\t\t: false,\t// [wb]BGM フェードの終了待ち\n\t\t\t'wf'\t\t: false,\t// [wf]効果音フェードの終了待ち\n\t\t\t'ws'\t\t: false,\t// [ws]効果音再生の終了待ち\n\t\t\t'wq'\t\t: true ,\t// [wq]画面揺らし終了待ち\n\t\t};\n\n\n\t#evtMng\t: EventMng;\n\t#layMng\t: LayerMng;\n\tsetOtherObj(evtMng: EventMng, layMng: LayerMng): void {\n\t\tthis.#evtMng = evtMng;\n\t\tthis.#layMng = layMng;\n\t}\n\n\n\t//MARK: インラインテキスト代入\n\t#let_ml(hArg: TArg) {\n\t\tconst {name} = hArg;\n\t\tif (! name) throw 'nameは必須です';\n\n\t\tlet ml = '';\n\t\tconst len = this.#script.len;\n\t\tfor (; this.#idxToken<len; ++this.#idxToken) {\n\t\t\tml = this.#script.aToken[this.#idxToken]!;\n\t\t\tif (ml !== '') break;\n\t\t}\n\t\thArg.text = ml;\n\t\thArg.cast = 'str';\n\t\tthis.hTag.let(hArg);\n\t\tthis.#idxToken += 2;\n\t\tthis.#lineNum += (ml.match(/\\n/g) ?? []).length;\n\n\t\treturn false;\n\t}\n\n\n\t//MARK: スタックのダンプ\n\t#dump_stack() {\n\t\tif (this.#idxToken === 0) {\n\t\t\tconsole.group(`🥟 [dump_stack] スクリプト現在地 fn:${this.#scriptFn} line:1 col:0`);\n\t\t\tconsole.groupEnd();\n\t\t\treturn false;\n\t\t}\n\n\t\tconst lc0 = this.#cnvIdx2lineCol(this.#script, this.#idxToken);\n\t\tconst now = `スクリプト現在地 fn:${this.#scriptFn} line:${String(lc0.ln)} col:${String(lc0.col_s +1)}`;\n\t\tconsole.group(`🥟 [dump_stack] ${now}`);\n\t\tconst len = this.#aCallStk.length;\n\t\tif (len > 0) {\n\t\t\tconsole.info(now);\n\t\t\tfor (let i=len -1; i>=0; --i) {\n\t\t\t\tconst cs = this.#aCallStk[i]!;\n\t\t\t\tconst hMp = cs.csArg[':hMp'];\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\t\t\tconst from_macro_nm = hMp\n\t\t\t\t\t? <string>(<{[nm: string]: any}>hMp)[':タグ名']\n\t\t\t\t\t: undefined;\n\t\t\t\tconst call_nm = cs.csArg[':タグ名'] ?? '';\n\t\t\t\tconst lc = this.#cnvIdx2lineCol(this.#hScript[cs.fn], cs.idx);\n\t\t\t\tconsole.info(\n\t\t\t\t\t`${String(len -i)}つ前のコール元 fn:${cs.fn} line:${\n\t\t\t\t\t\tString(lc.ln)} col:${String(lc.col_s +1)\n\t\t\t\t\t}${\n\t\t\t\t\t\tfrom_macro_nm ?'(['+ from_macro_nm +']マクロ内)' :' '\n\t\t\t\t\t}で [${call_nm} ...]をコール`\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tconsole.groupEnd();\n\n\t\treturn false;\n\t}\n\t#cnvIdx2lineCol(st: Script | undefined, idx: number): {ln: number, col_s: number, col_e: number} {\n\t\tconst ret = {ln: 1, col_s: 0, col_e: 0};\n\t\tif (! st) return ret;\n\n\t\tlet i = idx -1;\n\t\tconst lN = ret.ln = st.aLNum[i]!;\n\t\twhile (st.aLNum[i] === lN) {\n\t\t\tconst tkn = st.aToken[i]!;\n\t\t\tif (! tkn.startsWith('\\n')) {\n\t\t\t\tconst len = tkn.length;\n//console.log(`fn:ScriptIterator.ts line:586 cnvIdx2lineCol tkn:${st.aToken[i]} len:${len} s:${ret.col_s} e:${ret.col_e}`);\n\t\t\t\tif (ret.col_e > 0) ret.col_s += len;\n\t\t\t\tret.col_e += len;\n\t\t\t}\n\t\t\tif (--i < 0) break;\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\n\t//MARK: 外部へスクリプトを表示\n\t#dump_script(hArg: TArg) {\n\t\tconst {set_fnc, break_fnc} = hArg;\n\t\tif (! set_fnc) throw 'set_fncは必須です';\t// スクリプトを返すコールバック\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\tthis.#fncSet = (<any>globalThis)[set_fnc];\n\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\tif (! this.#fncSet) {\n\t\t\tif (argChk_Boolean(hArg, 'need_err', true)) throw `HTML内に関数${set_fnc}が見つかりません`;\n\t\t\tthis.#fncSet = ()=> { /* empty */ };\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.noticeBreak = (goto: boolean)=> {\n\t\t\tif (this.#fnLastBreak !== this.#scriptFn) {\n\t\t\t\tthis.#fnLastBreak = this.#scriptFn;\n\t\t\t\tthis.#fncSet(\n\t\t\t\t\tthis.#hScrCache4Dump[this.#scriptFn] ??= this.#script.aToken.join('')\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.#fncBreak(this.#lineNum, goto);\n\t\t};\n\t\tthis.noticeBreak(true);\t// 一度目のthis.fncBreak()はスルー(まだ読んでないし)\n\n\t\tif (! break_fnc) return false;\t// Break通知コールバック\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\tthis.#fncBreak = (<any>globalThis)[break_fnc];\n\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\tif (! this.#fncBreak) {\n\t\t\tif (argChk_Boolean(hArg, 'need_err', true)) throw `HTML内に関数${break_fnc}が見つかりません`;\n\t\t\tthis.#fncBreak = ()=> { /* empty */ };\n\t\t}\n\n\t\treturn false;\n\t}\n\t#fncSet: (txt: string)=> void = ()=> { /* empty */ };\n\t#fncBreak: (ln: number, goto: boolean)=> void = ()=> { /* empty */ };\n\t#fnLastBreak = '';\n\t#hScrCache4Dump: {[fn: string]: string;} = {};\n\tnoticeBreak = (_goto: boolean)=> { /* empty */ };\n\n\n\t#dumpErrLine = 5;\n\tdumpErrForeLine() {\n\t\tif (this.#idxToken === 0) {\n\t\t\tconsole.group(`🥟 Error line (from 0 rows before) fn:${this.#scriptFn}`);\n\t\t\tconsole.groupEnd();\n\t\t\treturn;\n\t\t}\n\n\t\tlet s = '';\n\t\tfor (let i=this.#idxToken -1; i>=0; --i) {\n\t\t\ts = String(this.#script.aToken[i]) + s;\n\t\t\tif ((s.match(/\\n/g) ?? []).length >= this.#dumpErrLine) break;\n\t\t}\n\t\tconst a = s.split('\\n').slice(-this.#dumpErrLine);\n\t\tconst len = a.length;\n\t\tconsole.group(`🥟 Error line (from ${String(len)} rows before) fn:${this.#scriptFn}`);\n\t\tconst ln_txt_width = String(this.#lineNum).length;\n\t\tconst lc = this.#cnvIdx2lineCol(this.#script, this.#idxToken);\n\t\tfor (let i=0; i<len; ++i) {\n\t\t\tconst ln = this.#lineNum -len +i +1;\n\t\t\tconst mes = `${String(ln).padStart(ln_txt_width, ' ')}: %c`;\n\t\t\tconst e = a[i]!;\n\t\t\tconst line = e.length > 75 ?e.slice(0, 75) +'…' :e;\t// 長い場合は後略\n\t\t\tif (i === len -1) console.info(\n\t\t\t\tmes + line.slice(0, lc.col_s) +'%c'+ line.slice(lc.col_s),\n\t\t\t\t'color: black; background-color: skyblue;', 'color: black; background-color: pink;'\n\t\t\t)\n\t\t\telse console.info(mes + line, 'color: black; background-color: skyblue;');\n\t\t}\n\t\tconsole.groupEnd();\n\t\t//console.log('Linkの出力 : %o', 'file:///Volumes/MacHD2/_Famibee/SKYNovel/prj/mat/main.sn');\n\t}\n\n\n\t#aIfStk\t: number[]\t= [-1];\t// 先頭に積む FIFOバッファ(unshift / shift)\n\t//MARK: ifブロックの終端\n\t#endif() {\n\t\tconst t = this.#aIfStk[0];\n\t\tif (! t) throw 'this.#aIfStk が異常です';\n\t\tif (t === -1) throw 'ifブロック内ではありません';\n\n\t\tthis.#idxToken = t;\n\t\tthis.#aIfStk.shift();\t// 最初の要素を取り除く\n\n\t\treturn false;\n\t}\n\t//MARK: ifブロックの開始\n\t#if(hArg: TArg) {\n\t\t//console.log('if idxToken:'+ this.#idxToken);\n\t\tconst {exp} = hArg;\n\t\tif (! exp) throw 'expは必須です';\n\t\tif (exp.startsWith('&')) throw '属性expは「&」が不要です';\n\n\t\tlet cntDepth = 0;\t\t// if深度カウンター\n\t\tlet\tidxGo = this.prpPrs.parse(exp) ?this.#idxToken :-1;\n\t\tconst lnIf = this.#script.aLNum[this.#idxToken];\n\t\tconst zLn = this.#lineNum -((lnIf ?? 0) || 0);\t// ??ではなく。NaN は falsy\n\t\tconst len = this.#script.len;\n\t\tfor (; this.#idxToken<len; ++this.#idxToken) {\n\t\t\tconst ln = this.#script.aLNum[this.#idxToken];\n\t\t\tthis.#script.aLNum[this.#idxToken] = ((ln ?? 0) || 0)+ zLn; // ??はNaN不可\n\t\t\tconst tkn = this.#script.aToken[this.#idxToken];\n\t\t\t//console.log(`[if]トークン ${this.#scriptFn}:${this.#lineNum} idx:${this.#idxToken} realLn:${this.#script.aLNum[this.#idxToken]} idxGo:${idxGo} cntDepth:${cntDepth} token<${tkn}>`);\n\t\t\tif (! tkn) continue;\n\n\t\t\tconst uc = tkn.charCodeAt(0);\t// TokenTopUnicode\n\t\t\tif (uc === 10) {this.#lineNum += tkn.length; continue}\t// \\n 改行\n\t\t\tif (uc !== 91) continue;\t// [ タグ開始以外\n\n\t\t\tconst [tag_name, args] = tagToken2Name_Args(tkn);\n\t\t\tif (! (tag_name in this.hTag)) throw `未定義のタグ[${tag_name}]です`;\n\t\t\tthis.#alzTagArg.parse(args);\n\n\t\t\tswitch (tag_name) {\n\t\t\tcase 'if':\t++cntDepth; break;\n\n\t\t\tcase 'elsif':{\n\t\t\t\tif (cntDepth > 0) break;\n\t\t\t\tif (idxGo > -1) break;\n\n\t\t\t\tconst e = this.#alzTagArg.hPrm.exp?.val;\n\t\t\t\tif (! e) throw 'expは必須です';\n\t\t\t\tif (e.startsWith('&')) throw '属性expは「&」が不要です';\n\t\t\t\tif (this.prpPrs.parse(e)) idxGo = this.#idxToken +1;\n\t\t\t}\tbreak;\n\n\t\t\tcase 'else':\n\t\t\t\tif (cntDepth > 0) break;\n\t\t\t\tif (idxGo === -1) idxGo = this.#idxToken +1;\n\t\t\t\tbreak;\n\n\t\t\tcase 'endif':\n\t\t\t\tif (cntDepth > 0) {--cntDepth; break}\n\t\t\t\tif (idxGo === -1) {\n\t\t\t\t\t++this.#idxToken;\n\t\t\t\t\tthis.#script.aLNum[this.#idxToken]! += zLn;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.#aIfStk.unshift(this.#idxToken +1);\t// 先頭に要素追加\n\t\t\t\t\tthis.#idxToken = idxGo;\n\t\t\t\t\tthis.#lineNum = this.#script.aLNum[this.#idxToken]!;\n\t\t\t\t\t\t// +zLn 不要\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tthrow '[endif]がないままスクリプト終端です';\n\t\t//return false;\n\t}\n\n\n\t//MARK: サブルーチンコール\n\t#call(hArg: TArg) {\n\t\tif (! argChk_Boolean(hArg, 'count', false)) this.#eraseKidoku();\n\n\t\tconst {fn} = hArg;\n\t\tif (fn) this.#cnvSnPath(fn);\t// chk only\n\t\tthis.#callSub({...hArg}, ReadingState.popLocalEvts());\n\t\t\t// ':hEvt1Time'の扱いだけは[macro]と異なる\n\n\t\tif (argChk_Boolean(hArg, 'clear_local_event', false)) this.hTag.clear_event({});\n\t\treturn this.#jumpWork(fn, hArg.label);\n\t}\n\t#callSub(hArg: TArg, hEvt1Time?: T_HEvt2Fnc) {\n\t\tconst csa: ICallStackArg = {\n\t\t\t...hArg,\n\t\t\t':hEvt1Time': hEvt1Time,\n\t\t\t':hMp'\t\t: this.val.cloneMp(),\n\t\t\t':lenIfStk'\t: this.#aIfStk.length,\n\t\t};\n\t\tthis.#script.aLNum[this.#idxToken] = this.#lineNum;\t// 戻ったときの行番号\n\t\tif (! this.#resvToken) {csa[':resvToken'] = ''; this.#clearResvToken()}\n\t\tthis.#aCallStk.push(new CallStack(this.#scriptFn, this.#idxToken, csa));\n\t\tthis.#aIfStk.unshift(-1);\t// 最初に要素を追加\n\t}\n\n\t//MARK: シナリオジャンプ\n\t#jump(hArg: TArg) {\n\t\tif (! argChk_Boolean(hArg, 'count', true)) this.#eraseKidoku();\n\n\t\tthis.#aIfStk[0] = -1;\n\t\treturn this.#jumpWork(hArg.fn, hArg.label);\n\t}\n\n\t//MARK: コールスタック破棄\n\t#pop_stack(hArg: TArg) {\n\t\tif (argChk_Boolean(hArg, 'clear', false)) this.#aCallStk = [];\n\t\telse if (! this.#aCallStk.pop()) throw 'スタックが空です';\n\t\tthis.#clearResvToken();\n\t\tthis.#aIfStk = [-1];\n\t\tthis.val.setMp(creMP());\n\n\t\treturn false;\n\t}\n\n\t//MARK: サブルーチンから戻る\n\t#return(hArg: TArg) {\n\t\tconst cs = this.#aCallStk.pop();\n\t\tif (! cs) throw 'スタックが空です';\n\t\tconst csa = cs.csArg;\n\t\tthis.#aIfStk = this.#aIfStk.slice(-csa[':lenIfStk']);\t// 最初の要素を取り除く\n\n\t\tconst hMp = csa[':hMp'];\t// マクロからの復帰の場合にmp:値も復帰\n\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\tif (hMp) this.val.setMp(hMp);\n\t\t\t// たぶん型チェック的に if (hMp) は不要だが、\n\t\t\t// あとからESLint対応なので安易に挙動を変えない方針で\n\n\t\tconst after_token = csa[':resvToken'];\n\t\tif (after_token) this.nextToken = ()=> {\n\t\t\tthis.#clearResvToken();\n\t\t\treturn after_token;\n\t\t}\n\t\telse this.#clearResvToken();\n\n\t\tif (csa[':hEvt1Time']) ReadingState.pushLocalEvts(csa[':hEvt1Time']);\n\n\t\tconst {fn, label} = hArg;\n\t\tif (fn || label) return this.#jumpWork(fn, label);\n\n\t\tif (cs.fn in this.#hScript) {this.#jump_light(cs); return false}\n\t\treturn this.#jumpWork(cs.fn, '', cs.idx);\t// 確実にスクリプトロードなので\n\t}\n\n\t#resvToken\t= '';\n\t#clearResvToken() {\n\t\tthis.#resvToken = '';\n\t\tthis.nextToken = ()=> this.#nextToken_Proc();\n\t}\n\n\n\t#skipLabel = '';\n\t#jumpWork(fn = '', label = '', idx = 0): boolean {\n\t\tif (CmnLib.debugLog) console.log(`📜 %c1:jumpWork%c fn:${fn} lbl:${label} idx:${String(idx)}`, 'color:#3B0;', '');\n\t\tif (! fn && ! label) this.main.errScript('[jump系] fnまたはlabelは必須です');\n\t\tif (label) {\n\t\t\tif (! label.startsWith('*')) this.main.errScript('[jump系] labelは*で始まります');\n\t\t\tthis.#skipLabel = label;\n\t\t\tif (! this.#skipLabel.startsWith('**')) this.#idxToken = idx;\n\t\t}\n\t\telse {\n\t\t\tthis.#skipLabel = '';\n\t\t\tthis.#idxToken = idx;\n\t\t}\n\n\t\tif (! fn) {this.analyzeInit(); return false}\n\t\tif (fn.includes('@')) throw '[jump系] fn には文字「@」は禁止です';\n\n\t\tconst full_path = this.#cnvSnPath(fn);\n\t\tif (fn === this.#scriptFn) {this.analyzeInit(); return false}\n\t\tthis.#scriptFn = fn;\n\t\tconst st = this.#hScript[fn];\n\t\tif (st) {this.#script = st; this.analyzeInit(); return false}\n\n\t\tconst RPN_JUMPWORK = `jumpWork fn:${fn}`;\n\t\tReading.beginProc(RPN_JUMPWORK);\n\t\tlet fp_diff = '';\n\t\tconst ldr = new Loader;\n\t\ttry {\n\t\t\tfp_diff = this.#cnvSnPath(fn +'@');\n\t\t\t// 派生ファイルが存在する場合\n\t\t\tldr.add({name: fn +':base', url: full_path});\n\t\t\tldr.add({name: fn, url: fp_diff});\n\t\t} catch {\n\t\t\t// 派生ファイルはない\n\t\t\tldr.add({name: fn, url: full_path});\n\t\t}\n\t\tldr.use((res, next)=> {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\t\t\tthis.sys.dec(res.extension, res.data).then(d=> {\n\t\t\t\tres.data = d;\n\t\t\t\tnext();\n\t\t\t})\n\t\t\t.catch((e: unknown)=> {\n\t\t\t\tthis.main.errScript(`[jump系]snロード失敗です fn:${res.name} ${String(e)}`, false);\n\t\t\t\tnext();\n\t\t\t});\n\t\t})\n\t\t.load((_ldr, hRes)=> {\n\t\t\tReading.endProc(RPN_JUMPWORK);\n\t\t\tif (fp_diff) {\t// 派生ファイルが存在する場合\n\t\t\t\tconst scrBase: string = hRes[fn +':base']!.data;\n\t\t\t\tconst scrDiff: string = hRes[fn]!.data;\n\t\t\t\tconst aBase: string[] = scrBase.split('\\n');\n\t\t\t\tconst aDiff: string[] = scrDiff.split('\\n');\n\t\t\t\tconst lenB = aBase.length;\n\t\t\t\tconst lenD = aDiff.length;\n\t\t\t\t// 【派生スクリプト】の空行へ、【基底スクリプト】の同じ行の内容をコピー\n\t\t\t\tfor (let i=0; i<lenD && i<lenB; ++i) aDiff[i] ||= aBase[i] ?? '';\n\n\t\t\t\t// 【接尾辞つきファイル】として扱う\n\t\t\t\thRes[fn]!.data = aDiff.join('\\n');\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\t\t\t\tdelete hRes[fn +':base'];\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line @typescript-eslint/unbound-method\n\t\t\tthis.nextToken = this.#nextToken_Proc;\n\t\t\tthis.#lineNum = 1;\n\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\t\t\tthis.#resolveScript(hRes[fn]!.data);\n\t\t\tthis.hTag.record_place({});\n\t\t\tthis.analyzeInit();\n\t\t});\n\n\t\treturn true;\n\t}\n\tprivate\tanalyzeInit(): void {\n\t\tif (CmnLib.debugLog) console.log(`📜 %c9:analyzeInit%c fn:${this.#scriptFn} lbl:${this.#skipLabel} idx:${String(this.#idxToken)}`, 'color:#3B0;', '');\n\t\tconst o = this.#seekScript(this.#script, Boolean(this.val.getVal('mp:const.sn.macro.name')), this.#lineNum, this.#skipLabel, this.#idxToken);\n\t\tthis.#idxToken\t= o.idx;\n\t\tthis.#lineNum\t= o.ln;\n\t}\n\n\t// シナリオ解析処理ループ・冒頭処理\n\tnextToken = ()=> '';\t// 初期化前に終了した場合向け\n\t#nextToken_Proc(): string {\n\t\tif (this.#errOverScr()) return '';\n\n\t\tthis.#recordKidoku();\n\n\t\t// トークンの行番号更新\n\t\tthis.#script.aLNum[this.#idxToken] ||= this.#lineNum;\t// ??はNaN不可\n\t\tconst token = this.#script.aToken[this.#idxToken]!;\n\t\tthis.#dbgToken(token);\n\t\t++this.#idxToken;\n\n\t\treturn token;\n\t}\n\t#dbgToken = (_token: string)=> { /* empty */ };\n\t#errOverScr(): boolean {\n\t\tif (this.#idxToken < this.#script.len) return false;\n\t\tthis.main.errScript('スクリプト終端です errOverScr');\n\t\treturn true;\n\t}\n\n\n\treadonly #REG_NONAME_LABEL\t\t= /(\\*{2,})([^|]*)/;\n\treadonly #REG_TOKEN_MACRO_BEGIN\t= /^\\[macro\\s/;\n\treadonly #REG_TOKEN_MACRO_END\t= /^\\[endmacro[\\s\\]]/;\n\t#seekScript(st: Script, inMacro: boolean, iln: number, iskipLabel: string, idx: number): ISeek {\n\t\t//console.log(`seekScript (from)inMacro:${inMacro} (from)ln:${ln} (to)skipLabel:${skipLabel}: (to)idx:${idx}`);\n\t\tconst len = st.aToken.length;\n\t\tlet ln = iln, skipLabel = iskipLabel;\n\t\tif (! skipLabel) {\t// ラベルジャンプ以外(先頭から開始)\n\t\t\tif (this.#errOverScr()) return {idx, ln};\n\n\t\t\tif (! st.aLNum[idx]) {\t// NaN、undefined は falsy\n\t\t\t\tln = 1;\n\t\t\t\tfor (let j=0; j<idx; ++j) {\n\t\t\t\t\t// 走査ついでにトークンの行番号も更新\n\t\t\t\t\tst.aLNum[j] ||= ln;\t// ??はNaN不可\n\n\t\t\t\t\tconst tkn = st.aToken[j]!;\n\t\t\t\t\tif (tkn.startsWith('\\n')) ln += tkn.length;\t// \\n 改行\n\t\t\t\t\telse ln += (tkn.match(/\\n/g) ?? []).length;\n\t\t\t\t}\n\t\t\t\tst.aLNum[idx] = ln;\n\t\t\t}\n\t\t\telse ln = st.aLNum[idx];\n\n\t\t\treturn {idx, ln};\n\t\t}\n\n\t\t// 無名ラベルジャンプ\n\t\tst.aLNum[0] = 1;\n\t\tconst a_skipLabel = skipLabel.match(this.#REG_NONAME_LABEL);\n\t\tif (a_skipLabel) {\n\t\t\tskipLabel = a_skipLabel[1]!;\n\t\t\tlet i = idx;\n\t\t\tswitch (a_skipLabel[2]) {\n\t\t\tcase 'before':\n\t\t\t\twhile (st.aToken[--i] !== skipLabel) {\n\t\t\t\t\tif (i === 0) DebugMng.myTrace(`[jump系 無名ラベルbefore] \n\t\t\t\t\t\t${String(ln)} 行目以前で ${inMacro ?'マクロ内に' :''} ラベル【 ${skipLabel} 】がありません`, 'ET');\n\t\t\t\t\tif (inMacro && st.aToken[i]!.search(this.#REG_TOKEN_MACRO_BEGIN) > -1) DebugMng.myTrace('[jump系 無名ラベルbefore] マクロ内にラベル【'+ skipLabel +'】がありません', 'ET');\n\t\t\t\t}\n\t\t\t\treturn {idx: i +1, ln: st.aLNum[i]!};\t//\tbreak;\n\n\t\t\tcase 'after':\n\t\t\t\twhile (st.aToken[++i] !== skipLabel) {\n\t\t\t\t\tif (i === len) DebugMng.myTrace(`[jump系 無名ラベルafter] ${String(ln)} 行目以後でマクロ内にラベル【${skipLabel}】がありません`, 'ET');\n\t\t\t\t\tif (st.aToken[i]!.search(this.#REG_TOKEN_MACRO_END) > -1) DebugMng.myTrace(`[jump系 無名ラベルafter] ${String(ln)} 行目以後でマクロ内にラベル【 ${skipLabel} 】がありません`, 'ET');\n\t\t\t\t}\n\t\t\t\treturn {idx: i +1, ln: st.aLNum[i]!};\t//\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tDebugMng.myTrace('[jump系] 無名ラベル指定【label='+ skipLabel +'】が間違っています', 'ET');\n\t\t\t}\n\t\t}\n\n\t\t// ラベルジャンプ\n\t\tln = 1;\n\t\t// (new RegExp(\"~\")) の場合は、バックスラッシュは2つ必要\n\t\tconst reLabel = new RegExp(\n\t\t\t'^'+ skipLabel.replaceAll('*', '\\\\*') +'(?=\\\\s|;|\\\\[|\\\\||$)');\n\t\tlet in_let_ml = false;\n\t\tfor (let i=0; i<len; ++i) {\n\t\t\t// 走査ついでにトークンの行番号も更新\n\t\t\tst.aLNum[i] ||= ln;\t// ??はNaN不可\n\n\t\t\tconst tkn = st.aToken[i]!;\n\t\t\tif (in_let_ml) {\n\t\t\t\tif (this.#grm.testTagEndLetml(tkn)) in_let_ml = false;\n\t\t\t\telse ln += (tkn.match(/\\n/g) ?? []).length;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst uc = tkn.charCodeAt(0);\t// TokenTopUnicode\n\t\t\tif (uc === 10) {ln += tkn.length; continue}\t// \\n 改行\n\t\t\tif (uc === 42) {\t// 42 = *\n\t\t\t\tif (tkn.search(reLabel) > -1) return {idx: i +1, ln};//\tbreak;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (uc !== 91) continue;\t// [ タグ開始\n\n\t\t\tln += (tkn.match(/\\n/g) ?? []).length;\n\t\t\tif (this.#grm.testTagLetml(tkn)) in_let_ml = true;\n\t\t}\n\t\tif (in_let_ml) throw '[let_ml]の終端・[endlet_ml]がありません';\n\n\t\tDebugMng.myTrace(`[jump系] ラベル【${skipLabel}】がありません`, 'ET');\n\t\tthrow 'Dummy';\n\t}\n\n\t#hScript\t: HScript\t= Object.create(null);\t//{} シナリオキャッシュ\n\t#resolveScript(txt: string) {\n\t\tlet mes = '';\n\t\ttry {\n\t\t\tmes = 'ScriptIterator.resolveScript';\n\t\t\tconst scr = this.#grm.resolveScript(txt);\n\t\t\tmes = 'ScriptIterator.replaceScript_Wildcard';\n\t\t\tthis.#replaceScript_Wildcard(scr);\n\t\t\tthis.#hScript[this.#scriptFn] = this.#script = scr;\n\t\t}\n\t\tcatch (e) {\n\t\t\tif (e instanceof Error) mes += `例外 mes=${e.message}(${e.name})`;\n\t\t\telse mes = String(e);\n\t\t\tthis.main.errScript(mes, false);\n\t\t}\n\t\tthis.val.touchAreaKidoku(this.#scriptFn);\n\t}\n\n\t#jump_light(cs: CallStack) {\n\t\t// jumpでは連続マクロでスタックオーバーフローになるので簡易版を\n\t\t// 主に[return]やマクロ終了でジャンプ先がチェック不要な場合用\n\t\t// analyzeInit()とかもジャンプ前にやってて不要だし\n\t\tthis.#scriptFn\t= cs.fn;\n\t\tthis.#idxToken\t= cs.idx;\n\t\tconst st = this.#hScript[this.#scriptFn];\n\t\tif (st) this.#script = st;\n\t\tthis.#lineNum = this.#script.aLNum[cs.idx]!;\n//console.log(`fn:ScriptIterator.ts %cjump_light cs ${cs.fn}:${this.#lineNum} idx:${cs.idx}`, 'background-color:#a03b79;');\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\n\n\t#recordKidoku() {\n\t\tconst ar = this.val.touchAreaKidoku(this.#scriptFn);\n\n\t\t// マクロ内やサブルーチンではisKidokuを変更させない\n\t\tif (this.#aCallStk.length > 0) {ar.record(this.#idxToken); return}\n\n\t\tthis.#isKidoku = ar.search(this.#idxToken);\n\t\tthis.val.setVal_Nochk('tmp', 'const.sn.isKidoku', this.#isKidoku);\n\t\tif (this.#isKidoku) return;\n\n\t\tar.record(this.#idxToken);\n\t\t// saveKidoku()\n\t\t\t// 厳密にはここですべきだが、パフォーマンスに問題があるので\n\t\t\t// クリック待ちを期待できるwait、waitclick、s、l、pタグで\n\t\t\t// saveKidoku()をコール。\n\t}\n\t#isKidoku\t= false;\n\tget isKidoku() {return this.#isKidoku}\n\t#eraseKidoku() {\n\t\tthis.val.getAreaKidoku(this.#scriptFn)?.erase(this.#idxToken);\n\t\tthis.#isKidoku = false;\n\t}\n\tget isNextKidoku(): boolean {\n\t\tlet fn\t= this.#scriptFn;\n\t\tlet idx\t= this.#idxToken;\n\t\tlet len\t= this.#script.len;\n\t\tif (this.#aCallStk.length > 0) {\n\t\t\tconst cs = this.#aCallStk[0]!;\n\t\t\tfn = cs.fn;\n\t\t\tidx = cs.idx;\n\t\t\tconst st = this.#hScript[fn];\n\t\t\tif (st) len = st.len;\n\t\t}\n\t\tif (idx === len) return false;\t// スクリプト終端\n\n\t\tconst areas = this.val.getAreaKidoku(fn);\n\t\treturn areas?.search(idx) ?? false;\n\t}\n\n\n\tget normalWait(): number {\n\t\treturn this.#isKidoku\n\t\t?\n\t\t\tthis.val.tagCh_doWait_Kidoku\n\t\t\t?\tthis.val.tagCh_msecWait_Kidoku\n\t\t\t:\t0\n\t\t:\n\t\t\tthis.val.tagCh_doWait\n\t\t\t?\tthis.val.tagCh_msecWait\n\t\t\t:\t0\n\t\t;\n\t}\n\n\n\t//MARK: 括弧マクロの定義\n\t#bracket2macro(hArg: TArg) {\n\t\tthis.#grm.bracket2macro(hArg, this.hTag, this.#script, this.#idxToken);\n\n\t\treturn false;\n\t}\n\n\t//MARK: 一文字マクロの定義\n\t#char2macro(hArg: TArg) {\n\t\tthis.#grm.char2macro(hArg, this.hTag, this.#script, this.#idxToken);\n\n\t\treturn false;\n\t}\n\n\t//MARK: マクロ定義の開始\n\t// eslint-disable-next-line no-irregular-whitespace\n\treadonly\t#REG_NG4MAC_NM = /[\"'#;\\\\] ]+/;\n\t#macro(hArg: TArg) {\n\t\tconst {name} = hArg;\n\t\tif (! name) throw 'nameは必須です';\n\t\tif (name in this.hTag) throw `[${name}]はタグかすでに定義済みのマクロです`;\n\t\tif (this.#REG_NG4MAC_NM.test(name)) throw `[${name}]はマクロ名として異常です`;\n\n\t\tconst ln = this.#lineNum;\n\t\tconst cs = new CallStack(this.#scriptFn, this.#idxToken);\n\t\tthis.#strStepin += '|'+ name;\n\t\t// (new RegExp(\"~\")) の場合は、バックスラッシュは2つ必要\n\t\tthis.#REGSTEPIN = new RegExp(`\\\\[(${this.#strStepin})\\\\b`);\n\t\tthis.hTag[<keyof T_HTag>name] = hArgM=> {\n\t\t\thArgM.design_unit = hArg.design_unit;\n\t\t\tthis.#callSub(hArgM);\n\n\t\t\t// AIRNovelの仕様:親マクロが子マクロコール時、*がないのに値を引き継ぐ\n\t\t\t//for (const k of Object.keys(hArg)) this.val.setVal_Nochk('mp', k, hArg[k]);\n\t\t\tthis.val.setMp({\n\t\t\t\t...hArgM,\n\t\t\t\t'const.sn.macro': JSON.stringify({name: hArg.name}),\n\t\t\t\t\t// ムダに大きいスクリプター用情報を削除、名前だけに\n\t\t\t\t'const.sn.me_call_scriptFn': this.#scriptFn,\n\t\t\t});\n\t\t\tthis.val.setVal_Nochk('mp', 'const.sn.me_call_scriptFn', this.#scriptFn);\n\n\t\t\tthis.#lineNum = ln;\n\t\t\tthis.#jump_light(cs);\n\n\t\t\treturn false;\n\t\t};\n\n\t\tfor (; this.#idxToken < this.#script.len; ++this.#idxToken) {\n\t\t\t// トークンの行番号更新\n\t\t\tthis.#script.aLNum[this.#idxToken] ||= this.#lineNum; // ??はNaN不可\n\n\t\t\tconst token = this.#script.aToken[this.#idxToken]!;\n\t\t\tif (token.search(this.#REG_TOKEN_MACRO_END) > -1) {\n\t\t\t\t++this.#idxToken;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst uc = token.charCodeAt(0);\t// TokenTopUnicode\n\t\t\tif (uc === 10) this.#lineNum += token.length;\t// \\n 改行\n\t\t\telse if (uc === 91) this.#lineNum += (token.match(/\\n/g) ?? []).length;\t// [ タグ開始\n\t\t}\n\t\tthrow `マクロ[${name}]定義の終端・[endmacro]がありません`;\n\t}\n\t#strStepin\t= 'call';\n\t#REGSTEPIN\t= /\\[(call)\\b/;\t// https://regex101.com/r/Lk9ASK/1\n\n\n\t//MARK: しおりの読込\n\t#load(hArg: TArg) {\n\t\tif ('fn' in hArg !== 'label' in hArg) throw 'fnとlabelはセットで指定して下さい';\n\n\t\tconst place = argChk_Num(hArg, 'place', 0);\n\t\tconst mark = this.val.getMark(place);\n\t\tif (! mark) throw `place=${String(place)} は存在しません`\n\n\t\treturn this.loadFromMark(hArg, mark, SndProcOnLoad.ALL_STOP_AND_PLAY);\n\t}\n\tloadFromMark(hArg: TArg, mark: T_Mark, snd: SndProcOnLoad = SndProcOnLoad.MINIMAL_STOP) {\n\t\tthis.hTag.clear_event({});\n\t\tthis.val.mark2save(mark);\n\t\tthis.val.setMp(creMP());\n\t\tthis.#layMng.recPagebreak();\n\n\t\tlet ap: Promise<void>[] = [];\n\t\tif (snd !== SndProcOnLoad.NO_TOUCH) ap = this.sndMng\n\t\t.playLoopFromSaveObj(snd === SndProcOnLoad.ALL_STOP_AND_PLAY);\n\n\t\tif (argChk_Boolean(hArg, 'do_rec', true)) this.#mark = {\n\t\t\thSave\t: this.val.cloneSave(),\n\t\t\thPages\t: {...mark.hPages},\n\t\t\taIfStk\t: [...mark.aIfStk],\n\t\t}\n\n\t\tconst o: TArg = {\n\t\t\tenabled\t: Boolean(this.val.getVal('save:const.sn.autowc.enabled')),\n\t\t\ttext\t: String(this.val.getVal('save:const.sn.autowc.text')),\n\t\t\ttime\t: Number(this.val.getVal('save:const.sn.autowc.time')),\n\t\t};\n\t\tthis.hTag.autowc(o);\n\n\t\tthis.#aIfStk = [...this.#mark.aIfStk];\n\t\tthis.#aCallStk = [];\n\t\tCmnTween.stopAllTw();\n\n\t\tconst p = Promise.allSettled([...ap, ...this.#layMng.playback(this.#mark.hPages)])\n\t\t.then(()=> this.#layMng.cover(false));\n\t\tconst {index, fn} = hArg;\n\t\tif (index) {\t// ページ移動用\n\t\t\tif (CmnLib.debugLog) console.log(`📜 %cloadFromMark index:${String(index)} move!%c fn:${fn ?? ''}`, 'color:#3B0;', '');\n\t\t\tp.then(()=> {\n\t\t\t\tif (! this.#jumpWork(fn, '', index)) this.main.resume();\n\t\t\t\t// if (ret)\t\t// 中で非同期で endProc() を呼ぶのでまかせる\n\t\t\t\t// if (! ret)\t// 同期でなにもせずすぐ返る\n\t\t\t})\n\t\t\t.catch((e: unknown)=> console.error('loadFromMark e:%o', e));\n\t\t\treturn true;\n\t\t}\n\n\t\tthis.#layMng.cover(true);\t// ページ移動では全画面黒で覆わない\n\t\tconst fn2 = String(this.val.getVal('save:const.sn.scriptFn'));\n\t\tconst idx = Number(this.val.getVal('save:const.sn.scriptIdx'));\n\t\t// eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\t\tdelete this.#hScript[fn2];\t// 必ずスクリプトを再読込。吉里吉里に動作を合わせる\n\t\tconst {label} = hArg;\n\t\tp.then(label ?()=> {\n\t\t\tthis.#scriptFn = fn2;\n\t\t\tthis.#idxToken = idx;\n\t\t\tif (! this.hTag.call({fn, label})) this.main.resume();\n\t\t}\n\t\t: ()=> {\n\t\t\tif (! this.#jumpWork(fn2, '', idx)) this.main.resume();\n\t\t})\n\t\t.catch((e: unknown)=> console.error('loadFromMark e:%o', e));\n\n\t\treturn true;\n\t}\n\n\t//MARK: スクリプト再読込\n\t#reload_script(hArg: TArg) {\t// 最後の[record_place]から再開\n\t\tconst mark = this.val.getMark(0);\n\t\tif (! mark) return false;\n\n\t\t// 起動から再読込までの間に追加・変更・削除されたファイルがあるかも、に対応\n\t\t//\tdelete this.hScript[this.#scriptFn];\t// これだと[reload_script]位置になる\n\t\t// eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\t\tdelete this.#hScript[getFn(mark.hSave['const.sn.scriptFn'])];\n\n\t\t// 派生ファイルを削除\n\t\tconst h: HScript = {};\n\t\tfor (const fn in this.#hScript) {\n\t\t\ttry {this.#cnvSnPath(fn +'@')}\n\t\t\tcatch {h[fn] = this.#hScript[fn]!}\t// 派生ファイル以外を残す\n\t\t}\n\t\tthis.#hScript = h;\n\n\t\thArg.do_rec = false;\n\t\treturn this.loadFromMark(hArg, mark, SndProcOnLoad.NO_TOUCH);\n\t}\n\n\n\t//MARK: セーブポイント指定\n\t#mark: T_Mark = {\n\t\thSave\t: creSAVEDATA(),\n\t\thPages\t: {},\n\t\taIfStk\t: [-1],\n\t};\n\t#record_place = ()=> {\n\t\tconst {fn, idx} = this.nowScrIdx();\n\t\tthis.val.setVal_Nochk('save', 'const.sn.scriptFn', fn);\n\t\tthis.val.setVal_Nochk('save', 'const.sn.scriptIdx', idx);\n\t\tthis.#mark = {\n\t\t\thSave\t: this.val.cloneSave(),\n\t\t\thPages\t: this.#layMng.record(),\n\t\t\taIfStk\t: this.#aIfStk.slice(this.#aCallStk.length),\n\t\t};\n\n\t\treturn false;\n\t}\n\tnowScrIdx(): {fn: string, idx: number} {\n\t\tconst len = this.#aCallStk.length;\n\t\tif (len === 0) return {\n\t\t\tfn\t: this.#scriptFn,\n\t\t\tidx\t: this.#idxToken,\n\t\t};\n\n\t\tconst cs = this.#aCallStk[0]!;\n\t\treturn {\n\t\t\tfn\t: cs.fn,\n\t\t\tidx\t: cs.idx,\n\t\t}\n\t}\n\tnowMark(): T_Mark {return {...this.#mark}}\t// コピーはここでする\n\n\t//MARK: スクリプト停止位置(マクロなどなら最上位の呼び元)\n\tnowScrFnLn(): {fn: string, ln: number, col_s: number, col_e: number} {\n\t\tconst {fn, idx} = this.nowScrIdx();\n\t\tconst st = this.#hScript[fn]!;\n\t\tconst o = this.#cnvIdx2lineCol(st, idx);\t// -1不要\n\t\treturn {fn, ...o};\n\t}\n\n\t//MARK: しおりの保存\n\t#save(hArg: TArg) {\n\t\tif (! ('place' in hArg)) throw 'placeは必須です';\n\t\tconst place = Number(hArg.place);\n\n\t\tdelete hArg[':タグ名'];\n\t\tdelete hArg.place;\n\t\thArg.text = hArg.text ?? '';\n\t\tthis.#mark.json = hArg;\n\t\tthis.val.setMark(place, this.#mark);\n\n\t\tconst now_sp = Number(this.val.getVal('sys:const.sn.save.place'));\n\t\tif (place === now_sp) this.val.setVal_Nochk('sys', 'const.sn.save.place', now_sp +1);\n\n\t\treturn false;\n\t}\n\n\n\trecodeDesign(hArg: TArg) {\n\t\tlet fn = '';\n\t\tlet idx = 0;\n\n\t\tconst len = this.#aCallStk.length;\n\t\tif (hArg.design_unit && len > 0) {\n\t\t\t// デザインモードでこのマクロへの引数変更とするか(内部をサーチさせない)\n\t\t\tconst cs = this.#aCallStk[0]!;\n\t\t\tfn = cs.fn;\n\t\t\tidx = cs.idx;\n\t\t}\n\t\telse {\n\t\t\tfn = this.#scriptFn;\n\t\t\tidx = this.#idxToken;\n\t\t}\n\t\thArg[':path']\t= this.#cnvSnPath4Dbg(fn);\n\t\tconst scr = this.#hScript[fn]!;\n\t\tconst lc = this.#cnvIdx2lineCol(scr, idx);\n\t\thArg[':ln']\t\t= lc.ln;\n\t\thArg[':col_s']\t= lc.col_s;\n\t\thArg[':col_e']\t= lc.col_e;\n\t\tconst idx_1 = idx -1;\n\t\thArg[':idx_tkn']= idx_1;\n\t\thArg[':token']\t= scr.aToken[idx_1];\n\n\t\tthis.sys.send2Dbg('_recodeDesign', hArg);\n\t}\n\treplace(idx: number, val: string) {this.#script.aToken[idx] = val}\n\n}\n"],"names":["ScriptIterator","cfg","hTag","main","val","prpPrs","sndMng","sys","o","#let_ml","#dump_stack","#dump_script","#endif","#if","#call","#jump","#pop_stack","#return","#bracket2macro","#char2macro","#macro","#load","#reload_script","#record_place","#save","#dbgToken","token","#scriptFn","#lineNum","#idxToken","#aCallStk","#procDebugtag","tag_name","#alzTagArg","#aIfStk","#grm","Grammar","ce","RubySpliter","CmnLib","#hHook","type","#isBreak_base","fnc","hLineBP","fn","v","#regBreakPoint","#hFuncBP","tkn","uc","#script","len","#jumpWork","AnalyzeTagArg","#hFn2hLineBP","#cnvSnPath4Dbg","#breakState","#aStack","#isIdxOverLast","#idxDx4Dbg","#go_stepover","#REGSTEPIN","#go_stepout","#cnvSnPath","SEARCH_PATH_ARG_EXT","out","#csDepth_macro_esc","_token","#subHitCondition","tagToken2Name","bp","isBreak","getFn","idx_n","tkn0","fn0","tag_name0","nm","ma","lc0","#cnvIdx2lineCol","a","i","cs","st","#hScript","lc","_tag_name","args","tag_fnc","hPrm","cond","p","ps","hArg","csa","creCSArg","arg_nm","def","mac","Reading","#setTag2ChIn","promise","resolve","RPN_COMP_CHIN","#setTag2FinishTrans","#evtMng","CmnTween","fncBypass","#hTag2SkipBypass","argChk_Boolean","#hTag2CanSkip","BUF_BGM","#layMng","evtMng","layMng","name","ml","now","hMp","from_macro_nm","call_nm","idx","ret","lN","set_fnc","break_fnc","#fncSet","goto","#fnLastBreak","#hScrCache4Dump","#fncBreak","_goto","#dumpErrLine","s","ln_txt_width","ln","mes","line","exp","cntDepth","idxGo","lnIf","zLn","tagToken2Name_Args","e","#eraseKidoku","#callSub","ReadingState","hEvt1Time","#resvToken","#clearResvToken","CallStack","creMP","after_token","label","#jump_light","#nextToken_Proc","#skipLabel","full_path","RPN_JUMPWORK","fp_diff","ldr","Loader","res","next","d","_ldr","hRes","scrBase","scrDiff","aBase","aDiff","lenB","lenD","#resolveScript","#seekScript","#errOverScr","#recordKidoku","#REG_NONAME_LABEL","#REG_TOKEN_MACRO_BEGIN","#REG_TOKEN_MACRO_END","inMacro","iln","iskipLabel","skipLabel","j","a_skipLabel","DebugMng","reLabel","in_let_ml","txt","scr","#replaceScript_Wildcard","#REG_WILDCARD","#REG_WILDCARD2","p_fn","ext","nt","ar","#isKidoku","#REG_NG4MAC_NM","#strStepin","hArgM","place","argChk_Num","mark","snd","ap","#mark","index","fn2","h","creSAVEDATA","now_sp","idx_1"],"mappings":";;;;;;;AAkDO,MAAMA,EAAe;AAAA;AAAA,EAsB3B,YAA6BC,GAA8BC,GAA+BC,GAA+BC,GAAkCC,GAAuCC,GAAmCC,GAAc;AAAtN,SAAA,MAAAN,GAA8B,KAAA,OAAAC,GAA+B,KAAA,OAAAC,GAA+B,KAAA,MAAAC,GAAkC,KAAA,SAAAC,GAAuC,KAAA,SAAAC,GAAmC,KAAA,MAAAC,GAEpOL,EAAK,SAAU,CAAAM,MAAI,KAAKC,GAAQD,CAAC,GACjCN,EAAK,YAAY,MAAK,IAItBA,EAAK,aAAa,MAAK,KAAKQ,IAAA,GAC5BR,EAAK,cAAa,CAAAM,MAAI,KAAKG,IAAaH,CAAC,GAGzCN,EAAK;AAAA,IACLA,EAAK;AAAA,IACLA,EAAK,QAAS,MAAK,KAAKU,IAAA,GACxBV,EAAK,KAAO,CAAAM,MAAI,KAAKK,IAAIL,CAAC,GAI1BN,EAAK,OAAQ,CAAAM,MAAI,KAAKM,IAAMN,CAAC,GAC7BN,EAAK,OAAQ,CAAAM,MAAI,KAAKO,IAAMP,CAAC,GAE7BN,EAAK,YAAY,CAAAM,MAAI,KAAKQ,IAAWR,CAAC,GACtCN,EAAK,SAAU,CAAAM,MAAI,KAAKS,GAAQT,CAAC,GAGjCN,EAAK,gBAAgB,CAAAM,MAAI,KAAKU,IAAeV,CAAC,GAC9CN,EAAK,aAAc,CAAAM,MAAI,KAAKW,IAAYX,CAAC,GACzCN,EAAK,WAAY,CAAAM,MAAI,KAAKS,GAAQT,CAAC,GACnCN,EAAK,QAAU,CAAAM,MAAI,KAAKY,IAAOZ,CAAC,GAKhCN,EAAK,OAAS,CAAAM,MAAI,KAAKa,IAAMb,CAAC,GAC9BN,EAAK,gBAAgB,CAAAM,MAAI,KAAKc,IAAed,CAAC,GAC9CN,EAAK,eAAe,MAAK,KAAKqB,GAAA,GAC9BrB,EAAK,OAAS,CAAAM,MAAI,KAAKgB,IAAMhB,CAAC,GAG1BP,EAAI,KAAK,MAAM,UAAO,KAAKwB,KAAY,CAAAC,MAAQ;AAAC,MAAIA,EAAM,KAAA,MAAW,MAAI,QAAQ,IAAI,WAAW,KAAKC,EAAS,IAAI,OAAO,KAAKC,EAAQ,CAAC,OAAO,OAAO,KAAKC,EAAS,CAAC,OAAO,OAAO,KAAKC,GAAU,MAAM,CAAC,QAAQJ,CAAK,KAAK,wBAAwB;AAAA,IAAC,IACnPzB,EAAI,KAAK,MAAM,aAAU8B,KAAgB,CAAAC,MAAW,QAAQ,IAAI,WAAW,KAAKL,EAAS,IAAI,OAAO,KAAKC,EAAQ,CAAC,OAAO,OAAO,KAAKC,EAAS,CAAC,OAAO,OAAO,KAAKC,GAAU,MAAM,CAAC,QAAQE,CAAQ,QAAQ,0BAA0B,KAAKC,GAAW,IAAI,IAE7P7B,EAAI,OAAO,0BAA0B,MAAK,KAAK8B,GAAQ,MAAM,GAC7D9B,EAAI,OAAO,8BAA8B,MAAK,KAAK0B,GAAU,MAAM,GAEnE,KAAKK,KAAO,IAAIC,EAAQnC,CAAG;AAE3B,UAAMoC,IAAKpC,EAAI,KAAK,KAAK;AAIzB,QAHA,KAAKkC,GAAK,UAAUE,CAAE,GACtBC,EAAY,UAAUD,CAAE,GAEpBE,EAAO,OAAO;AAEN,WAAKC,IAGhBjC,EAAI,QAAQ,CAACkC,GAAMjC,MAAK,KAAKgC,GAAyBC,CAAK,IAAIjC,CAAC,CAAC,GAEjE,KAAK,UAAU,CAAAkB,MAAQ,KAAKgB,GAAchB,CAAK;AAE/C,YAAMiB,IAAM,MAAK,KAAK,YAAA;AACtB,WAAK,cAAc,MAAK;AACvB,aAAK,cAAc,MAAK;AAAA,QAAc,GACtC,KAAK,IAAI,SAAS,MAAM,CAAA,CAAE;AAAA,MAC3B,GACA,KAAKH,GAAO,OAAO,CAAAhC,MAAI;AAEtB,cAAMoC,IAAUpC,EAAE,YAAY;AAE9B,mBAAW,CAACqC,GAAIC,CAAC,KAAK,OAAO,QAAQF,CAAO,EAAG,MAAKG,GAAeF,GAASC,CAAC;AAE7E,QAAA9C,EAAegD,KAAW,CAAA;AAE1B,mBAAWF,KAAKtC,EAAE,YAAY;AAE7B,UAAAR,EAAegD,GAASF,EAAE,IAAI,IAAI;AAInC,YAAItC,EAAE,aAAa;AAClB,cAAIyC;AAEJ,iBAAOA,IAAM,KAAK,eAAa;AAG9B,kBAAMC,IAAKD,EAAI,WAAW,CAAC;AAG3B,gBAFIC,MAAO,MACPA,MAAO,MACPA,MAAO,MAAMD,EAAI,WAAW,EAAG;AACnC,YAAIC,MAAO,OAAI,KAAKtB,MAAYqB,EAAI;AAAA,UACrC;AACA,eAAK,IAAI,SAAS,eAAe,CAAA,CAAE,GACnC,KAAK,cAAcN,GACnB,KAAK,YAAA;AAAA,QACN;AAEC,eAAK,aAAa,MAAK;AACtB,iBAAK,aAAa,MAAK;AAAA,YAAc,GACrC,KAAK,IAAI,SAAS,eAAe,CAAA,CAAE;AAAA,UAIpC,GAEA,KAAK,cAAcA,GACnB,KAAK,YAAA;AAAA,MAEP;AAAA,IACD,MACK,MAAK,eAAe,MAAK;AAAA,IAAc;AAAA,EAC7C;AAAA,EAnIAQ,KAAoB,EAAC,QAAQ,CAAC,EAAE,GAAG,KAAK,GAAG,OAAO,CAAC,CAAC,EAAA;AAAA,EAEpDxB,KAAY;AAAA,EACZ,IAAI,WAAW;AAAC,WAAO,KAAKA;AAAA,EAAS;AAAA,EACrCE,KAAY;AAAA,EACZ,IAAI,WAAW;AAAC,WAAO,KAAKA;AAAA,EAAS;AAAA,EACrC,cAAc;AAAC,MAAE,KAAKA;AAAA,EAAS;AAAA,EAC/BD,KAAW;AAAA,EACX,IAAI,UAAU;AAAC,WAAO,KAAKA;AAAA,EAAQ;AAAA,EAC1B,aAAa,CAACwB,MAAe;AAAC,SAAKxB,MAAYwB;AAAA,EAAG;AAAA,EAC3D,iBAAiB;AAAC,SAAKC,GAAU,KAAK1B,IAAW,IAAI,EAAE,KAAKE,EAAS;AAAA,EAAC;AAAA;AAAA,EAItEC,KAA0B,CAAA;AAAA;AAAA,EAEjBK;AAAA,EACAF,KAAa,IAAIqB,EAAA;AAAA,EAmH1B,aAAa,MAAK;AAAA,EAAc;AAAA,EAChCP,GAAeF,GAAYrC,GAAwB;AAClD,IAAAR,EAAeuD,GAAa,KAAKC,GAAeX,CAAE,CAAC,IAAIrC;AAAA,EACxD;AAAA,EAEA,UAAU;AAAC,SAAK,UAAU,KAAKe,KAAgB,MAAK;AAAA,EAAK;AAAA;AAAA,EAGhDiB,KAA4C;AAAA,IACpD,MAAM,MAAK;AAAA,IAAc;AAAA;AAAA;AAAA,IAEzB,YAAY,MAAK;AAChB,MAAAxC,EAAeuD,KAAe,CAAA,GAC9BvD,EAAegD,KAAW,CAAA,GAC1B,KAAK,UAAU,MAAK,IAEpB,KAAKR,GAAO,SAAU,EAAE,GACxB,KAAKiB,KAAc;AAAA,IACpB;AAAA,IACA,SAAS,MAAK;AAAC,WAAK,UAAU,MAAK;AAAA,IAAK;AAAA;AAAA;AAAA,IAIxC,WAAW,CAAAjD,MAAI,KAAKuC,GAAevC,EAAE,IAAIA,EAAE,CAAC;AAAA,IAC5C,YAAY,CAAAA,MAAI;AACf,MAAI,KAAKiD,OAAgB,MAEzB,KAAKA,KAAc,GAEnB,KAAK,KAAK,QAAQ,IAAO,MAAM,OAAOjD,EAAE,MAAM,CAAC,IAAI,OAAOA,EAAE,KAAK,CAAC,MAAM,OAAOA,EAAE,KAAK,CAAC,UAAU,GACjG,KAAK,IAAI,SAAS,wBAAwB,CAAA,CAAE,GAC5C,KAAK,IAAI,SAAS,wBAAwB,CAAA,CAAE;AAAA,IAC7C;AAAA,IACA,gBAAgB,CAAAA,MAAI;AACnB,MAAAR,EAAegD,KAAW,CAAA;AAE1B,iBAAWF,KAAKtC,EAAE,KAAkBwC,GAASF,EAAE,IAAI,IAAI;AAEvD,WAAK,IAAI,SAAStC,EAAE,IAAI,CAAA,CAAE;AAAA,IAC3B;AAAA;AAAA;AAAA,IAIA,OAAO,CAAAA,MAAI,KAAK,IAAI,SAASA,EAAE,IAAI,EAAC,GAAG,KAAKkD,GAAA,EAAQ,CAAE;AAAA;AAAA,IAEtD,MAAM,CAAAlD,MAAI;AAAC,WAAK,IAAI,SAASA,EAAE,IAAI,EAAC,GAAG,KAAK,OAAO,MAAMA,EAAE,GAAG,EAAA,CAAE;AAAA,IAAC;AAAA;AAAA,IAGjE,UAAU,MAAK;AACd,MAAI,KAAKmD,SAET,KAAK9B,MAAa,KAAK+B,IACvB,KAAKH,KAAc,GACnB,KAAK,KAAK,QAAQ,EAAI,GACtB,KAAK,KAAK,OAAA;AAAA,IACX;AAAA,IACA,UAAU,CAAAjD,MAAI,KAAKqD,GAAarD,CAAC;AAAA,IACjC,QAAQ,MAAK;AACZ,UAAI,KAAKmD,KAAkB;AAE3B,YAAMV,IAAM,KAAKE,GAAQ,OAAO,KAAKtB,KAAW,KAAK+B,EAAU;AAC/D,WAAK,IAAI,SAAS,aAAa,KAAKE,GAAW,KAAKb,KAAO,EAAE,IAAG,OAAM,EAAE,IAAI,CAAA,CAAE,GAE9E,KAAKpB,MAAa,KAAK+B,IACvB,KAAKH,KAAc,KAAKA,OAAgB,IACrC,IACA,GACH,KAAK,KAAK,QAAQ,EAAI,GACtB,KAAK,KAAK,OAAA;AAAA,IACX;AAAA,IACA,SAAS,CAAAjD,MAAI;AACZ,MAAI,KAAKmD,SAEL,KAAK7B,GAAU,SAAS,IAAG,KAAKiC,GAAY,EAAI,IAC/C,KAAKF,GAAarD,CAAC;AAAA,IACzB;AAAA,IACA,OAAO,MAAK;AACX,WAAKiD,KAAc,GACnB,KAAK,KAAK,QAAQ,IAAO,MAAM,GAC/B,KAAK,IAAI,SAAS,cAAc,CAAA,CAAE;AAAA,IACnC;AAAA,IACA,aAAa,MAAK;AACjB,WAAKA,KAAc,GACnB,KAAK,KAAK,QAAQ,IAAO,MAAM,GAC/B,KAAK,IAAI,SAAS,eAAe,CAAA,CAAE;AAAA,IACpC;AAAA,EAAA;AAAA,EAEQO,KAAa,CAACnB,MAAc,KAAK,IAAI,WAAWA,GAAIoB,EAAoB,MAAM;AAAA,EAC9ET,KAAiB,CAACX,MAC1B,KAAK,IAAI,wBAAwB,KAAKmB,GAAWnB,CAAE;AAAA,EACpDgB,GAAarD,GAAQ;AACpB,QAAI,KAAKmD,KAAkB;AAE3B,UAAMV,IAAM,KAAKE,GAAQ,OAAO,KAAKtB,KAAW,KAAK+B,EAAU;AAC/D,IAAI,KAAKE,GAAW,KAAKb,KAAO,EAAE,IAAG,KAAKc,GAAY,EAAK,KAE1D,KAAK,IAAI,SAAS,cAAc,CAAA,CAAE,GAClC,KAAKvB,GAAO,OAAQhC,CAAC;AAAA,EAEvB;AAAA,EACAuD,GAAYG,GAAc;AACzB,SAAK,IAAI,SAAS,aAAaA,IAAK,QAAO,EAAE,IAAI,EAAE,GACnD,KAAKC,KAAqB,KAAKrC,GAAU,UAASoC,IAAK,IAAG,IAC1D,KAAKrC,MAAa,KAAK+B,IACvB,KAAKH,KAAcS,IAAK,IAAoB,GAC5C,KAAK,KAAK,QAAQ,EAAI,GACtB,KAAK,KAAK,OAAA;AAAA,EACX;AAAA,EACAC,KAAqB;AAAA,EACrB,IAAIP,KAAa;AAChB,WAAO,KAAKH,OAAgB,KACxB,KAAKA,OAAgB,IAAiB,IAAG;AAAA,EAC9C;AAAA,EACAE,KAA0B;AACzB,WAAI,KAAK9B,KAAY,KAAKsB,GAAQ,MAAY,MAC9C,KAAK,IAAI,SAAS,eAAe,CAAA,CAAE,GACnC,KAAK,KAAK,QAAQ,IAAO,yBAAyB,GAC3C;AAAA,EACR;AAAA;AAAA,EAGA,OAAOI,KAAoD,CAAA;AAAA,EAC3D,OAAOP,KAAoC,CAAA;AAAA,EAC3CS,KAAc;AAAA;AAAA,EAEd,UAAU,CAACW,MAAkB;AAAA,EAC7B1B,GAAchB,GAAwB;AACrC,YAAQ,KAAK+B,IAAA;AAAA,MACZ,KAAK;AAAuB,aAAKY,GAAA,GAChC,KAAKZ,KAAc;AAAoB;AAAA,MACxC,KAAK;AACJ,YAAI,KAAK3B,GAAU,WAAW,KAAKqC,GAAoB;AAEvD,oBAAKV,KAAc,GACnB,KAAK,KAAK,QAAQ,IAAO,QAAQ,GACjC,KAAK,IAAI,SAAS,cAAc,CAAA,CAAE,GAC3B;AAAA;AAAA,MAER,KAAK;AAAqB,aAAKY,GAAA,GAC9B,KAAKZ,KAAc;AAAiB;AAAA,MACrC,KAAK;AAAkB,oBAAKY,GAAA,GAC3B,KAAK,KAAK,QAAQ,IAAO,QAAQ,GACjC,KAAK,IAAI,SAAS,cAAc,CAAA,CAAE,GAC3B;AAAA;AAAA,MAER,KAAK;AAAqB,aAAKA,GAAA,GAC9B,KAAKZ,KAAc;AAAoB;AAAA,MAExC;AAEC,YAAIa,EAAc5C,CAAK,KAAK1B,EAAegD;AAC1C,sBAAKS,KAAc,GACnB,KAAK,KAAK,QAAQ,IAAO,MAAM/B,CAAK,OAAO,GAC3C,KAAK,IAAI,SAAS,oBAAoB,CAAA,CAAE,GACxC,KAAK,IAAI,SAAS,oBAAoB,CAAA,CAAE,GACjC;AAGT;AACC,gBAAM6C,IAAKvE,EAAeuD,GAAa,KAAKC,GAAe,KAAK7B,EAAS,CAAC;AAC1E,cAAI,CAAE4C,EAAI;AAEV,gBAAM/D,IAAI+D,EAAG,KAAK3C,EAAQ;AAC1B,cAAI,CAAEpB,EAAG;AAIT,cAAIA,EAAE;AAAY,gBAAI,CAAE,KAAK,OAAO,MAAMA,EAAE,SAAS,EAAG;AAAA,qBAG/C,kBAAkBA,KAAK,EAAEA,EAAE,eAAe,EAAG;AACtD,gBAAMgE,IAAU,KAAKf,OAAgB;AACrC,eAAKA,KAAc,GACnB,KAAK,KAAK,QAAQ,IAAOe;AAAA;AAAA,aAEvBhE,EAAE,YAAY,OAAM,aAAY;AAAA,cAC/B,QAAQ;AACX,gBAAMiC,IAAO+B,IAAS,qBAAoB;AAC1C,eAAK,IAAI,SAAS/B,GAAM,CAAA,CAAE,GAC1B,KAAK,IAAI,SAASA,GAAM,CAAA,CAAE;AAAA,QAC3B;AACC,eAAO;AAAA,IAAA;AAGT,WAAO;AAAA,EACR;AAAA,EACA4B,KAAmB;AAClB,UAAM7D,IAAIR,EAAeuD,GAAakB,EAAM,KAAK9C,EAAS,CAAC,IAAI,KAAKC,EAAQ;AAE5E,IAAIpB,GAAG,gBAAc,EAAEA,EAAE;AAAA,EAC1B;AAAA,EAEAkD,KAA2E;AAC1E,UAAMgB,IAAQ,KAAKjB,OAAgB,IAAqB,IAAG,GACrDkB,IAAO,KAAKxB,GAAQ,OAAO,KAAKtB,KAAW,IAAG6C,CAAK,GAEnDE,IAAM,KAAKpB,GAAe,KAAK7B,EAAS,GACxCkD,IAAYP,EAAcK,CAAI,GAC9BG,IAAKD,IAAW,IAAIA,CAAS,MAAKF,GAGlCI,IAAK,OAAO,KAAK,IAAI,OAAO,mBAAmB,KAAK,IAAI;AAC9D,QAAI,KAAKlD,OAAc,EAAG,QAAO,CAAC,EAAC,IAAI+C,GAAK,IAAI,GAAG,KAAK,GAAG,IAAAE,GAAI,IAAAC,GAAG;AAElE,UAAMC,IAAM,KAAKC,GAAgB,KAAK9B,IAAS,KAAKtB,EAAS,GAEvDqD,IAAI,CAAC,EAAC,IAAIN,GAAK,IAAII,EAAI,IAAI,KAAKA,EAAI,QAAO,GAAG,IAAAF,GAAI,IAAAC,GAAG,GACrD3B,IAAM,KAAKtB,GAAU;AAC3B,QAAIsB,MAAQ,EAAG,QAAO8B;AAEtB,aAASC,IAAE/B,IAAK,GAAG+B,KAAG,GAAG,EAAEA,GAAG;AAC7B,YAAMC,IAAK,KAAKtD,GAAUqD,CAAC,GACrBE,IAAK,KAAKC,GAASF,EAAG,EAAE;AAC9B,UAAI,CAAEC,EAAI;AACV,YAAMpC,IAAMoC,EAAG,OAAOD,EAAG,MAAK,CAAC;AAC/B,UAAI,CAAEnC,EAAK;AACX,YAAMsC,IAAK,KAAKN,GAAgBI,GAAID,EAAG,GAAG,GAEpCpD,IAAWsC,EAAcrB,CAAG;AAClC,MAAAiC,EAAE,KAAK;AAAA,QACN,IAAK,KAAK1B,GAAe4B,EAAG,EAAE;AAAA,QAC9B,IAAKG,EAAG;AAAA,QACR,KAAMA,EAAG,QAAO;AAAA,QAChB,IAAKvD,IAAU,IAAIA,CAAQ,MAAKiB;AAAA,QAChC,IAAKmC,EAAG,MAAM,MAAM,EAAE,gBAAgB;AAAA,MAAA,CACtC;AAAA,IACF;AAEA,WAAOF;AAAA,EACR;AAAA;AAAA,EAGAnD,KAAgB,CAACyD,MAAqB;AAAA,EAAc;AAAA;AAAA,EAEpD,MAAM,KAAKxD,GAAkByD,GAAgC;AAC5D,UAAMC,IAAU,KAAK,KAAmB1D,CAAQ;AAEhD,QAAI,CAAE0D,EAAS,OAAM,UAAU1D,CAAQ;AAEvC,SAAKC,GAAW,MAAMwD,CAAI,GAC1B,KAAK1D,GAAcC,CAAQ;AAE3B,UAAM2D,IAAO,KAAK1D,GAAW;AAC7B,QAAI0D,EAAK,MAAM;AACd,YAAMC,IAAOD,EAAK,KAAK;AACvB,UAAI,CAAEC,KAAQA,EAAK,WAAW,GAAG,EAAG,OAAM;AAC1C,YAAMC,IAAI,KAAK,OAAO,MAAMD,CAAI,GAC1BE,IAAK,OAAOD,CAAC;AAEnB,UADIC,MAAO,UAAUA,MAAO,eACxB,CAAED,EAAG,QAAO;AAAA,IACjB;AAEA,QAAIE,IAAa,CAAA;AACjB,UAAMC,IAAqB,KAAKlE,GAAU,GAAG,EAAE,GAAG,SAASmE,EAAA,GAErD7C,IAAM,KAAKtB,GAAU;AAC3B,QAAI,KAAKG,GAAW,aAAa;AAChC,UAAImB,MAAQ,EAAG,OAAM;AACrB,MAAA2C,IAAO,EAAC,GAAGC,EAAA;AAAA,IACZ;AACA,IAAAD,EAAK,MAAM,IAAI/D;AA4Bf,eAAW,CAACkE,GAAQ,EAAC,KAAA9F,GAAK,KAAA+F,EAAA,CAAI,KAAK,OAAO,QAAQR,CAAI,GAAG;AACxD,UAAI7C,IAAI1C;AACR,UAAIA,EAAI,WAAW,GAAG,GAAG;AACxB,YAAIgD,MAAQ,EAAG,OAAM;AAErB,cAAMgD,IAA4BJ,EAAKlD,EAAE,MAAM,CAAC,CAAC;AACjD,YAAIsD,GAAK;AAAuB,UAAAL,EAAMG,CAAM,IAAIE;AAAK;AAAA,QAAQ;AAE7D,YAAID,MAAQ,UAAaA,MAAQ,OAAQ;AAEzC,QAAArD,IAAIqD;AAAA,MACL;AAIA,UADArD,IAAI,KAAK,OAAO,gBAAgBA,KAAK,EAAE,GACnCA,MAAM,aAAa;AAAuB,QAAAiD,EAAMG,CAAM,IAAIpD;AAAG;AAAA,MAAQ;AAEzE,MAAIqD,MAAQ,WACZrD,IAAI,KAAK,OAAO,gBAAgBqD,CAAG,GAC/BrD,MAAM,gBAAmCiD,EAAMG,CAAM,IAAIpD;AAAA,IAE9D;AAGA,QAAIuD,EAAQ,aAAa,KAAKC,GAAa,IAAItE,CAAQ,GAAG;AACzD,YAAM,EAAC,SAAAuE,GAAS,SAAAC,MAAW,QAAQ,cAAA;AACnC,MAAAH,EAAQ,UAAUI,GAAe,MAAKD,EAAQ,CAAC,GAAG,IAAO,MAAKA,EAAQ,CAAC,CAAC,GACxEH,EAAQ,MAAA,GACR,KAAK,IAAI,WAAA,GACT,MAAME;AAAA,IACP;AAEA,IAAI,KAAKG,GAAoB,IAAI1E,CAAQ,MACxC,KAAK2E,GAAQ,SAAA,GACbC,EAAS,aAAA;AAGV,UAAMC,IAAY,KAAKC,GAAiB9E,CAAQ;AAChD,WAAI6E,KACAE,EAAehB,GAAM,WAAW,KAAKiB,GAAchF,CAAQ,KAAK,EAAI,KACpE,KAAK2E,GAAQ,aAAmBE,EAAUd,CAAI,IAE3CL,EAAQK,CAAI;AAAA,EACpB;AAAA;AAAA;AAAA,EAGUO,yBAAmB,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAqB/B;AAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAyBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAaA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA;AAAA,IAEA;AAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAcA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgCA;AAAA;AAAA;AAAA,IAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAqBA;AAAA,EACQI,yBAA0B,IAAI;AAAA,IACtC;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,EAAA,CACA;AAAA;AAAA,EAEQI,KAA+C;AAAA,IACvD,IAAQ,OAAMF,EAAS,aAAA,GAAuB;AAAA;AAAA,IAE9C,UAAa,CAAApG,MAAI,KAAK,KAAK,SAASA,CAAC;AAAA;AAAA;AAAA,IAErC,MAAW,MAAK;AAAA;AAAA;AAAA;AAAA,IAGhB,IAAO,MAAK,KAAK,KAAK,WAAW,EAAC,KAAKyG,GAAQ;AAAA;AAAA,IAE/C,IAAO,CAAAzG,MAAI,KAAK,KAAK,WAAWA,CAAC;AAAA;AAAA;AAAA,IAEjC,IAAO,MAAK,KAAK,KAAK,WAAW,CAAA,CAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAKnC,OAAW,MAAK;AAAA;AAAA,EAAA;AAAA;AAAA,EAGRwG,KAA+C;AAAA;AAAA,IAEvD,IAAQ;AAAA;AAAA,IACR,UAAa;AAAA;AAAA,IACb,IAAQ;AAAA;AAAA,IACR,MAAU;AAAA;AAAA,IACV,SAAY;AAAA;AAAA,IACZ,QAAW;AAAA;AAAA,IACX,IAAQ;AAAA;AAAA,IACR,IAAQ;AAAA;AAAA,IACR,IAAQ;AAAA;AAAA,IACR,IAAQ;AAAA;AAAA,EAAA;AAAA,EAIVL;AAAA,EACAO;AAAA,EACA,YAAYC,GAAkBC,GAAwB;AACrD,SAAKT,KAAUQ,GACf,KAAKD,KAAUE;AAAA,EAChB;AAAA;AAAA,EAIA3G,GAAQsF,GAAY;AACnB,UAAM,EAAC,MAAAsB,MAAQtB;AACf,QAAI,CAAEsB,EAAM,OAAM;AAElB,QAAIC,IAAK;AACT,UAAMlE,IAAM,KAAKD,GAAQ;AACzB,WAAO,KAAKtB,KAAUuB,MACrBkE,IAAK,KAAKnE,GAAQ,OAAO,KAAKtB,EAAS,GACnCyF,MAAO,KAFe,EAAE,KAAKzF;AAEjC;AAED,WAAAkE,EAAK,OAAOuB,GACZvB,EAAK,OAAO,OACZ,KAAK,KAAK,IAAIA,CAAI,GAClB,KAAKlE,MAAa,GAClB,KAAKD,OAAa0F,EAAG,MAAM,KAAK,KAAK,CAAA,GAAI,QAElC;AAAA,EACR;AAAA;AAAA,EAIA5G,MAAc;AACb,QAAI,KAAKmB,OAAc;AACtB,qBAAQ,MAAM,+BAA+B,KAAKF,EAAS,eAAe,GAC1E,QAAQ,SAAA,GACD;AAGR,UAAMqD,IAAM,KAAKC,GAAgB,KAAK9B,IAAS,KAAKtB,EAAS,GACvD0F,IAAM,eAAe,KAAK5F,EAAS,SAAS,OAAOqD,EAAI,EAAE,CAAC,QAAQ,OAAOA,EAAI,QAAO,CAAC,CAAC;AAC5F,YAAQ,MAAM,mBAAmBuC,CAAG,EAAE;AACtC,UAAMnE,IAAM,KAAKtB,GAAU;AAC3B,QAAIsB,IAAM,GAAG;AACZ,cAAQ,KAAKmE,CAAG;AAChB,eAASpC,IAAE/B,IAAK,GAAG+B,KAAG,GAAG,EAAEA,GAAG;AAC7B,cAAMC,IAAK,KAAKtD,GAAUqD,CAAC,GACrBqC,IAAMpC,EAAG,MAAM,MAAM,GAErBqC,IAAgBD,IACWA,EAAK,MAAM,IACzC,QACGE,IAAUtC,EAAG,MAAM,MAAM,KAAK,IAC9BG,IAAK,KAAKN,GAAgB,KAAKK,GAASF,EAAG,EAAE,GAAGA,EAAG,GAAG;AAC5D,gBAAQ;AAAA,UACP,GAAG,OAAOhC,IAAK+B,CAAC,CAAC,cAAcC,EAAG,EAAE,SACnC,OAAOG,EAAG,EAAE,CAAC,QAAQ,OAAOA,EAAG,QAAO,CAAC,CACxC,GACCkC,IAAe,OAAMA,IAAe,WAAU,GAC/C,MAAMC,CAAO;AAAA,QAAA;AAAA,MAEf;AAAA,IACD;AACA,mBAAQ,SAAA,GAED;AAAA,EACR;AAAA,EACAzC,GAAgBI,GAAwBsC,GAAyD;AAChG,UAAMC,IAAM,EAAC,IAAI,GAAG,OAAO,GAAG,OAAO,EAAA;AACrC,QAAI,CAAEvC,EAAI,QAAOuC;AAEjB,QAAIzC,IAAIwC,IAAK;AACb,UAAME,IAAKD,EAAI,KAAKvC,EAAG,MAAMF,CAAC;AAC9B,WAAOE,EAAG,MAAMF,CAAC,MAAM0C,KAAI;AAC1B,YAAM5E,IAAMoC,EAAG,OAAOF,CAAC;AACvB,UAAI,CAAElC,EAAI,WAAW;AAAA,CAAI,GAAG;AAC3B,cAAMG,IAAMH,EAAI;AAEhB,QAAI2E,EAAI,QAAQ,MAAGA,EAAI,SAASxE,IAChCwE,EAAI,SAASxE;AAAA,MACd;AACA,UAAI,EAAE+B,IAAI,EAAG;AAAA,IACd;AAEA,WAAOyC;AAAA,EACR;AAAA;AAAA,EAIAjH,IAAaoF,GAAY;AACxB,UAAM,EAAC,SAAA+B,GAAS,WAAAC,EAAA,IAAahC;AAC7B,QAAI,CAAE+B,EAAS,OAAM;AAKrB,QAFA,KAAKE,KAAgB,WAAYF,CAAO,GAEpC,CAAE,KAAKE,IAAS;AACnB,UAAIjB,EAAehB,GAAM,YAAY,EAAI,EAAG,OAAM,WAAW+B,CAAO;AACpE,kBAAKE,KAAU,MAAK;AAAA,MAAc,GAC3B;AAAA,IACR;AAaA,QAXA,KAAK,cAAc,CAACC,MAAiB;AACpC,MAAI,KAAKC,OAAiB,KAAKvG,OAC9B,KAAKuG,KAAe,KAAKvG,IACzB,KAAKqG;AAAA,QACJ,KAAKG,IAAgB,KAAKxG,EAAS,MAAM,KAAKwB,GAAQ,OAAO,KAAK,EAAE;AAAA,MAAA,IAGtE,KAAKiF,GAAU,KAAKxG,IAAUqG,CAAI;AAAA,IACnC,GACA,KAAK,YAAY,EAAI,GAEjB,CAAEF,EAAW,QAAO;AAKxB,QAFA,KAAKK,KAAkB,WAAYL,CAAS,GAExC,CAAE,KAAKK,IAAW;AACrB,UAAIrB,EAAehB,GAAM,YAAY,EAAI,EAAG,OAAM,WAAWgC,CAAS;AACtE,WAAKK,KAAY,MAAK;AAAA,MAAc;AAAA,IACrC;AAEA,WAAO;AAAA,EACR;AAAA,EACAJ,KAAgC,MAAK;AAAA,EAAc;AAAA,EACnDI,KAAgD,MAAK;AAAA,EAAc;AAAA,EACnEF,KAAe;AAAA,EACfC,MAA2C,CAAA;AAAA,EAC3C,cAAc,CAACE,MAAkB;AAAA,EAAc;AAAA,EAG/CC,KAAe;AAAA,EACf,kBAAkB;AACjB,QAAI,KAAKzG,OAAc,GAAG;AACzB,cAAQ,MAAM,yCAAyC,KAAKF,EAAS,EAAE,GACvE,QAAQ,SAAA;AACR;AAAA,IACD;AAEA,QAAI4G,IAAI;AACR,aAASpD,IAAE,KAAKtD,KAAW,GAAGsD,KAAG,MAChCoD,IAAI,OAAO,KAAKpF,GAAQ,OAAOgC,CAAC,CAAC,IAAIoD,GAChC,GAAAA,EAAE,MAAM,KAAK,KAAK,CAAA,GAAI,UAAU,KAAKD,MAFP,EAAEnD;AAErC;AAED,UAAMD,IAAIqD,EAAE,MAAM;AAAA,CAAI,EAAE,MAAM,CAAC,KAAKD,EAAY,GAC1ClF,IAAM8B,EAAE;AACd,YAAQ,MAAM,uBAAuB,OAAO9B,CAAG,CAAC,oBAAoB,KAAKzB,EAAS,EAAE;AACpF,UAAM6G,IAAe,OAAO,KAAK5G,EAAQ,EAAE,QACrC2D,IAAK,KAAKN,GAAgB,KAAK9B,IAAS,KAAKtB,EAAS;AAC5D,aAASsD,IAAE,GAAGA,IAAE/B,GAAK,EAAE+B,GAAG;AACzB,YAAMsD,IAAK,KAAK7G,KAAUwB,IAAK+B,IAAG,GAC5BuD,IAAM,GAAG,OAAOD,CAAE,EAAE,SAASD,GAAc,GAAG,CAAC,QAC/C,IAAItD,EAAEC,CAAC,GACPwD,IAAO,EAAE,SAAS,KAAI,EAAE,MAAM,GAAG,EAAE,IAAG,MAAK;AACjD,MAAIxD,MAAM/B,IAAK,IAAG,QAAQ;AAAA,QACzBsF,IAAMC,EAAK,MAAM,GAAGpD,EAAG,KAAK,IAAG,OAAMoD,EAAK,MAAMpD,EAAG,KAAK;AAAA,QACxD;AAAA,QAA4C;AAAA,MAAA,IAExC,QAAQ,KAAKmD,IAAMC,GAAM,0CAA0C;AAAA,IACzE;AACA,YAAQ,SAAA;AAAA,EAET;AAAA,EAGAzG,KAAqB,CAAC,EAAE;AAAA;AAAA;AAAA,EAExBtB,MAAS;AACR,UAAM,IAAI,KAAKsB,GAAQ,CAAC;AACxB,QAAI,CAAE,EAAG,OAAM;AACf,QAAI,MAAM,GAAI,OAAM;AAEpB,gBAAKL,KAAY,GACjB,KAAKK,GAAQ,MAAA,GAEN;AAAA,EACR;AAAA;AAAA,EAEArB,IAAIkF,GAAY;AAEf,UAAM,EAAC,KAAA6C,MAAO7C;AACd,QAAI,CAAE6C,EAAK,OAAM;AACjB,QAAIA,EAAI,WAAW,GAAG,EAAG,OAAM;AAE/B,QAAIC,IAAW,GACXC,IAAQ,KAAK,OAAO,MAAMF,CAAG,IAAG,KAAK/G,KAAW;AACpD,UAAMkH,IAAO,KAAK5F,GAAQ,MAAM,KAAKtB,EAAS,GACxCmH,IAAM,KAAKpH,OAAYmH,KAAQ,MAAM,IACrC3F,IAAM,KAAKD,GAAQ;AACzB,WAAO,KAAKtB,KAAUuB,GAAK,EAAE,KAAKvB,IAAW;AAC5C,YAAM4G,IAAK,KAAKtF,GAAQ,MAAM,KAAKtB,EAAS;AAC5C,WAAKsB,GAAQ,MAAM,KAAKtB,EAAS,MAAM4G,KAAM,MAAM,KAAIO;AACvD,YAAM/F,IAAM,KAAKE,GAAQ,OAAO,KAAKtB,EAAS;AAE9C,UAAI,CAAEoB,EAAK;AAEX,YAAMC,IAAKD,EAAI,WAAW,CAAC;AAC3B,UAAIC,MAAO,IAAI;AAAC,aAAKtB,MAAYqB,EAAI;AAAQ;AAAA,MAAQ;AACrD,UAAIC,MAAO,GAAI;AAEf,YAAM,CAAClB,GAAUyD,CAAI,IAAIwD,EAAmBhG,CAAG;AAC/C,UAAI,EAAGjB,KAAY,KAAK,MAAO,OAAM,UAAUA,CAAQ;AAGvD,cAFA,KAAKC,GAAW,MAAMwD,CAAI,GAElBzD,GAAA;AAAA,QACR,KAAK;AAAM,YAAE6G;AAAU;AAAA,QAEvB,KAAK;AAAQ;AAEZ,gBADIA,IAAW,KACXC,IAAQ,GAAI;AAEhB,kBAAMI,IAAI,KAAKjH,GAAW,KAAK,KAAK;AACpC,gBAAI,CAAEiH,EAAG,OAAM;AACf,gBAAIA,EAAE,WAAW,GAAG,EAAG,OAAM;AAC7B,YAAI,KAAK,OAAO,MAAMA,CAAC,MAAGJ,IAAQ,KAAKjH,KAAW;AAAA,UACnD;AAAE;AAAA,QAEF,KAAK;AACJ,cAAIgH,IAAW,EAAG;AAClB,UAAIC,MAAU,OAAIA,IAAQ,KAAKjH,KAAW;AAC1C;AAAA,QAED,KAAK;AACJ,cAAIgH,IAAW,GAAG;AAAC,cAAEA;AAAU;AAAA,UAAK;AACpC,iBAAIC,MAAU,MACb,EAAE,KAAKjH,IACP,KAAKsB,GAAQ,MAAM,KAAKtB,EAAS,KAAMmH,MAGvC,KAAK9G,GAAQ,QAAQ,KAAKL,KAAW,CAAC,GACtC,KAAKA,KAAYiH,GACjB,KAAKlH,KAAW,KAAKuB,GAAQ,MAAM,KAAKtB,EAAS,IAG3C;AAAA,MAAA;AAAA,IAET;AACA,UAAM;AAAA,EAEP;AAAA;AAAA,EAIAf,IAAMiF,GAAY;AACjB,IAAMgB,EAAehB,GAAM,SAAS,EAAK,UAAQoD,GAAA;AAEjD,UAAM,EAAC,IAAAtG,MAAMkD;AACb,WAAIlD,KAAI,KAAKmB,GAAWnB,CAAE,GAC1B,KAAKuG,GAAS,EAAC,GAAGrD,KAAOsD,EAAa,cAAc,GAGhDtC,EAAehB,GAAM,qBAAqB,EAAK,KAAG,KAAK,KAAK,YAAY,EAAE,GACvE,KAAK1C,GAAUR,GAAIkD,EAAK,KAAK;AAAA,EACrC;AAAA,EACAqD,GAASrD,GAAYuD,GAAwB;AAC5C,UAAMtD,IAAqB;AAAA,MAC1B,GAAGD;AAAA,MACH,cAAcuD;AAAA,MACd,QAAU,KAAK,IAAI,QAAA;AAAA,MACnB,aAAc,KAAKpH,GAAQ;AAAA,IAAA;AAE5B,SAAKiB,GAAQ,MAAM,KAAKtB,EAAS,IAAI,KAAKD,IACpC,KAAK2H,OAAavD,EAAI,YAAY,IAAI,IAAI,KAAKwD,GAAA,IACrD,KAAK1H,GAAU,KAAK,IAAI2H,EAAU,KAAK9H,IAAW,KAAKE,IAAWmE,CAAG,CAAC,GACtE,KAAK9D,GAAQ,QAAQ,EAAE;AAAA,EACxB;AAAA;AAAA,EAGAnB,IAAMgF,GAAY;AACjB,WAAMgB,EAAehB,GAAM,SAAS,EAAI,UAAQoD,GAAA,GAEhD,KAAKjH,GAAQ,CAAC,IAAI,IACX,KAAKmB,GAAU0C,EAAK,IAAIA,EAAK,KAAK;AAAA,EAC1C;AAAA;AAAA,EAGA/E,IAAW+E,GAAY;AACtB,QAAIgB,EAAehB,GAAM,SAAS,EAAK,EAAG,MAAKjE,KAAY,CAAA;AAAA,aAClD,CAAE,KAAKA,GAAU,IAAA,EAAO,OAAM;AACvC,gBAAK0H,GAAA,GACL,KAAKtH,KAAU,CAAC,EAAE,GAClB,KAAK,IAAI,MAAMwH,GAAO,GAEf;AAAA,EACR;AAAA;AAAA,EAGAzI,GAAQ8E,GAAY;AACnB,UAAMX,IAAK,KAAKtD,GAAU,IAAA;AAC1B,QAAI,CAAEsD,EAAI,OAAM;AAChB,UAAMY,IAAMZ,EAAG;AACf,SAAKlD,KAAU,KAAKA,GAAQ,MAAM,CAAC8D,EAAI,WAAW,CAAC;AAEnD,UAAMwB,IAAMxB,EAAI,MAAM;AAEtB,IAAIwB,KAAK,KAAK,IAAI,MAAMA,CAAG;AAI3B,UAAMmC,IAAc3D,EAAI,YAAY;AACpC,IAAI2D,IAAa,KAAK,YAAY,OACjC,KAAKH,GAAA,GACEG,UAEEH,GAAA,GAENxD,EAAI,YAAY,OAAgB,cAAcA,EAAI,YAAY,CAAC;AAEnE,UAAM,EAAC,IAAAnD,GAAI,OAAA+G,EAAA,IAAS7D;AACpB,WAAIlD,KAAM+G,IAAc,KAAKvG,GAAUR,GAAI+G,CAAK,IAE5CxE,EAAG,MAAM,KAAKE,MAAW,KAAKuE,GAAYzE,CAAE,GAAU,MACnD,KAAK/B,GAAU+B,EAAG,IAAI,IAAIA,EAAG,GAAG;AAAA,EACxC;AAAA,EAEAmE,KAAa;AAAA,EACbC,KAAkB;AACjB,SAAKD,KAAa,IAClB,KAAK,YAAY,MAAK,KAAKO,GAAA;AAAA,EAC5B;AAAA,EAGAC,KAAa;AAAA,EACb1G,GAAUR,IAAK,IAAI+G,IAAQ,IAAIjC,IAAM,GAAY;AAahD,QAZIpF,EAAO,YAAU,QAAQ,IAAI,wBAAwBM,CAAE,QAAQ+G,CAAK,QAAQ,OAAOjC,CAAG,CAAC,IAAI,eAAe,EAAE,GAC5G,CAAE9E,KAAM,CAAE+G,KAAO,KAAK,KAAK,UAAU,yBAAyB,GAC9DA,KACGA,EAAM,WAAW,GAAG,KAAG,KAAK,KAAK,UAAU,uBAAuB,GACxE,KAAKG,KAAaH,GACZ,KAAKG,GAAW,WAAW,IAAI,WAAQlI,KAAY8F,OAGzD,KAAKoC,KAAa,IAClB,KAAKlI,KAAY8F,IAGd,CAAE9E;AAAK,kBAAK,YAAA,GAAsB;AACtC,QAAIA,EAAG,SAAS,GAAG,EAAG,OAAM;AAE5B,UAAMmH,IAAY,KAAKhG,GAAWnB,CAAE;AACpC,QAAIA,MAAO,KAAKlB;AAAY,kBAAK,YAAA,GAAsB;AACvD,SAAKA,KAAYkB;AACjB,UAAMwC,IAAK,KAAKC,GAASzC,CAAE;AAC3B,QAAIwC;AAAK,kBAAKlC,KAAUkC,GAAI,KAAK,YAAA,GAAsB;AAEvD,UAAM4E,IAAe,eAAepH,CAAE;AACtC,IAAAwD,EAAQ,UAAU4D,CAAY;AAC9B,QAAIC,IAAU;AACd,UAAMC,IAAM,IAAIC,EAAA;AAChB,QAAI;AACH,MAAAF,IAAU,KAAKlG,GAAWnB,IAAI,GAAG,GAEjCsH,EAAI,IAAI,EAAC,MAAMtH,IAAI,SAAS,KAAKmH,GAAU,GAC3CG,EAAI,IAAI,EAAC,MAAMtH,GAAI,KAAKqH,GAAQ;AAAA,IACjC,QAAQ;AAEP,MAAAC,EAAI,IAAI,EAAC,MAAMtH,GAAI,KAAKmH,GAAU;AAAA,IACnC;AACA,WAAAG,EAAI,IAAI,CAACE,GAAKC,MAAQ;AAErB,WAAK,IAAI,IAAID,EAAI,WAAWA,EAAI,IAAI,EAAE,KAAK,CAAAE,MAAI;AAC9C,QAAAF,EAAI,OAAOE,GACXD,EAAA;AAAA,MACD,CAAC,EACA,MAAM,CAACpB,MAAc;AACrB,aAAK,KAAK,UAAU,uBAAuBmB,EAAI,IAAI,IAAI,OAAOnB,CAAC,CAAC,IAAI,EAAK,GACzEoB,EAAA;AAAA,MACD,CAAC;AAAA,IACF,CAAC,EACA,KAAK,CAACE,GAAMC,MAAQ;AAEpB,UADApE,EAAQ,QAAQ4D,CAAY,GACxBC,GAAS;AACZ,cAAMQ,IAAkBD,EAAK5H,IAAI,OAAO,EAAG,MACrC8H,IAAkBF,EAAK5H,CAAE,EAAG,MAC5B+H,IAAkBF,EAAQ,MAAM;AAAA,CAAI,GACpCG,IAAkBF,EAAQ,MAAM;AAAA,CAAI,GACpCG,IAAOF,EAAM,QACbG,IAAOF,EAAM;AAEnB,iBAAS1F,IAAE,GAAGA,IAAE4F,KAAQ5F,IAAE2F,GAAM,EAAE3F,EAAG,CAAA0F,EAAM1F,CAAC,MAAMyF,EAAMzF,CAAC,KAAK;AAG9D,QAAAsF,EAAK5H,CAAE,EAAG,OAAOgI,EAAM,KAAK;AAAA,CAAI,GAEhC,OAAOJ,EAAK5H,IAAI,OAAO;AAAA,MACxB;AAGA,WAAK,YAAY,KAAKiH,IACtB,KAAKlI,KAAW,GAGhB,KAAKoJ,IAAeP,EAAK5H,CAAE,EAAG,IAAI,GAClC,KAAK,KAAK,aAAa,EAAE,GACzB,KAAK,YAAA;AAAA,IACN,CAAC,GAEM;AAAA,EACR;AAAA,EACQ,cAAoB;AAC3B,IAAIN,EAAO,YAAU,QAAQ,IAAI,2BAA2B,KAAKZ,EAAS,QAAQ,KAAKoI,EAAU,QAAQ,OAAO,KAAKlI,EAAS,CAAC,IAAI,eAAe,EAAE;AACpJ,UAAMrB,IAAI,KAAKyK,IAAY,KAAK9H,IAAS,EAAQ,KAAK,IAAI,OAAO,wBAAwB,GAAI,KAAKvB,IAAU,KAAKmI,IAAY,KAAKlI,EAAS;AAC3I,SAAKA,KAAYrB,EAAE,KACnB,KAAKoB,KAAWpB,EAAE;AAAA,EACnB;AAAA;AAAA,EAGA,YAAY,MAAK;AAAA;AAAA,EACjBsJ,KAA0B;AACzB,QAAI,KAAKoB,GAAA,EAAe,QAAO;AAE/B,SAAKC,IAAA,GAGL,KAAKhI,GAAQ,MAAM,KAAKtB,EAAS,MAAM,KAAKD;AAC5C,UAAMF,IAAQ,KAAKyB,GAAQ,OAAO,KAAKtB,EAAS;AAChD,gBAAKJ,GAAUC,CAAK,GACpB,EAAE,KAAKG,IAEAH;AAAA,EACR;AAAA,EACAD,KAAY,CAAC2C,MAAkB;AAAA,EAAc;AAAA,EAC7C8G,KAAuB;AACtB,WAAI,KAAKrJ,KAAY,KAAKsB,GAAQ,MAAY,MAC9C,KAAK,KAAK,UAAU,sBAAsB,GACnC;AAAA,EACR;AAAA,EAGSiI,MAAqB;AAAA,EACrBC,MAAyB;AAAA,EACzBC,KAAuB;AAAA,EAChCL,IAAY5F,GAAYkG,GAAkBC,GAAaC,GAAoB9D,GAAoB;AAE9F,UAAMvE,IAAMiC,EAAG,OAAO;AACtB,QAAIoD,IAAK+C,GAAKE,IAAYD;AAC1B,QAAI,CAAEC,GAAW;AAChB,UAAI,KAAKR,GAAA,EAAe,QAAO,EAAC,KAAAvD,GAAK,IAAAc,EAAA;AAErC,UAAMpD,EAAG,MAAMsC,CAAG;AAYb,QAAAc,IAAKpD,EAAG,MAAMsC,CAAG;AAAA,WAZD;AACpB,QAAAc,IAAK;AACL,iBAASkD,IAAE,GAAGA,IAAEhE,GAAK,EAAEgE,GAAG;AAEzB,UAAAtG,EAAG,MAAMsG,CAAC,MAAMlD;AAEhB,gBAAMxF,IAAMoC,EAAG,OAAOsG,CAAC;AACvB,UAAI1I,EAAI,WAAW;AAAA,CAAI,SAASA,EAAI,eACxBA,EAAI,MAAM,KAAK,KAAK,CAAA,GAAI;AAAA,QACrC;AACA,QAAAoC,EAAG,MAAMsC,CAAG,IAAIc;AAAA,MACjB;AAGA,aAAO,EAAC,KAAAd,GAAK,IAAAc,EAAA;AAAA,IACd;AAGA,IAAApD,EAAG,MAAM,CAAC,IAAI;AACd,UAAMuG,IAAcF,EAAU,MAAM,KAAKN,GAAiB;AAC1D,QAAIQ,GAAa;AAChB,MAAAF,IAAYE,EAAY,CAAC;AACzB,UAAIzG,IAAIwC;AACR,cAAQiE,EAAY,CAAC,GAAA;AAAA,QACrB,KAAK;AACJ,iBAAOvG,EAAG,OAAO,EAAEF,CAAC,MAAMuG;AACzB,YAAIvG,MAAM,KAAG0G,EAAS,QAAQ;AAAA,QAC3B,OAAOpD,CAAE,CAAC,UAAU8C,IAAS,UAAS,EAAE,SAASG,CAAS,YAAY,IAAI,GACzEH,KAAWlG,EAAG,OAAOF,CAAC,EAAG,OAAO,KAAKkG,GAAsB,IAAI,MAAIQ,EAAS,QAAQ,kCAAiCH,IAAW,WAAW,IAAI;AAEpJ,iBAAO,EAAC,KAAKvG,IAAG,GAAG,IAAIE,EAAG,MAAMF,CAAC,EAAA;AAAA;AAAA,QAElC,KAAK;AACJ,iBAAOE,EAAG,OAAO,EAAEF,CAAC,MAAMuG;AACzB,YAAIvG,MAAM/B,KAAKyI,EAAS,QAAQ,sBAAsB,OAAOpD,CAAE,CAAC,kBAAkBiD,CAAS,WAAW,IAAI,GACtGrG,EAAG,OAAOF,CAAC,EAAG,OAAO,KAAKmG,EAAoB,IAAI,MAAIO,EAAS,QAAQ,sBAAsB,OAAOpD,CAAE,CAAC,mBAAmBiD,CAAS,YAAY,IAAI;AAExJ,iBAAO,EAAC,KAAKvG,IAAG,GAAG,IAAIE,EAAG,MAAMF,CAAC,EAAA;AAAA;AAAA,QAElC;AACC,UAAA0G,EAAS,QAAQ,2BAA0BH,IAAW,aAAa,IAAI;AAAA,MAAA;AAAA,IAEzE;AAGA,IAAAjD,IAAK;AAEL,UAAMqD,IAAU,IAAI;AAAA,MACnB,MAAKJ,EAAU,WAAW,KAAK,KAAK,IAAG;AAAA,IAAA;AACxC,QAAIK,IAAY;AAChB,aAAS5G,IAAE,GAAGA,IAAE/B,GAAK,EAAE+B,GAAG;AAEzB,MAAAE,EAAG,MAAMF,CAAC,MAAMsD;AAEhB,YAAMxF,IAAMoC,EAAG,OAAOF,CAAC;AACvB,UAAI4G,GAAW;AACd,QAAI,KAAK5J,GAAK,gBAAgBc,CAAG,IAAG8I,IAAY,WACpC9I,EAAI,MAAM,KAAK,KAAK,CAAA,GAAI;AACpC;AAAA,MACD;AAEA,YAAMC,IAAKD,EAAI,WAAW,CAAC;AAC3B,UAAIC,MAAO,IAAI;AAAC,QAAAuF,KAAMxF,EAAI;AAAQ;AAAA,MAAQ;AAC1C,UAAIC,MAAO,IAAI;AACd,YAAID,EAAI,OAAO6I,CAAO,IAAI,WAAW,EAAC,KAAK3G,IAAG,GAAG,IAAAsD,EAAA;AACjD;AAAA,MACD;AACA,MAAIvF,MAAO,OAEXuF,MAAOxF,EAAI,MAAM,KAAK,KAAK,CAAA,GAAI,QAC3B,KAAKd,GAAK,aAAac,CAAG,MAAG8I,IAAY;AAAA,IAC9C;AACA,UAAIA,IAAiB,mCAErBF,EAAS,QAAQ,eAAeH,CAAS,WAAW,IAAI,GAClD;AAAA,EACP;AAAA,EAEApG,KAAqB,uBAAO,OAAO,IAAI;AAAA;AAAA,EACvC0F,IAAegB,GAAa;AAC3B,QAAItD,IAAM;AACV,QAAI;AACH,MAAAA,IAAM;AACN,YAAMuD,IAAM,KAAK9J,GAAK,cAAc6J,CAAG;AACvC,MAAAtD,IAAM,yCACN,KAAKwD,IAAwBD,CAAG,GAChC,KAAK3G,GAAS,KAAK3D,EAAS,IAAI,KAAKwB,KAAU8I;AAAA,IAChD,SACO/C,GAAG;AACT,MAAIA,aAAa,QAAOR,KAAO,UAAUQ,EAAE,OAAO,IAAIA,EAAE,IAAI,MACvDR,IAAM,OAAOQ,CAAC,GACnB,KAAK,KAAK,UAAUR,GAAK,EAAK;AAAA,IAC/B;AACA,SAAK,IAAI,gBAAgB,KAAK/G,EAAS;AAAA,EACxC;AAAA,EAEAkI,GAAYzE,GAAe;AAI1B,SAAKzD,KAAYyD,EAAG,IACpB,KAAKvD,KAAYuD,EAAG;AACpB,UAAMC,IAAK,KAAKC,GAAS,KAAK3D,EAAS;AACvC,IAAI0D,WAASlC,KAAUkC,IACvB,KAAKzD,KAAW,KAAKuB,GAAQ,MAAMiC,EAAG,GAAG;AAAA,EAE1C;AAAA,EAGS+G,MAAgB;AAAA,EAChBC,MAAiB;AAAA,EAC1BF,IAAwBD,GAAa;AACpC,aAAS9G,IAAE8G,EAAI,MAAK,GAAG9G,KAAG,GAAG,EAAEA,GAAG;AACjC,YAAMzD,IAAQuK,EAAI,OAAO9G,CAAC;AAC1B,UAAI,CAAE,KAAKgH,IAAc,KAAKzK,CAAK,EAAG;AAEtC,YAAM,CAACM,GAAUyD,CAAI,IAAIwD,EAAmBvH,CAAK;AACjD,WAAKO,GAAW,MAAMwD,CAAI;AAE1B,YAAM4G,IAAO,KAAKpK,GAAW,KAAK;AAClC,UAAI,CAAEoK,EAAM;AACZ,YAAM,EAAC,KAAKxJ,EAAA,IAAMwJ;AAClB,UAAI,CAAExJ,EAAG,SAAS,GAAG,EAAG;AAExB,MAAAoJ,EAAI,OAAO,OAAO9G,GAAG,GAAG,KAAM,OAAMzD,CAAK,GACzCuK,EAAI,MAAM,OAAO9G,GAAG,GAAG,KAAK,GAAG;AAE/B,YAAMmH,IAAMtK,MAAa,eACtBiC,EAAoB,MACpBA,EAAoB,IACjBiB,IAAI,KAAK,IAAI,UAAU,MAAKrC,EAAG,MAAM,GAAG,EAAE,IAAG,MAAMyJ,CAAG;AAC5D,iBAAWxJ,KAAKoC,GAAG;AAClB,cAAMqH,IAAK7K,EAAM;AAAA,UAChB,KAAK0K;AAAA,UACL,QAAO,mBAAmB3H,EAAM3B,EAAEwJ,CAAG,CAAE,CAAC;AAAA,QAAA;AAGzC,QAAAL,EAAI,OAAO,OAAO9G,GAAG,GAAGoH,CAAE,GAC1BN,EAAI,MAAM,OAAO9G,GAAG,GAAG,GAAG;AAAA,MAC3B;AAAA,IACD;AACA,IAAA8G,EAAI,MAAMA,EAAI,OAAO;AAAA,EACtB;AAAA,EAGAd,MAAgB;AACf,UAAMqB,IAAK,KAAK,IAAI,gBAAgB,KAAK7K,EAAS;AAGlD,QAAI,KAAKG,GAAU,SAAS,GAAG;AAAC,MAAA0K,EAAG,OAAO,KAAK3K,EAAS;AAAG;AAAA,IAAM;AAIjE,IAFA,KAAK4K,KAAYD,EAAG,OAAO,KAAK3K,EAAS,GACzC,KAAK,IAAI,aAAa,OAAO,qBAAqB,KAAK4K,EAAS,GAC5D,MAAKA,MAETD,EAAG,OAAO,KAAK3K,EAAS;AAAA,EAKzB;AAAA,EACA4K,KAAY;AAAA,EACZ,IAAI,WAAW;AAAC,WAAO,KAAKA;AAAA,EAAS;AAAA,EACrCtD,KAAe;AACd,SAAK,IAAI,cAAc,KAAKxH,EAAS,GAAG,MAAM,KAAKE,EAAS,GAC5D,KAAK4K,KAAY;AAAA,EAClB;AAAA,EACA,IAAI,eAAwB;AAC3B,QAAI5J,IAAK,KAAKlB,IACVgG,IAAM,KAAK9F,IACXuB,IAAM,KAAKD,GAAQ;AACvB,QAAI,KAAKrB,GAAU,SAAS,GAAG;AAC9B,YAAMsD,IAAK,KAAKtD,GAAU,CAAC;AAC3B,MAAAe,IAAMuC,EAAG,IACTuC,IAAMvC,EAAG;AACT,YAAMC,IAAK,KAAKC,GAASzC,CAAE;AAC3B,MAAIwC,UAAUA,EAAG;AAAA,IAClB;AACA,WAAIsC,MAAQvE,IAAY,KAEV,KAAK,IAAI,cAAcP,CAAE,GACzB,OAAO8E,CAAG,KAAK;AAAA,EAC9B;AAAA,EAGA,IAAI,aAAqB;AACxB,WAAO,KAAK8E,KAEX,KAAK,IAAI,sBACP,KAAK,IAAI,wBACT,IAEF,KAAK,IAAI,eACP,KAAK,IAAI,iBACT;AAAA,EAEJ;AAAA;AAAA,EAIAvL,IAAe6E,GAAY;AAC1B,gBAAK5D,GAAK,cAAc4D,GAAM,KAAK,MAAM,KAAK5C,IAAS,KAAKtB,EAAS,GAE9D;AAAA,EACR;AAAA;AAAA,EAGAV,IAAY4E,GAAY;AACvB,gBAAK5D,GAAK,WAAW4D,GAAM,KAAK,MAAM,KAAK5C,IAAS,KAAKtB,EAAS,GAE3D;AAAA,EACR;AAAA;AAAA;AAAA,EAIS6K,MAAiB;AAAA,EAC1BtL,IAAO2E,GAAY;AAClB,UAAM,EAAC,MAAAsB,MAAQtB;AACf,QAAI,CAAEsB,EAAM,OAAM;AAClB,QAAIA,KAAQ,KAAK,KAAM,OAAM,IAAIA,CAAI;AACrC,QAAI,KAAKqF,IAAe,KAAKrF,CAAI,EAAG,OAAM,IAAIA,CAAI;AAElD,UAAMoB,IAAK,KAAK7G,IACVwD,IAAK,IAAIqE,EAAU,KAAK9H,IAAW,KAAKE,EAAS;AAwBvD,SAvBA,KAAK8K,MAAc,MAAKtF,GAExB,KAAKvD,KAAa,IAAI,OAAO,OAAO,KAAK6I,EAAU,MAAM,GACzD,KAAK,KAAmBtF,CAAI,IAAI,CAAAuF,OAC/BA,EAAM,cAAc7G,EAAK,aACzB,KAAKqD,GAASwD,CAAK,GAInB,KAAK,IAAI,MAAM;AAAA,MACd,GAAGA;AAAA,MACH,kBAAkB,KAAK,UAAU,EAAC,MAAM7G,EAAK,MAAK;AAAA;AAAA,MAElD,6BAA6B,KAAKpE;AAAA,IAAA,CAClC,GACD,KAAK,IAAI,aAAa,MAAM,6BAA6B,KAAKA,EAAS,GAEvE,KAAKC,KAAW6G,GAChB,KAAKoB,GAAYzE,CAAE,GAEZ,KAGD,KAAKvD,KAAY,KAAKsB,GAAQ,KAAK,EAAE,KAAKtB,IAAW;AAE3D,WAAKsB,GAAQ,MAAM,KAAKtB,EAAS,MAAM,KAAKD;AAE5C,YAAMF,IAAQ,KAAKyB,GAAQ,OAAO,KAAKtB,EAAS;AAChD,UAAIH,EAAM,OAAO,KAAK4J,EAAoB,IAAI;AAC7C,iBAAE,KAAKzJ,IACA;AAGR,YAAMqB,IAAKxB,EAAM,WAAW,CAAC;AAC7B,MAAIwB,MAAO,KAAI,KAAKtB,MAAYF,EAAM,SAC7BwB,MAAO,OAAI,KAAKtB,OAAaF,EAAM,MAAM,KAAK,KAAK,CAAA,GAAI;AAAA,IACjE;AACA,UAAM,OAAO2F,CAAI;AAAA,EAClB;AAAA,EACAsF,KAAa;AAAA,EACb7I,KAAa;AAAA;AAAA;AAAA,EAIbzC,IAAM0E,GAAY;AACjB,QAAI,QAAQA,KAAS,WAAWA,EAAM,OAAM;AAE5C,UAAM8G,IAAQC,EAAW/G,GAAM,SAAS,CAAC,GACnCgH,IAAO,KAAK,IAAI,QAAQF,CAAK;AACnC,QAAI,CAAEE,EAAM,OAAM,SAAS,OAAOF,CAAK,CAAC;AAExC,WAAO,KAAK;AAAA,MAAa9G;AAAA,MAAMgH;AAAA,MAAM;AAAA;AAAA,IAAA;AAAA,EACtC;AAAA,EACA,aAAahH,GAAYgH,GAAcC,IAAqB,GAA4B;AACvF,SAAK,KAAK,YAAY,EAAE,GACxB,KAAK,IAAI,UAAUD,CAAI,GACvB,KAAK,IAAI,MAAMrD,GAAO,GACtB,KAAKxC,GAAQ,aAAA;AAEb,QAAI+F,IAAsB,CAAA;AAC1B,IAAID,MAAQ,MAAwBC,IAAK,KAAK,OAC7C;AAAA,MAAoBD,MAAQ;AAAA;AAAA,IAAA,IAEzBjG,EAAehB,GAAM,UAAU,EAAI,WAAQmH,KAAQ;AAAA,MACtD,OAAQ,KAAK,IAAI,UAAA;AAAA,MACjB,QAAS,EAAC,GAAGH,EAAK,OAAA;AAAA,MAClB,QAAS,CAAC,GAAGA,EAAK,MAAM;AAAA,IAAA;AAGzB,UAAMvM,IAAU;AAAA,MACf,SAAU,EAAQ,KAAK,IAAI,OAAO,8BAA8B;AAAA,MAChE,MAAO,OAAO,KAAK,IAAI,OAAO,2BAA2B,CAAC;AAAA,MAC1D,MAAO,OAAO,KAAK,IAAI,OAAO,2BAA2B,CAAC;AAAA,IAAA;AAE3D,SAAK,KAAK,OAAOA,CAAC,GAElB,KAAK0B,KAAU,CAAC,GAAG,KAAKgL,GAAM,MAAM,GACpC,KAAKpL,KAAY,CAAA,GACjB8E,EAAS,UAAA;AAET,UAAMf,IAAI,QAAQ,WAAW,CAAC,GAAGoH,GAAI,GAAG,KAAK/F,GAAQ,SAAS,KAAKgG,GAAM,MAAM,CAAC,CAAC,EAChF,KAAK,MAAK,KAAKhG,GAAQ,MAAM,EAAK,CAAC,GAC9B,EAAC,OAAAiG,GAAO,IAAAtK,EAAA,IAAMkD;AACpB,QAAIoH;AACH,aAAI5K,EAAO,YAAU,QAAQ,IAAI,2BAA2B,OAAO4K,CAAK,CAAC,eAAetK,KAAM,EAAE,IAAI,eAAe,EAAE,GACrHgD,EAAE,KAAK,MAAK;AACX,QAAM,KAAKxC,GAAUR,GAAI,IAAIsK,CAAK,KAAG,KAAK,KAAK,OAAA;AAAA,MAGhD,CAAC,EACA,MAAM,CAACjE,MAAc,QAAQ,MAAM,qBAAqBA,CAAC,CAAC,GACpD;AAGR,SAAKhC,GAAQ,MAAM,EAAI;AACvB,UAAMkG,IAAM,OAAO,KAAK,IAAI,OAAO,wBAAwB,CAAC,GACtDzF,IAAM,OAAO,KAAK,IAAI,OAAO,yBAAyB,CAAC;AAE7D,WAAO,KAAKrC,GAAS8H,CAAG;AACxB,UAAM,EAAC,OAAAxD,MAAS7D;AAChB,WAAAF,EAAE,KAAK+D,IAAO,MAAK;AAClB,WAAKjI,KAAYyL,GACjB,KAAKvL,KAAY8F,GACX,KAAK,KAAK,KAAK,EAAC,IAAA9E,GAAI,OAAA+G,EAAA,CAAM,KAAG,KAAK,KAAK,OAAA;AAAA,IAC9C,IACE,MAAK;AACN,MAAM,KAAKvG,GAAU+J,GAAK,IAAIzF,CAAG,KAAG,KAAK,KAAK,OAAA;AAAA,IAC/C,CAAC,EACA,MAAM,CAACuB,MAAc,QAAQ,MAAM,qBAAqBA,CAAC,CAAC,GAEpD;AAAA,EACR;AAAA;AAAA,EAGA5H,IAAeyE,GAAY;AAC1B,UAAMgH,IAAO,KAAK,IAAI,QAAQ,CAAC;AAC/B,QAAI,CAAEA,EAAM,QAAO;AAKnB,WAAO,KAAKzH,GAASb,EAAMsI,EAAK,MAAM,mBAAmB,CAAC,CAAC;AAG3D,UAAMM,IAAa,CAAA;AACnB,eAAWxK,KAAM,KAAKyC;AACrB,UAAI;AAAC,aAAKtB,GAAWnB,IAAI,GAAG;AAAA,MAAC,QACvB;AAAC,QAAAwK,EAAExK,CAAE,IAAI,KAAKyC,GAASzC,CAAE;AAAA,MAAE;AAElC,gBAAKyC,KAAW+H,GAEhBtH,EAAK,SAAS,IACP,KAAK;AAAA,MAAaA;AAAA,MAAMgH;AAAA,MAAM;AAAA;AAAA,IAAA;AAAA,EACtC;AAAA;AAAA,EAIAG,KAAgB;AAAA,IACf,OAAQI,EAAA;AAAA,IACR,QAAS,CAAA;AAAA,IACT,QAAS,CAAC,EAAE;AAAA,EAAA;AAAA,EAEb/L,KAAgB,MAAK;AACpB,UAAM,EAAC,IAAAsB,GAAI,KAAA8E,MAAO,KAAK,UAAA;AACvB,gBAAK,IAAI,aAAa,QAAQ,qBAAqB9E,CAAE,GACrD,KAAK,IAAI,aAAa,QAAQ,sBAAsB8E,CAAG,GACvD,KAAKuF,KAAQ;AAAA,MACZ,OAAQ,KAAK,IAAI,UAAA;AAAA,MACjB,QAAS,KAAKhG,GAAQ,OAAA;AAAA,MACtB,QAAS,KAAKhF,GAAQ,MAAM,KAAKJ,GAAU,MAAM;AAAA,IAAA,GAG3C;AAAA,EACR;AAAA,EACA,YAAuC;AAEtC,QADY,KAAKA,GAAU,WACf,EAAG,QAAO;AAAA,MACrB,IAAK,KAAKH;AAAA,MACV,KAAM,KAAKE;AAAA,IAAA;AAGZ,UAAMuD,IAAK,KAAKtD,GAAU,CAAC;AAC3B,WAAO;AAAA,MACN,IAAKsD,EAAG;AAAA,MACR,KAAMA,EAAG;AAAA,IAAA;AAAA,EAEX;AAAA,EACA,UAAkB;AAAC,WAAO,EAAC,GAAG,KAAK8H,GAAA;AAAA,EAAM;AAAA;AAAA;AAAA,EAGzC,aAAqE;AACpE,UAAM,EAAC,IAAArK,GAAI,KAAA8E,MAAO,KAAK,UAAA,GACjBtC,IAAK,KAAKC,GAASzC,CAAE,GACrBrC,IAAI,KAAKyE,GAAgBI,GAAIsC,CAAG;AACtC,WAAO,EAAC,IAAA9E,GAAI,GAAGrC,EAAA;AAAA,EAChB;AAAA;AAAA,EAGAgB,IAAMuE,GAAY;AACjB,QAAI,EAAG,WAAWA,GAAO,OAAM;AAC/B,UAAM8G,IAAQ,OAAO9G,EAAK,KAAK;AAE/B,WAAOA,EAAK,MAAM,GAClB,OAAOA,EAAK,OACZA,EAAK,OAAOA,EAAK,QAAQ,IACzB,KAAKmH,GAAM,OAAOnH,GAClB,KAAK,IAAI,QAAQ8G,GAAO,KAAKK,EAAK;AAElC,UAAMK,IAAS,OAAO,KAAK,IAAI,OAAO,yBAAyB,CAAC;AAChE,WAAIV,MAAUU,KAAQ,KAAK,IAAI,aAAa,OAAO,uBAAuBA,IAAQ,CAAC,GAE5E;AAAA,EACR;AAAA,EAGA,aAAaxH,GAAY;AACxB,QAAIlD,IAAK,IACL8E,IAAM;AAEV,UAAMvE,IAAM,KAAKtB,GAAU;AAC3B,QAAIiE,EAAK,eAAe3C,IAAM,GAAG;AAEhC,YAAMgC,IAAK,KAAKtD,GAAU,CAAC;AAC3B,MAAAe,IAAKuC,EAAG,IACRuC,IAAMvC,EAAG;AAAA,IACV;AAEC,MAAAvC,IAAK,KAAKlB,IACVgG,IAAM,KAAK9F;AAEZ,IAAAkE,EAAK,OAAO,IAAI,KAAKvC,GAAeX,CAAE;AACtC,UAAMoJ,IAAM,KAAK3G,GAASzC,CAAE,GACtB0C,IAAK,KAAKN,GAAgBgH,GAAKtE,CAAG;AACxC,IAAA5B,EAAK,KAAK,IAAKR,EAAG,IAClBQ,EAAK,QAAQ,IAAIR,EAAG,OACpBQ,EAAK,QAAQ,IAAIR,EAAG;AACpB,UAAMiI,IAAQ7F,IAAK;AACnB,IAAA5B,EAAK,UAAU,IAAGyH,GAClBzH,EAAK,QAAQ,IAAIkG,EAAI,OAAOuB,CAAK,GAEjC,KAAK,IAAI,SAAS,iBAAiBzH,CAAI;AAAA,EACxC;AAAA,EACA,QAAQ4B,GAAavH,GAAa;AAAC,SAAK+C,GAAQ,OAAOwE,CAAG,IAAIvH;AAAA,EAAG;AAElE;"}
|
|
1
|
+
{"version":3,"file":"ScriptIterator.js","names":["#scriptFn","#idxToken","#lineNum","#jumpWork","#grm","#alzTagArg","cfg: Config","hTag: T_HTag","main: T_Main","val: T_Variable","prpPrs: T_PropParser","sndMng: SoundMng","sys: SysBase","#let_ml","#dump_stack","#dump_script","#endif","#if","#call","#jump","#pop_stack","#return","#bracket2macro","#char2macro","#macro","#load","#reload_script","#record_place","#save","#dbgToken","#aCallStk","#procDebugtag","#aIfStk","#hHook","#isBreak_base","#regBreakPoint","#hFuncBP","#hFn2hLineBP","#cnvSnPath4Dbg","#breakState","#aStack","#isIdxOverLast","#idxDx4Dbg","#go_stepover","#script","#REGSTEPIN","#go_stepout","#cnvSnPath","#csDepth_macro_esc","#subHitCondition","#cnvIdx2lineCol","#hScript","hArg: TArg","csa: ICallStackArg","#setTag2ChIn","#setTag2FinishTrans","#evtMng","#hTag2SkipBypass","#hTag2CanSkip","#layMng","#fncSet","#fnLastBreak","#hScrCache4Dump","#fncBreak","#dumpErrLine","#eraseKidoku","#callSub","#resvToken","#clearResvToken","#jump_light","#nextToken_Proc","#skipLabel","scrBase: string","scrDiff: string","aBase: string[]","aDiff: string[]","#resolveScript","#seekScript","#errOverScr","#recordKidoku","#REG_NONAME_LABEL","#REG_TOKEN_MACRO_BEGIN","#REG_TOKEN_MACRO_END","#replaceScript_Wildcard","#REG_WILDCARD","#REG_WILDCARD2","#isKidoku","#REG_NG4MAC_NM","#strStepin","ap: Promise<void>[]","#mark","o: TArg","h: HScript"],"sources":["../src/sn/ScriptIterator.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\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 {argChk_Boolean, getFn, CmnLib, argChk_Num, RPN_COMP_CHIN} from './CmnLib';\nimport type {T_HTag, TArg, Script, TTag} from './Grammar';\nimport type {T_Main, T_Variable, T_Mark, T_PropParser, T_HEvt2Fnc} from './CmnInterface';\nimport {creSAVEDATA} from './CmnInterface';\nimport type {Config} from './Config';\nimport {CallStack, creCSArg, creMP, type ICallStackArg} from './CallStack';\nimport {Grammar, tagToken2Name_Args, tagToken2Name} from './Grammar';\nimport {AnalyzeTagArg} from './AnalyzeTagArg';\nimport {RubySpliter} from './RubySpliter';\nimport type {EventMng} from './EventMng';\nimport type {LayerMng} from './LayerMng';\nimport {DebugMng} from './DebugMng';\nimport type {SoundMng} from './SoundMng';\nimport type {SysBase} from './SysBase';\nimport {SEARCH_PATH_ARG_EXT} from './ConfigBase';\nimport {CmnTween} from './CmnTween';\nimport {Reading, ReadingState} from './Reading';\nimport {BUF_BGM} from './SndBuf';\n\nimport {Loader} from 'pixi.js';\n\ntype HScript = {\n\t[fn: string]: Script;\n}\n\ntype ISeek = {\n\tidx\t\t: number;\n\tln\t\t: number;\n}\n\n\nconst enum BreakState {Running, Wait, Break, Breaking, Step, Stepping, StepOuting, StepOut}\n\nconst enum SndProcOnLoad {\n\tMINIMAL_STOP,\n\tNO_TOUCH,\n\tALL_STOP_AND_PLAY,\n}\n\n\nexport class ScriptIterator {\n\t#script\t\t: Script\t= {aToken: [''], len: 1, aLNum: [1]};\n\n\t#scriptFn\t= '';\n\tget scriptFn() {return this.#scriptFn}\n\t#idxToken\t= 0;\n\tget idxToken() {return this.#idxToken}\n\tsubIdxToken() {--this.#idxToken}\n\t#lineNum\t= 0;\n\tget lineNum() {return this.#lineNum}\n\treadonly addLineNum\t= (len: number)=> {this.#lineNum += len};\n\tjumpJustBefore() {this.#jumpWork(this.#scriptFn, '', --this.#idxToken)}\n\t\t// 直前にジャンプ\n\n\n\t#aCallStk\t: CallStack[]\t= [];\t// FILOバッファ(push/pop)\n\n\treadonly\t#grm;\n\treadonly\t#alzTagArg\t= new AnalyzeTagArg;\n\n\n\t//MARK: コンストラクタ\n\tconstructor(private readonly cfg: Config, private readonly hTag: T_HTag, private readonly main: T_Main, private readonly val: T_Variable, private readonly prpPrs: T_PropParser, private readonly sndMng: SoundMng, private readonly sys: SysBase) {\n\t\t// 変数操作\n\t\thTag.let_ml\t\t= o=> this.#let_ml(o);\t// インラインテキスト代入\n\t\thTag.endlet_ml\t= ()=> false;\t\t\t// インラインテキスト代入終端\n\t\t\t// [if]ブロック内で【未定義のタグ[endlet_ml]です】エラーが発生する対策\n\n\t\t// デバッグ・その他\n\t\thTag.dump_stack\t= ()=> this.#dump_stack();\t// スタックのダンプ\n\t\thTag.dump_script= o=> this.#dump_script(o);\t// スクリプトのダンプ\n\n\t\t// 条件分岐\n\t\thTag.else\t\t=\t\t\t\t\t\t\t// その他ifブロック開始\n\t\thTag.elsif\t\t=\t\t\t\t\t\t\t// 別条件のifブロック開始\n\t\thTag.endif\t\t= ()=> this.#endif();\t\t// ifブロックの終端\n\t\thTag.if\t\t\t= o=> this.#if(o);\t\t\t// ifブロックの開始\n\n\t\t// ラベル・ジャンプ\n\t\t//hTag.button\t// LayerMng.ts内で定義\t\t// ボタンを表示\n\t\thTag.call\t\t= o=> this.#call(o);\t\t// サブルーチンコール\n\t\thTag.jump\t\t= o=> this.#jump(o);\t\t// シナリオジャンプ\n\t\t//hTag.page\t\t= // ReadState が担当に\t\t// ページ移動\n\t\thTag.pop_stack\t= o=> this.#pop_stack(o);\t// コールスタック破棄\n\t\thTag.return\t\t= o=> this.#return(o);\t\t// サブルーチンから戻る\n\n\t\t// マクロ\n\t\thTag.bracket2macro\t= o=> this.#bracket2macro(o);// 括弧マクロの定義\n\t\thTag.char2macro\t\t= o=> this.#char2macro(o);\t// 一文字マクロの定義\n\t\thTag.endmacro\t\t= o=> this.#return(o);\t\t// マクロ定義の終了\n\t\thTag.macro\t\t\t= o=> this.#macro(o);\t\t// マクロ定義の開始\n\n\t\t// しおり\n\t\t//hTag.copybookmark\t\t// Variable.ts内で定義\t// しおりの複写\n\t\t//hTag.erasebookmark\t// Variable.ts内で定義\t// しおりの消去\n\t\thTag.load\t\t\t= o=> this.#load(o);\t\t\t// しおりの読込\n\t\thTag.reload_script\t= o=> this.#reload_script(o);\t// スクリプト再読込\n\t\thTag.record_place\t= ()=> this.#record_place();\t// セーブポイント指定\n\t\thTag.save\t\t\t= o=> this.#save(o);\t\t\t// しおりの保存\n\n\n\t\tif (cfg.oCfg.debug.token) this.#dbgToken = token=> {if (token.trim() !== '') console.log(`🌱 トークン ${this.#scriptFn}:${String(this.#lineNum)} (i:${String(this.#idxToken)} cs:${String(this.#aCallStk.length)}) %c【${token}】`, 'background-color:#350;')};\n\t\tif (cfg.oCfg.debug.tag) this.#procDebugtag = tag_name=> console.log(`🌲 タグ解析 ${this.#scriptFn}:${String(this.#lineNum)} (i:${String(this.#idxToken)} cs:${String(this.#aCallStk.length)}) %c[${tag_name} %o]`, 'background-color:#30B;', this.#alzTagArg.hPrm);\n\n\t\tval.defTmp('const.sn.aIfStk.length', ()=> this.#aIfStk.length);\n\t\tval.defTmp('const.sn.vctCallStk.length', ()=> this.#aCallStk.length);\n\n\t\tthis.#grm = new Grammar(cfg);\n\n\t\tconst ce = cfg.oCfg.init.escape;\n\t\tthis.#grm.setEscape(ce);\n\t\tRubySpliter.setEscape(ce);\n\n\t\tif (CmnLib.isDbg) {\n\t\t\t// sys.addHook((type, o)=> (<[nm: string]: ((o: any)=> void)>this.#hHook)[type]?.(o));\n\t\t\tconst _h = this.#hHook;\n\t\t\t// type t = keyof typeof this.#hHook;\n\t\t\t// sys.addHook((type: keyof typeof _h, o)=> this.#hHook[ type ]?.(o));\t// x\n\t\t\tsys.addHook((type, o)=> this.#hHook[ <keyof typeof _h>type ]?.(o));\n\t\t\t// sys.addHook((type, o)=> this.#hHook[type]?.(o));\n\t\t\tthis.isBreak = token=> this.#isBreak_base(token);\n\n\t\t\tconst fnc = ()=> this.analyzeInit();\n\t\t\tthis.analyzeInit = ()=> {\n\t\t\t\tthis.analyzeInit = ()=> { /* empty */ };\n\t\t\t\tthis.sys.send2Dbg('hi', {});\n\t\t\t};\n\t\t\tthis.#hHook.auth = o=> {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\t\tconst hLineBP = o.hBreakpoint.hFn2hLineBP;\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\t\t\t\tfor (const [fn, v] of Object.entries(hLineBP)) this.#regBreakPoint(fn, <any>v);\n\n\t\t\t\tScriptIterator.#hFuncBP = {};\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\t\tfor (const v of o.hBreakpoint.aFunc) {\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\t\t\tScriptIterator.#hFuncBP[v.name] = 1;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\t\tif (o.stopOnEntry) {\n\t\t\t\t\tlet tkn;\n\t\t\t\t\t// eslint-disable-next-line no-cond-assign\n\t\t\t\t\twhile (tkn = this.nextToken()) {\n\t\t\t\t\t\t// if (! tkn) break;\t// 初期化前に終了した場合向け\n\n\t\t\t\t\t\tconst uc = tkn.charCodeAt(0);\t// TokenTopUnicode\n\t\t\t\t\t\tif (uc === 91) break;\t// [ タグ開始\n\t\t\t\t\t\tif (uc === 38) break;\t// & 変数操作・変数表示\n\t\t\t\t\t\tif (uc === 42 && tkn.length === 1) break;\t// 単文字の *\n\t\t\t\t\t\tif (uc === 10) this.#lineNum += tkn.length;\t// \\n 改行\n\t\t\t\t\t}\n\t\t\t\t\tthis.sys.callHook('stopOnEntry', {});\n\t\t\t\t\tthis.analyzeInit = fnc;\n\t\t\t\t\tthis.analyzeInit();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.noticeWait = ()=> {\n\t\t\t\t\t\tthis.noticeWait = ()=> { /* empty */ };\n\t\t\t\t\t\tthis.sys.callHook('stopOnEntry', {});\t// sn全体へ通知\n\n//\t\t\t\t\t\tthis.sys.callHook('continue', {});\t// sn全体へ通知\n//\t\t\t\t\t\tthis.breakState = BreakState.breaking;\n\t\t\t\t\t};\n\n\t\t\t\t\tthis.analyzeInit = fnc;\n\t\t\t\t\tthis.analyzeInit();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse this.recodeDesign = ()=> { /* empty */ };\n\t}\n\tnoticeWait = ()=> { /* empty */ };\n\t#regBreakPoint(fn: string, o: {[ln: number]: any}) {\n\t\tScriptIterator.#hFn2hLineBP[this.#cnvSnPath4Dbg(fn)] = o;\n\t}\n\n\tdestroy() {this.isBreak = this.#record_place = ()=> false}\n\n\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\treadonly #hHook\t: {[nm: string]: (o: any)=> void;} = {\n\t\tauth: ()=> { /* empty */ }, // constructorでセット\n\t\t//launch:\t// ここでは冒頭停止に間に合わないのでanalyzeInit()で\n\t\tdisconnect: ()=> {\n\t\t\tScriptIterator.#hFn2hLineBP = {};\n\t\t\tScriptIterator.#hFuncBP = {};\n\t\t\tthis.isBreak = ()=> false;\n\n\t\t\tthis.#hHook.continue!({});\n\t\t\tthis.#breakState = BreakState.Running;\n\t\t},\n\t\trestart: ()=> {this.isBreak = ()=> false},\n\n\t\t// ブレークポイント登録\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n\t\tadd_break: o=> this.#regBreakPoint(o.fn, o.o),\n\t\tdata_break: o=> {\n\t\t\tif (this.#breakState !== BreakState.Running) return;\n\n\t\t\tthis.#breakState = BreakState.Wait;\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\tthis.main.setLoop(false, `変数 ${String(o.dataId)}【${String(o.old_v)}】→【${String(o.new_v)}】データブレーク`);\n\t\t\tthis.sys.callHook('stopOnDataBreakpoint', {});\t// sn全体へ通知\n\t\t\tthis.sys.send2Dbg('stopOnDataBreakpoint', {});\n\t\t},\n\t\tset_func_break: o=> {\n\t\t\tScriptIterator.#hFuncBP = {};\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\tfor (const v of o.a) ScriptIterator.#hFuncBP[v.name] = 1;\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n\t\t\tthis.sys.send2Dbg(o.ri, {});\n\t\t},\n\n\t\t// 情報問い合わせ系\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n\t\tstack: o=> this.sys.send2Dbg(o.ri, {a: this.#aStack()}),\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n\t\teval: o=> {this.sys.send2Dbg(o.ri, {v: this.prpPrs.parse(o.txt)})},\n\n\t\t// デバッガからの操作系\n\t\tcontinue: ()=> {\n\t\t\tif (this.#isIdxOverLast()) return;\n\n\t\t\tthis.#idxToken -= this.#idxDx4Dbg;\n\t\t\tthis.#breakState = BreakState.Breaking;\n\t\t\tthis.main.setLoop(true);\n\t\t\tthis.main.resume();\t// jumpループ後などで停止している場合があるので\n\t\t},\n\t\tstepover: o=> this.#go_stepover(o),\n\t\tstepin: ()=> {\n\t\t\tif (this.#isIdxOverLast()) return;\n\n\t\t\tconst tkn = this.#script.aToken[this.#idxToken -this.#idxDx4Dbg];\n\t\t\tthis.sys.callHook(`stopOnStep${this.#REGSTEPIN.test(tkn ?? '') ?'In' :''}`, {});\t// sn全体へ通知\n\n\t\t\tthis.#idxToken -= this.#idxDx4Dbg;\n\t\t\tthis.#breakState = this.#breakState === BreakState.Wait\n\t\t\t\t? BreakState.Step\n\t\t\t\t: BreakState.Stepping;\n\t\t\tthis.main.setLoop(true);\n\t\t\tthis.main.resume();\t// jumpループ後などで停止している場合があるので\n\t\t},\n\t\tstepout: o=> {\n\t\t\tif (this.#isIdxOverLast()) return;\n\n\t\t\tif (this.#aCallStk.length > 0) this.#go_stepout(true);\n\t\t\telse this.#go_stepover(o);\n\t\t},\n\t\tpause: ()=> {\n\t\t\tthis.#breakState = BreakState.Step;\n\t\t\tthis.main.setLoop(false, '一時停止');\n\t\t\tthis.sys.send2Dbg('stopOnStep', {});\n\t\t},\n\t\tstopOnEntry: ()=> {\n\t\t\tthis.#breakState = BreakState.Step;\n\t\t\tthis.main.setLoop(false, '一時停止');\n\t\t\tthis.sys.send2Dbg('stopOnEntry', {});\n\t\t},\n\t} as const;\n\treadonly #cnvSnPath = (fn: string)=> this.cfg.searchPath(fn, SEARCH_PATH_ARG_EXT.SCRIPT);\n\treadonly #cnvSnPath4Dbg = (fn: string)=>\n\t\tthis.sys.pathBaseCnvSnPath4Dbg + this.#cnvSnPath(fn);\n\t#go_stepover(o: any) {\n\t\tif (this.#isIdxOverLast()) return;\n\n\t\tconst tkn = this.#script.aToken[this.#idxToken -this.#idxDx4Dbg];\n\t\tif (this.#REGSTEPIN.test(tkn ?? '')) this.#go_stepout(false);\n\t\telse {\n\t\t\tthis.sys.callHook('stopOnStep', {});\t// sn全体へ通知\n\t\t\tthis.#hHook.stepin!(o);\n\t\t}\n\t}\n\t#go_stepout(out: boolean) {\n\t\tthis.sys.callHook(`stopOnStep${out ?'Out' :''}`, {});\t// sn全体へ通知\n\t\tthis.#csDepth_macro_esc = this.#aCallStk.length -(out ?1 :0);\n\t\tthis.#idxToken -= this.#idxDx4Dbg;\n\t\tthis.#breakState = out ?BreakState.StepOut :BreakState.StepOuting;\n\t\tthis.main.setLoop(true);\n\t\tthis.main.resume();\t// jumpループ後などで停止している場合があるので\n\t}\n\t#csDepth_macro_esc\t= 0;\n\tget #idxDx4Dbg() {\n\t\treturn this.#breakState === BreakState.Break\n\t\t\t|| this.#breakState === BreakState.Step ?1 :0\n\t}\n\t#isIdxOverLast(): boolean {\n\t\tif (this.#idxToken < this.#script.len) return false;\n\t\tthis.sys.callHook('stopOnEntry', {});\t// sn全体へ通知\n\t\tthis.main.setLoop(false, 'スクリプト終端です isIdxOverLast');\n\t\treturn true;\n\t}\n\n\t// reload 再生成 Main に受け渡すため static\n\tstatic\t#hFn2hLineBP: {[fn: string]: {[ln: number]: any}} = {};\n\tstatic\t#hFuncBP: {[tag_name: string]: 1} = {};\n\t#breakState\t= BreakState.Running;\n\t\t// https://raw.githubusercontent.com/famibee/SKYNovel-vscode-extension/master/src/doc/BreakStateSMD.pu\n\tisBreak = (_token: string)=> false;\n\t#isBreak_base(token: string): boolean {\n\t\tswitch (this.#breakState) {\n\t\t\tcase BreakState.StepOuting:\tthis.#subHitCondition();\n\t\t\t\tthis.#breakState = BreakState.StepOut;\tbreak;\n\t\t\tcase BreakState.StepOut:\n\t\t\t\tif (this.#aCallStk.length !== this.#csDepth_macro_esc) break;\n\n\t\t\t\tthis.#breakState = BreakState.Step;\n\t\t\t\tthis.main.setLoop(false, 'ステップ実行');\n\t\t\t\tthis.sys.send2Dbg('stopOnStep', {});\n\t\t\t\treturn true;\t// タグを実行せず、直前停止\n\n\t\t\tcase BreakState.Stepping:\tthis.#subHitCondition();\n\t\t\t\tthis.#breakState = BreakState.Step;\tbreak;\n\t\t\tcase BreakState.Step:\t\tthis.#subHitCondition();\n\t\t\t\tthis.main.setLoop(false, 'ステップ実行');\n\t\t\t\tthis.sys.send2Dbg('stopOnStep', {});\n\t\t\t\treturn true;\t// タグを実行せず、直前停止\n\n\t\t\tcase BreakState.Breaking:\tthis.#subHitCondition();\n\t\t\t\tthis.#breakState = BreakState.Running;\tbreak;\n\n\t\t\tdefault:\n\t\t\t{\t// 関数ブレークポイント\n\t\t\t\tif (tagToken2Name(token) in ScriptIterator.#hFuncBP) {\n\t\t\t\t\tthis.#breakState = BreakState.Break;\n\t\t\t\t\tthis.main.setLoop(false, `関数 ${token} ブレーク`);\n\t\t\t\t\tthis.sys.callHook('stopOnBreakpoint', {});\t// sn全体へ通知\n\t\t\t\t\tthis.sys.send2Dbg('stopOnBreakpoint', {});\n\t\t\t\t\treturn true;\t// タグを実行せず、直前停止\n\t\t\t\t}\n\t\t\t}\n\t\t\t{\t// ブレークポイント\n\t\t\t\tconst bp = ScriptIterator.#hFn2hLineBP[this.#cnvSnPath4Dbg(this.#scriptFn)];\n\t\t\t\tif (! bp) break;\n\n\t\t\t\tconst o = bp[this.#lineNum];\n\t\t\t\tif (! o) break;\n\n//console.log(`fn:ScriptIterator.ts line:145 👺 【bs:${this.#breakState} idx:${this.#idxToken} ln:${this.#lineNum} tkn:${this.#script.aToken[this.#idxToken -1]}:】 o:%o`, o);\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n\t\t\t\tif (o.condition) {if (! this.prpPrs.parse(o.condition)) break}\n\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\t\telse if ('hitCondition' in o && --o.hitCondition > 0) break;\n\t\t\t\tconst isBreak = this.#breakState === BreakState.Running;\n\t\t\t\tthis.#breakState = BreakState.Break;\n\t\t\t\tthis.main.setLoop(false, isBreak ?\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\t\t\t(o.condition ? '条件' :'ヒットカウント') +'ブレーク'\n\t\t\t\t\t :'ステップ実行');\n\t\t\t\tconst type = isBreak ?'stopOnBreakpoint' :'stopOnStep';\n\t\t\t\tthis.sys.callHook(type, {});\t// sn全体へ通知\n\t\t\t\tthis.sys.send2Dbg(type, {});\n\t\t\t}\n\t\t\t\treturn true;\t// タグを実行せず、直前停止\n\t\t}\n\n\t\treturn false;\t// no break、タグを実行\n\t}\n\t#subHitCondition() {\t// step実行中でbreakしないがヒットカウントだけ減算\n\t\tconst o = ScriptIterator.#hFn2hLineBP[getFn(this.#scriptFn)]?.[this.#lineNum];\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\tif (o?.hitCondition) --o.hitCondition;\n\t}\n\n\t#aStack(): {fn: string, ln: number, col: number, nm: string, ma: string}[] {\n\t\tconst idx_n = this.#breakState === BreakState.Breaking ?1 :0;\n\t\tconst tkn0 = this.#script.aToken[this.#idxToken -1 +idx_n]!;\n\n\t\tconst fn0 = this.#cnvSnPath4Dbg(this.#scriptFn);\n\t\tconst tag_name0 = tagToken2Name(tkn0);\n\t\tconst nm = tag_name0 ?`[${tag_name0}]` :tkn0;\n//console.log(`fn:ScriptIterator.ts aStack breakState:${this.#breakState} idx:${this.#idxToken -1} idx_n:${idx_n} tkn0:${tkn0}: fn0:${fn0} nm:${nm} tkn02:${this.#script.aToken[this.#idxToken -1]}: +tkn02:${this.#script.aToken[this.#idxToken]}:`);\n//console.log(`fn:ScriptIterator.ts a:%o anum:%o`, this.script.aToken, this.script.aLNum);\n\t\tconst ma = String(this.val.getVal('mp:const.sn.macro') ?? '{}');\n\t\tif (this.#idxToken === 0) return [{fn: fn0, ln: 1, col: 1, nm, ma}];\n\n\t\tconst lc0 = this.#cnvIdx2lineCol(this.#script, this.#idxToken);// -1不要\n//console.log(`fn:ScriptIterator.ts ln:${lc0.ln} col:${lc0.col_s} col2:${this.#script.aLNum[this.#idxToken -1]}`);\n\t\tconst a = [{fn: fn0, ln: lc0.ln, col: lc0.col_s +1, nm, ma}];\n\t\tconst len = this.#aCallStk.length;\n\t\tif (len === 0) return a;\n\n\t\tfor (let i=len -1; i>=0; --i) {\n\t\t\tconst cs = this.#aCallStk[i]!;\n\t\t\tconst st = this.#hScript[cs.fn];\n\t\t\tif (! st) continue;\n\t\t\tconst tkn = st.aToken[cs.idx -1];\n\t\t\tif (! tkn) continue;\n\t\t\tconst lc = this.#cnvIdx2lineCol(st, cs.idx);\t// -1不要\n\n\t\t\tconst tag_name = tagToken2Name(tkn);\n\t\t\ta.push({\n\t\t\t\tfn\t: this.#cnvSnPath4Dbg(cs.fn),\n\t\t\t\tln\t: lc.ln,\n\t\t\t\tcol\t: lc.col_s +1,\n\t\t\t\tnm\t: tag_name ?`[${tag_name}]` :tkn,\n\t\t\t\tma\t: cs.csArg[':hMp']['const.sn.macro'],\n\t\t\t});\n\t\t}\n\n\t\treturn a;\n\t}\n\n\t// result = true : waitする resume()で再開\n\t#procDebugtag\t= (_tag_name: string)=> { /* empty */ };\n\t//MARK: タグ解析\n\tasync\tタグ解析(tag_name: string, args: string): Promise<boolean> {\n\t\tconst tag_fnc = this.hTag[<keyof T_HTag>tag_name];\n\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\tif (! tag_fnc) throw `未定義のタグ【${tag_name}】です`;\n\n\t\tthis.#alzTagArg.parse(args);\n\t\tthis.#procDebugtag(tag_name);\n\n\t\tconst hPrm = this.#alzTagArg.hPrm;\n\t\tif (hPrm.cond) {\n\t\t\tconst cond = hPrm.cond.val;\n\t\t\tif (! cond || cond.startsWith('&')) throw '属性condは「&」が不要です';\n\t\t\tconst p = this.prpPrs.parse(cond);\n\t\t\tconst ps = String(p);\n\t\t\tif (ps === 'null' || ps === 'undefined') return false;\n\t\t\tif (! p) return false;\n\t\t}\n\n\t\tlet hArg: TArg = {};\n\t\tconst csa: ICallStackArg = this.#aCallStk.at(-1)?.csArg ?? creCSArg();\n\n\t\tconst len = this.#aCallStk.length;\n\t\tif (this.#alzTagArg.isKomeParam) {\n\t\t\tif (len === 0) throw '属性「*」はマクロのみ有効です';\n\t\t\thArg = {...csa};\n\t\t}\n\t\thArg[':タグ名'] = tag_name;\n\t// #region タグ位置のコールスタック情報を埋め込むコード(デバッグ用)\n\t/*\t{\n\t\t\tconst lc0 = this.#cnvIdx2lineCol(this.#script, this.#idxToken);\n\t\t\tlet now = `存在位置 fn:${this.#scriptFn} line:${lc0.ln} col:${lc0.col_s +1}`;\n\t\t\thArg[':path'] = now;\n\t\t\tconst len = this.#aCallStk.length;\n\t\t\tif (len > 0) {\n\t\t\t\tfor (let i=len -1; i>=0; --i) {\n\t\t\t\t\tconst cs = this.#aCallStk[i];\n\t\t\t\t\tconst hMp = cs.csArg[':hMp'];\n\t\t\t\t\tconst from_macro_nm = hMp ?hMp[':タグ名'] :undefined;\n\t\t\t\t\tconst call_nm = cs.csArg[':タグ名'] ?? '';\n\t\t\t\t\tconst lc = this.#cnvIdx2lineCol(this.#hScript[cs.fn], cs.idx);\n\t\t\t\t\tnow += ` <- (${len -i}) fn:${cs.fn} line:${lc.ln\n\t\t\t\t\t\t} col:${lc.col_s +1\n\t\t\t\t\t\t}`+ (from_macro_nm ?'(['+ from_macro_nm +']マクロ内)' :' ')+\n\t\t\t\t\t\t`で [${call_nm} ...]をコール`;\n\t\t\t\t}\n\t\t\t}\n\t\t}*/\n\t// #endregion\n\t// #region タグ位置情報を埋め込むコード(デバッグ用)\n//\t\thArg[':path'] = this.#scriptFn;\n//\t\thArg[':ln'] = this.#lineNum;\n\t// #endregion\n\t\t// valやdefの値について。null はありえない。'null'や'undefined' はありえる。\n\t\t// 省略時以外で undefined はない。a=undefined と書いても 'undefined' になる\n\t\tfor (const [arg_nm, {val, def}] of Object.entries(hPrm)) {\n\t\t\tlet v = val;\n\t\t\tif (val.startsWith('%')) {\n\t\t\t\tif (len === 0) throw '属性「%」はマクロ定義内でのみ使用できます(そのマクロの引数を示す簡略文法であるため)';\n\n\t\t\t\tconst mac = (<{[nm: string]: any}>csa)[v.slice(1)];\n\t\t\t\tif (mac) {(<{[nm: string]: any}>hArg)[arg_nm] = mac; continue}\n\n\t\t\t\tif (def === undefined || def === 'null') continue;\n\t\t\t\t\t// defの'null'指定。%変数が無い場合、タグやマクロに属性を渡さない\n\t\t\t\tv = def;\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\t\tv = this.prpPrs.getValAmpersand(v ?? '');\n\t\t\tif (v !== 'undefined') {(<{[nm: string]: any}>hArg)[arg_nm] = v; continue}\n\n\t\t\tif (def === undefined) continue;\n\t\t\tv = this.prpPrs.getValAmpersand(def);\n\t\t\tif (v !== 'undefined') (<{[nm: string]: any}>hArg)[arg_nm] = v;\n\t\t\t\t// 存在しない値の場合、属性を渡さない\n\t\t}\n\n\t\t// (一部タグの処理直前に)文字出現処理を終わらせる\n\t\tif (Reading.needGoTxt && this.#setTag2ChIn.has(tag_name)) {\n\t\t\tconst {promise, resolve} = Promise.withResolvers();\n\t\t\tReading.beginProc(RPN_COMP_CHIN, ()=> resolve(0), false, ()=> resolve(0));\n\t\t\tReading.goTxt();\n\t\t\tthis.val.saveKidoku();\n\t\t\tawait promise;\n\t\t}\n\t\t// (一部タグの処理直前に)画面トランジションを止める\n\t\tif (this.#setTag2FinishTrans.has(tag_name)) {\n\t\t\tthis.#evtMng.hideHint();\n\t\t\tCmnTween.stopEndTrans();\n\t\t}\n\t\t// キー押しっぱなしスキップで処理せずスルーする\n\t\tconst fncBypass = this.#hTag2SkipBypass[tag_name];\n\t\tif (fncBypass\n\t\t\t&& argChk_Boolean(hArg, 'canskip', this.#hTag2CanSkip[tag_name] ?? true)\n\t\t\t&& this.#evtMng.isSkipping) return fncBypass(hArg);\n\n\t\treturn tag_fnc(hArg);\n\t}\n\t\t// 文字出現演出を待つタグ\n\t\t//\tここで列挙せずタグ処理で文字表示を始めたい場合、goTxt()すること\n\t\treadonly\t#setTag2ChIn = new Set([\n\t\t// 変数操作\n\t\t\t// 'clearsysvar',\t// システム変数の全消去\n\t\t\t// 'clearvar',\t\t// ゲーム変数の全消去\n\t\t\t// 'let_abs',\t\t// 絶対値\n\t\t\t// 'let_char_at',\t// 文字列から一字取りだし\n\t\t\t// 'let_index_of',\t// 文字列で検索\n\t\t\t// 'let_length',\t// 文字列の長さ\n\t\t\t// 'let_ml',\t\t// インラインテキスト代入\n\n\t\t\t// 'let_replace',\t// 正規表現で置換\n\t\t\t// 'let_round',\t\t// 四捨五入\n\t\t\t// 'let_search',\t// 正規表現で検索\n\t\t\t// 'let_substr',\t// 文字列から抜きだし\n\t\t\t// 'let',\t\t\t// 変数代入・演算\n\n\t\t// レイヤ共通\n\t\t\t// 'add_lay',\t\t// レイヤを追加する\n\t\t\t// 'clear_lay',\t// レイヤ設定の消去\n\t\t\t// 'finish_trans',\t// トランス強制終了\n\t\t\t// 'lay',\t// レイヤ設定\n\t\t\t'trans',\t// ページ裏表を交換\n\t\t\t'wt',\t// トランス終了待ち\n\t\t\t// 'add_filter',\t// フィルター追加\n\t\t\t// 'clear_filter',\t// フィルター全削除\n\t\t\t// 'enable_filter',// フィルター個別切替\n\n\t\t// トゥイーンアニメ\n\t\t\t// 'pause_tsy',\t// 一時停止\n\t\t\t// 'resume_tsy',\t// 一時停止再開\n\t\t\t// 'stop_tsy',\t// トゥイーン中断\n\t\t\t// 'tsy',\t\t// トゥイーン開始\n\t\t\t'wait_tsy',\t// トゥイーン終了待ち\n\n\t\t// 文字・文字レイヤ\n\t\t\t// 'autowc',\t// 文字ごとのウェイト\n\t\t\t// 'ch',\t\t// 文字を追加する\n\t\t\t// 'ch_in_style',\t// 文字出現演出定義\n\t\t\t// 'ch_out_style',\t// 文字消去演出定義\n\t\t\t// 'clear_text',\t// 文字消去\n\t\t\t// 'current',\t// デフォルト文字レイヤ設定\n\t\t\t// 'endlet_ml',\t// インラインテキスト代入の終端\n\t\t\t// 'endlink',\t// ハイパーリンクの終了\n\t\t\t// 'er',\t\t// ページ両面の文字消去\n\t\t\t// 'graph',\t\t// インライン画像表示\n\t\t\t// 'link',\t\t// ハイパーリンク\n\t\t\t// 'r',\t\t\t// 改行\n\t\t\t// 'rec_ch',\t// 履歴書き込み\n\t\t\t// 'rec_r',\t\t// 履歴改行\n\t\t\t// 'reset_rec',\t// 履歴リセット\n\t\t\t// 'ruby2',\t\t// 文字列と複数ルビの追加\n\t\t\t// 'set_focus',\t// フォーカス移動\n\t\t\t// 'span',\t\t// インラインスタイル設定\n\t\t\t// 'tcy',\t\t// 縦中横を表示する\n\n\t\t// 画像・画像レイヤ\n\t\t\t// 'add_face',\t// 差分名称の定義\n\t\t\t'wv',\t\t// 動画再生終了待ち\n\n\t\t// HTMLフレーム\n\t\t\t// 'add_frame',\t// フレーム追加\n\t\t\t// 'frame',\t// フレームに設定\n\t\t\t// 'let_frame',\t// フレーム変数を取得\n\t\t\t// 'set_frame',\t// フレーム変数に設定\n\t\t\t// 'tsy_frame',\t// フレームをトゥイーン開始\n\n\t\t// イベント\n\t\t\t// 'clear_event',\t// イベントを全消去\n\t\t\t// 'enable_event',\t// イベント有無の切替\n\t\t\t// 'event',\t// イベントを予約\n\t\t\t'l',\t// 行末クリック待ち\n\t\t\t'p',\t// 改ページクリック待ち\n\t\t\t's',\t// 停止する\n\t\t\t// [set_cancel_skip] スキップ中断予約\n\t\t\t'wait',\t\t// ウェイトを入れる\n\t\t\t'waitclick',\t// クリックを待つ\n\n\t\t// BGM・効果音\n\t\t\t// 'fadebgm',\t// BGMのフェード\n\t\t\t// 'fadeoutbgm',// BGMのフェードアウト\n\t\t\t// 'fadeoutse',\t// 効果音のフェードアウト\n\t\t\t// 'fadese',\t// 効果音のフェード\n\t\t\t// 'playbgm',\t// BGM の演奏\n\t\t\t// 'playse',\t// 効果音の再生\n\t\t\t// 'stop_allse',// 全効果音再生の停止\n\t\t\t// 'stopbgm',\t// BGM 演奏の停止\n\t\t\t// 'stopfadese',// 音声フェードの停止\n\t\t\t// 'stopse',\t// 効果音再生の停止\n\t\t\t// 'volume',\t// BGMや効果音の音量を指定\n\t\t\t'wb',\t// BGM フェードの終了待ち\n\t\t\t'wf',\t// 効果音フェードの終了待ち\n\t\t\t'wl',\t// BGM 再生の終了待ち\n\t\t\t'ws',\t// 効果音再生の終了待ち\n\t\t\t// 'xchgbuf',\t// サウンドバッファの交換\n\n\t\t// 条件分岐\n\t\t\t// 'else',\t// その他ifブロック開始\n\t\t\t// 'elsif',\t// 別条件のifブロック開始\n\t\t\t// 'endif',\t// ifブロックの終端\n\t\t\t// 'if',\t// ifブロックの開始\n\n\t\t// ラベル・ジャンプ\n\t\t\t// 'button',\t// ボタンを表示\n\t\t\t// 'call',\t\t// サブルーチンコール\n\t\t\t// 'jump',\t\t// シナリオジャンプ\n\t\t\t// 'page',\t\t// ページ移動\n\t\t\t// 'pop_stack',\t// コールスタック破棄\n\t\t\t// 'return',\t// サブルーチンから戻る\n\n\t\t// マクロ\n\t\t\t// 'bracket2macro',\t// 括弧マクロの定義\n\t\t\t// 'char2macro',\t// 一文字マクロの定義\n\t\t\t// 'endmacro',\t// マクロ定義の終了\n\t\t\t// 'macro',\t\t// マクロ定義の開始\n\n\t\t// しおり\n\t\t\t// 'copybookmark',\t// しおりの複写\n\t\t\t// 'erasebookmark',\t// しおりの消去\n\t\t\t// 'load',\t\t\t// しおりの読込\n\t\t\t// 'record_place',\t// セーブポイント指定\n\t\t\t// 'reload_script',\t// スクリプト再読込\n\t\t\t// 'save',\t\t\t// しおりの保存\n\n\t\t// 画面揺らし\n\t\t\t'quake',\t\t// 画面を揺らす\n\t\t\t// 'stop_quake',// 画面揺らし中断\n\t\t\t'wq',\t\t// 画面揺らし終了待ち\n\n\t\t// システム\n\t\t\t// 'close',\t\t// アプリの終了\n\t\t\t// 'export',\t// プレイデータをエクスポート\n\t\t\t// 'import',\t// プレイデータをインポート\n\t\t\t// 'loadplugin',\t// プラグインの読み込み\n\t\t\t// 'navigate_to',\t// URLを開く\n\t\t\t// 'snapshot',\t\t// スナップショット\n\t\t\t// 'title',\t\t// タイトル指定\n\t\t\t// 'toggle_full_screen',\t// 全画面状態切替\n\t\t\t// 'update_check',\t// 更新チェック機能\n\t\t\t// 'window',\t// アプリウインドウ設定\n\n\t\t// デバッグ・その他\n\t\t\t// 'dump_lay',\t\t// レイヤのダンプ\n\t\t\t// 'dump_script',\t// 外部へスクリプトを表示\n\t\t\t// 'dump_stack',\t// スタックのダンプ\n\t\t\t// 'dump_val',\t\t// 変数のダンプ\n\t\t\t// 'log',\t\t// ログ出力\n\t\t\t// 'trace',\t\t// デバッグ表示へ出力\n\t\t]);\n\t\treadonly\t#setTag2FinishTrans = new Set([\n\t\t\t'finish_trans',\t// トランス強制終了\n\t\t\t'trans',\t\t// ページ裏表を交換\n\t\t\t'quake',\t\t// 画面を揺らす\n\t\t\t'stop_quake',\t// 画面揺らし中断\n\t\t\t'add_filter',\t// フィルター追加\n\t\t]);\n\t\t// キー押しっぱなしスキップで処理せずスルーするタグ\n\t\treadonly\t#hTag2SkipBypass: {[tag_name: string]: TTag} = {\n\t\t\t'wt'\t\t: ()=> {CmnTween.stopEndTrans(); return false},\n\t\t\t\t\t\t\t\t\t\t\t// トランス終了待ち\n\t\t\t'wait_tsy'\t: o=> this.hTag.stop_tsy(o),\t// トゥイーン終了待ち\n\t\t\t// 'wv',\t\t:タグ内部で処理\t// 動画再生終了待ち\n\t\t\t'wait'\t\t\t: ()=> false,\t// ウェイトを入れる\n\t\t\t// 'playbgm',\t:スルー不可\t\t// BGM の演奏\n\t\t\t// 'playse',\t:タグ内部で処理\t// 効果音の再生\n\t\t\t'wb'\t: ()=> this.hTag.stopfadese({buf: BUF_BGM}),\n\t\t\t\t\t\t\t\t\t\t\t// BGM フェードの終了待ち\n\t\t\t'wf'\t: o=> this.hTag.stopfadese(o),\t// 効果音フェードの終了待ち\n\t\t\t// 'ws'\t\t:タグ内部で処理\t// 効果音再生の終了待ち\n\t\t\t'wq'\t: ()=> this.hTag.stop_quake({}),\t// 画面揺らし終了待ち\n\t\t\t// fade系\t:タグ内部で処理\n\t\t\t// 'ch'\t\t:タグ内部で処理\t// 文字を追加する\n\t\t\t// 'tsy'\t:タグ内部で処理\t// トゥイーン開始\n\t\t\t// 'trans'\t:タグ内部で処理\t// ページ裏表を交換\n\t\t\t'quake'\t\t: ()=> false,\t\t// 画面を揺らす\n\t\t};\n\t\t// タグ処理中にクリックなどで即終わらせられるタグ(canskip 属性がある)\n\t\treadonly\t#hTag2CanSkip: {[tag_name: string]: boolean} = {\n\t\t\t\t\t\t// デフォルト値\n\t\t\t'wt'\t\t: true ,\t// [wt]トランス終了待ち\n\t\t\t'wait_tsy'\t: true ,\t// [wait_tsy]トゥイーン終了待ち\n\t\t\t'wv'\t\t: true ,\t// [wv]動画再生終了待ち\n\t\t\t'wait'\t\t: true ,\t// [wait]ウェイトを入れる\n\t\t\t'playbgm'\t: false,\t// [playbgm]BGM の演奏\n\t\t\t'playse'\t: true ,\t// [playse]効果音の再生\n\t\t\t'wb'\t\t: false,\t// [wb]BGM フェードの終了待ち\n\t\t\t'wf'\t\t: false,\t// [wf]効果音フェードの終了待ち\n\t\t\t'ws'\t\t: false,\t// [ws]効果音再生の終了待ち\n\t\t\t'wq'\t\t: true ,\t// [wq]画面揺らし終了待ち\n\t\t};\n\n\n\t#evtMng\t: EventMng;\n\t#layMng\t: LayerMng;\n\tsetOtherObj(evtMng: EventMng, layMng: LayerMng): void {\n\t\tthis.#evtMng = evtMng;\n\t\tthis.#layMng = layMng;\n\t}\n\n\n\t//MARK: インラインテキスト代入\n\t#let_ml(hArg: TArg) {\n\t\tconst {name} = hArg;\n\t\tif (! name) throw 'nameは必須です';\n\n\t\tlet ml = '';\n\t\tconst len = this.#script.len;\n\t\tfor (; this.#idxToken<len; ++this.#idxToken) {\n\t\t\tml = this.#script.aToken[this.#idxToken]!;\n\t\t\tif (ml !== '') break;\n\t\t}\n\t\thArg.text = ml;\n\t\thArg.cast = 'str';\n\t\tthis.hTag.let(hArg);\n\t\tthis.#idxToken += 2;\n\t\tthis.#lineNum += (ml.match(/\\n/g) ?? []).length;\n\n\t\treturn false;\n\t}\n\n\n\t//MARK: スタックのダンプ\n\t#dump_stack() {\n\t\tif (this.#idxToken === 0) {\n\t\t\tconsole.group(`🥟 [dump_stack] スクリプト現在地 fn:${this.#scriptFn} line:1 col:0`);\n\t\t\tconsole.groupEnd();\n\t\t\treturn false;\n\t\t}\n\n\t\tconst lc0 = this.#cnvIdx2lineCol(this.#script, this.#idxToken);\n\t\tconst now = `スクリプト現在地 fn:${this.#scriptFn} line:${String(lc0.ln)} col:${String(lc0.col_s +1)}`;\n\t\tconsole.group(`🥟 [dump_stack] ${now}`);\n\t\tconst len = this.#aCallStk.length;\n\t\tif (len > 0) {\n\t\t\tconsole.info(now);\n\t\t\tfor (let i=len -1; i>=0; --i) {\n\t\t\t\tconst cs = this.#aCallStk[i]!;\n\t\t\t\tconst hMp = cs.csArg[':hMp'];\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\t\t\tconst from_macro_nm = hMp\n\t\t\t\t\t? <string>(<{[nm: string]: any}>hMp)[':タグ名']\n\t\t\t\t\t: undefined;\n\t\t\t\tconst call_nm = cs.csArg[':タグ名'] ?? '';\n\t\t\t\tconst lc = this.#cnvIdx2lineCol(this.#hScript[cs.fn], cs.idx);\n\t\t\t\tconsole.info(\n\t\t\t\t\t`${String(len -i)}つ前のコール元 fn:${cs.fn} line:${\n\t\t\t\t\t\tString(lc.ln)} col:${String(lc.col_s +1)\n\t\t\t\t\t}${\n\t\t\t\t\t\tfrom_macro_nm ?'(['+ from_macro_nm +']マクロ内)' :' '\n\t\t\t\t\t}で [${call_nm} ...]をコール`\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tconsole.groupEnd();\n\n\t\treturn false;\n\t}\n\t#cnvIdx2lineCol(st: Script | undefined, idx: number): {ln: number, col_s: number, col_e: number} {\n\t\tconst ret = {ln: 1, col_s: 0, col_e: 0};\n\t\tif (! st) return ret;\n\n\t\tlet i = idx -1;\n\t\tconst lN = ret.ln = st.aLNum[i]!;\n\t\twhile (st.aLNum[i] === lN) {\n\t\t\tconst tkn = st.aToken[i]!;\n\t\t\tif (! tkn.startsWith('\\n')) {\n\t\t\t\tconst len = tkn.length;\n//console.log(`fn:ScriptIterator.ts line:586 cnvIdx2lineCol tkn:${st.aToken[i]} len:${len} s:${ret.col_s} e:${ret.col_e}`);\n\t\t\t\tif (ret.col_e > 0) ret.col_s += len;\n\t\t\t\tret.col_e += len;\n\t\t\t}\n\t\t\tif (--i < 0) break;\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\n\t//MARK: 外部へスクリプトを表示\n\t#dump_script(hArg: TArg) {\n\t\tconst {set_fnc, break_fnc} = hArg;\n\t\tif (! set_fnc) throw 'set_fncは必須です';\t// スクリプトを返すコールバック\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\tthis.#fncSet = (<any>globalThis)[set_fnc];\n\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\tif (! this.#fncSet) {\n\t\t\tif (argChk_Boolean(hArg, 'need_err', true)) throw `HTML内に関数${set_fnc}が見つかりません`;\n\t\t\tthis.#fncSet = ()=> { /* empty */ };\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.noticeBreak = (goto: boolean)=> {\n\t\t\tif (this.#fnLastBreak !== this.#scriptFn) {\n\t\t\t\tthis.#fnLastBreak = this.#scriptFn;\n\t\t\t\tthis.#fncSet(\n\t\t\t\t\tthis.#hScrCache4Dump[this.#scriptFn] ??= this.#script.aToken.join('')\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.#fncBreak(this.#lineNum, goto);\n\t\t};\n\t\tthis.noticeBreak(true);\t// 一度目のthis.fncBreak()はスルー(まだ読んでないし)\n\n\t\tif (! break_fnc) return false;\t// Break通知コールバック\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\tthis.#fncBreak = (<any>globalThis)[break_fnc];\n\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\tif (! this.#fncBreak) {\n\t\t\tif (argChk_Boolean(hArg, 'need_err', true)) throw `HTML内に関数${break_fnc}が見つかりません`;\n\t\t\tthis.#fncBreak = ()=> { /* empty */ };\n\t\t}\n\n\t\treturn false;\n\t}\n\t#fncSet: (txt: string)=> void = ()=> { /* empty */ };\n\t#fncBreak: (ln: number, goto: boolean)=> void = ()=> { /* empty */ };\n\t#fnLastBreak = '';\n\t#hScrCache4Dump: {[fn: string]: string;} = {};\n\tnoticeBreak = (_goto: boolean)=> { /* empty */ };\n\n\n\t#dumpErrLine = 5;\n\tdumpErrForeLine() {\n\t\tif (this.#idxToken === 0) {\n\t\t\tconsole.group(`🥟 Error line (from 0 rows before) fn:${this.#scriptFn}`);\n\t\t\tconsole.groupEnd();\n\t\t\treturn;\n\t\t}\n\n\t\tlet s = '';\n\t\tfor (let i=this.#idxToken -1; i>=0; --i) {\n\t\t\ts = String(this.#script.aToken[i]) + s;\n\t\t\tif ((s.match(/\\n/g) ?? []).length >= this.#dumpErrLine) break;\n\t\t}\n\t\tconst a = s.split('\\n').slice(-this.#dumpErrLine);\n\t\tconst len = a.length;\n\t\tconsole.group(`🥟 Error line (from ${String(len)} rows before) fn:${this.#scriptFn}`);\n\t\tconst ln_txt_width = String(this.#lineNum).length;\n\t\tconst lc = this.#cnvIdx2lineCol(this.#script, this.#idxToken);\n\t\tfor (let i=0; i<len; ++i) {\n\t\t\tconst ln = this.#lineNum -len +i +1;\n\t\t\tconst mes = `${String(ln).padStart(ln_txt_width, ' ')}: %c`;\n\t\t\tconst e = a[i]!;\n\t\t\tconst line = e.length > 75 ?e.slice(0, 75) +'…' :e;\t// 長い場合は後略\n\t\t\tif (i === len -1) console.info(\n\t\t\t\tmes + line.slice(0, lc.col_s) +'%c'+ line.slice(lc.col_s),\n\t\t\t\t'color: black; background-color: skyblue;', 'color: black; background-color: pink;'\n\t\t\t)\n\t\t\telse console.info(mes + line, 'color: black; background-color: skyblue;');\n\t\t}\n\t\tconsole.groupEnd();\n\t\t//console.log('Linkの出力 : %o', 'file:///Volumes/MacHD2/_Famibee/SKYNovel/prj/mat/main.sn');\n\t}\n\n\n\t#aIfStk\t: number[]\t= [-1];\t// 先頭に積む FIFOバッファ(unshift / shift)\n\t//MARK: ifブロックの終端\n\t#endif() {\n\t\tconst t = this.#aIfStk[0];\n\t\tif (! t) throw 'this.#aIfStk が異常です';\n\t\tif (t === -1) throw 'ifブロック内ではありません';\n\n\t\tthis.#idxToken = t;\n\t\tthis.#aIfStk.shift();\t// 最初の要素を取り除く\n\n\t\treturn false;\n\t}\n\t//MARK: ifブロックの開始\n\t#if(hArg: TArg) {\n\t\t//console.log('if idxToken:'+ this.#idxToken);\n\t\tconst {exp} = hArg;\n\t\tif (! exp) throw 'expは必須です';\n\t\tif (exp.startsWith('&')) throw '属性expは「&」が不要です';\n\n\t\tlet cntDepth = 0;\t\t// if深度カウンター\n\t\tlet\tidxGo = this.prpPrs.parse(exp) ?this.#idxToken :-1;\n\t\tconst lnIf = this.#script.aLNum[this.#idxToken];\n\t\tconst zLn = this.#lineNum -((lnIf ?? 0) || 0);\t// ??ではなく。NaN は falsy\n\t\tconst len = this.#script.len;\n\t\tfor (; this.#idxToken<len; ++this.#idxToken) {\n\t\t\tconst ln = this.#script.aLNum[this.#idxToken];\n\t\t\tthis.#script.aLNum[this.#idxToken] = ((ln ?? 0) || 0)+ zLn; // ??はNaN不可\n\t\t\tconst tkn = this.#script.aToken[this.#idxToken];\n\t\t\t//console.log(`[if]トークン ${this.#scriptFn}:${this.#lineNum} idx:${this.#idxToken} realLn:${this.#script.aLNum[this.#idxToken]} idxGo:${idxGo} cntDepth:${cntDepth} token<${tkn}>`);\n\t\t\tif (! tkn) continue;\n\n\t\t\tconst uc = tkn.charCodeAt(0);\t// TokenTopUnicode\n\t\t\tif (uc === 10) {this.#lineNum += tkn.length; continue}\t// \\n 改行\n\t\t\tif (uc !== 91) continue;\t// [ タグ開始以外\n\n\t\t\tconst [tag_name, args] = tagToken2Name_Args(tkn);\n\t\t\tif (! (tag_name in this.hTag)) throw `未定義のタグ[${tag_name}]です`;\n\t\t\tthis.#alzTagArg.parse(args);\n\n\t\t\tswitch (tag_name) {\n\t\t\tcase 'if':\t++cntDepth; break;\n\n\t\t\tcase 'elsif':{\n\t\t\t\tif (cntDepth > 0) break;\n\t\t\t\tif (idxGo > -1) break;\n\n\t\t\t\tconst e = this.#alzTagArg.hPrm.exp?.val;\n\t\t\t\tif (! e) throw 'expは必須です';\n\t\t\t\tif (e.startsWith('&')) throw '属性expは「&」が不要です';\n\t\t\t\tif (this.prpPrs.parse(e)) idxGo = this.#idxToken +1;\n\t\t\t}\tbreak;\n\n\t\t\tcase 'else':\n\t\t\t\tif (cntDepth > 0) break;\n\t\t\t\tif (idxGo === -1) idxGo = this.#idxToken +1;\n\t\t\t\tbreak;\n\n\t\t\tcase 'endif':\n\t\t\t\tif (cntDepth > 0) {--cntDepth; break}\n\t\t\t\tif (idxGo === -1) {\n\t\t\t\t\t++this.#idxToken;\n\t\t\t\t\tthis.#script.aLNum[this.#idxToken]! += zLn;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.#aIfStk.unshift(this.#idxToken +1);\t// 先頭に要素追加\n\t\t\t\t\tthis.#idxToken = idxGo;\n\t\t\t\t\tthis.#lineNum = this.#script.aLNum[this.#idxToken]!;\n\t\t\t\t\t\t// +zLn 不要\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tthrow '[endif]がないままスクリプト終端です';\n\t\t//return false;\n\t}\n\n\n\t//MARK: サブルーチンコール\n\t#call(hArg: TArg) {\n\t\tif (! argChk_Boolean(hArg, 'count', false)) this.#eraseKidoku();\n\n\t\tconst {fn} = hArg;\n\t\tif (fn) this.#cnvSnPath(fn);\t// chk only\n\t\tthis.#callSub({...hArg}, ReadingState.popLocalEvts());\n\t\t\t// ':hEvt1Time'の扱いだけは[macro]と異なる\n\n\t\tif (argChk_Boolean(hArg, 'clear_local_event', false)) this.hTag.clear_event({});\n\t\treturn this.#jumpWork(fn, hArg.label);\n\t}\n\t#callSub(hArg: TArg, hEvt1Time?: T_HEvt2Fnc) {\n\t\tconst csa: ICallStackArg = {\n\t\t\t...hArg,\n\t\t\t...hEvt1Time ?{':hEvt1Time': hEvt1Time} :{},\n\t\t\t':hMp'\t\t: this.val.cloneMp(),\n\t\t\t':lenIfStk'\t: this.#aIfStk.length,\n\t\t};\n\t\tthis.#script.aLNum[this.#idxToken] = this.#lineNum;\t// 戻ったときの行番号\n\t\tif (! this.#resvToken) {csa[':resvToken'] = ''; this.#clearResvToken()}\n\t\tthis.#aCallStk.push(new CallStack(this.#scriptFn, this.#idxToken, csa));\n\t\tthis.#aIfStk.unshift(-1);\t// 最初に要素を追加\n\t}\n\n\t//MARK: シナリオジャンプ\n\t#jump(hArg: TArg) {\n\t\tif (! argChk_Boolean(hArg, 'count', true)) this.#eraseKidoku();\n\n\t\tthis.#aIfStk[0] = -1;\n\t\treturn this.#jumpWork(hArg.fn, hArg.label);\n\t}\n\n\t//MARK: コールスタック破棄\n\t#pop_stack(hArg: TArg) {\n\t\tif (argChk_Boolean(hArg, 'clear', false)) this.#aCallStk = [];\n\t\telse if (! this.#aCallStk.pop()) throw 'スタックが空です';\n\t\tthis.#clearResvToken();\n\t\tthis.#aIfStk = [-1];\n\t\tthis.val.setMp(creMP());\n\n\t\treturn false;\n\t}\n\n\t//MARK: サブルーチンから戻る\n\t#return(hArg: TArg) {\n\t\tconst cs = this.#aCallStk.pop();\n\t\tif (! cs) throw 'スタックが空です';\n\t\tconst csa = cs.csArg;\n\t\tthis.#aIfStk = this.#aIfStk.slice(-csa[':lenIfStk']);\t// 最初の要素を取り除く\n\n\t\tconst hMp = csa[':hMp'];\t// マクロからの復帰の場合にmp:値も復帰\n\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\tif (hMp) this.val.setMp(hMp);\n\t\t\t// たぶん型チェック的に if (hMp) は不要だが、\n\t\t\t// あとからESLint対応なので安易に挙動を変えない方針で\n\n\t\tconst after_token = csa[':resvToken'];\n\t\tif (after_token) this.nextToken = ()=> {\n\t\t\tthis.#clearResvToken();\n\t\t\treturn after_token;\n\t\t}\n\t\telse this.#clearResvToken();\n\n\t\tif (csa[':hEvt1Time']) ReadingState.pushLocalEvts(csa[':hEvt1Time']);\n\n\t\tconst {fn, label} = hArg;\n\t\tif (fn || label) return this.#jumpWork(fn, label);\n\n\t\tif (cs.fn in this.#hScript) {this.#jump_light(cs); return false}\n\t\treturn this.#jumpWork(cs.fn, '', cs.idx);\t// 確実にスクリプトロードなので\n\t}\n\n\t#resvToken\t= '';\n\t#clearResvToken() {\n\t\tthis.#resvToken = '';\n\t\tthis.nextToken = ()=> this.#nextToken_Proc();\n\t}\n\n\n\t#skipLabel = '';\n\t#jumpWork(fn = '', label = '', idx = 0): boolean {\n\t\tif (CmnLib.debugLog) console.log(`📜 %c1:jumpWork%c fn:${fn} lbl:${label} idx:${String(idx)}`, 'color:#3B0;', '');\n\t\tif (! fn && ! label) this.main.errScript('[jump系] fnまたはlabelは必須です');\n\t\tif (label) {\n\t\t\tif (! label.startsWith('*')) this.main.errScript('[jump系] labelは*で始まります');\n\t\t\tthis.#skipLabel = label;\n\t\t\tif (! this.#skipLabel.startsWith('**')) this.#idxToken = idx;\n\t\t}\n\t\telse {\n\t\t\tthis.#skipLabel = '';\n\t\t\tthis.#idxToken = idx;\n\t\t}\n\n\t\tif (! fn) {this.analyzeInit(); return false}\n\t\tif (fn.includes('@')) throw '[jump系] fn には文字「@」は禁止です';\n\n\t\tconst full_path = this.#cnvSnPath(fn);\n\t\tif (fn === this.#scriptFn) {this.analyzeInit(); return false}\n\t\tthis.#scriptFn = fn;\n\t\tconst st = this.#hScript[fn];\n\t\tif (st) {this.#script = st; this.analyzeInit(); return false}\n\n\t\tconst RPN_JUMPWORK = `jumpWork fn:${fn}`;\n\t\tReading.beginProc(RPN_JUMPWORK);\n\t\tlet fp_diff = '';\n\t\tconst ldr = new Loader;\n\t\ttry {\n\t\t\tfp_diff = this.#cnvSnPath(fn +'@');\n\t\t\t// 派生ファイルが存在する場合\n\t\t\tldr.add({name: fn +':base', url: full_path});\n\t\t\tldr.add({name: fn, url: fp_diff});\n\t\t} catch {\n\t\t\t// 派生ファイルはない\n\t\t\tldr.add({name: fn, url: full_path});\n\t\t}\n\t\tldr.use((res, next)=> {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\t\t\tthis.sys.dec(res.extension, res.data).then(d=> {\n\t\t\t\tres.data = d;\n\t\t\t\tnext();\n\t\t\t})\n\t\t\t.catch((e: unknown)=> {\n\t\t\t\tthis.main.errScript(`[jump系]snロード失敗です fn:${res.name} ${String(e)}`, false);\n\t\t\t\tnext();\n\t\t\t});\n\t\t})\n\t\t.load((_ldr, hRes)=> {\n\t\t\tReading.endProc(RPN_JUMPWORK);\n\t\t\tif (fp_diff) {\t// 派生ファイルが存在する場合\n\t\t\t\tconst scrBase: string = hRes[fn +':base']!.data;\n\t\t\t\tconst scrDiff: string = hRes[fn]!.data;\n\t\t\t\tconst aBase: string[] = scrBase.split('\\n');\n\t\t\t\tconst aDiff: string[] = scrDiff.split('\\n');\n\t\t\t\tconst lenB = aBase.length;\n\t\t\t\tconst lenD = aDiff.length;\n\t\t\t\t// 【派生スクリプト】の空行へ、【基底スクリプト】の同じ行の内容をコピー\n\t\t\t\tfor (let i=0; i<lenD && i<lenB; ++i) aDiff[i] ||= aBase[i] ?? '';\n\n\t\t\t\t// 【接尾辞つきファイル】として扱う\n\t\t\t\thRes[fn]!.data = aDiff.join('\\n');\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\t\t\t\tdelete hRes[fn +':base'];\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line @typescript-eslint/unbound-method\n\t\t\tthis.nextToken = this.#nextToken_Proc;\n\t\t\tthis.#lineNum = 1;\n\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\t\t\tthis.#resolveScript(hRes[fn]!.data);\n\t\t\tthis.hTag.record_place({});\n\t\t\tthis.analyzeInit();\n\t\t});\n\n\t\treturn true;\n\t}\n\tprivate\tanalyzeInit(): void {\n\t\tif (CmnLib.debugLog) console.log(`📜 %c9:analyzeInit%c fn:${this.#scriptFn} lbl:${this.#skipLabel} idx:${String(this.#idxToken)}`, 'color:#3B0;', '');\n\t\tconst o = this.#seekScript(this.#script, Boolean(this.val.getVal('mp:const.sn.macro.name')), this.#lineNum, this.#skipLabel, this.#idxToken);\n\t\tthis.#idxToken\t= o.idx;\n\t\tthis.#lineNum\t= o.ln;\n\t}\n\n\t// シナリオ解析処理ループ・冒頭処理\n\tnextToken = ()=> '';\t// 初期化前に終了した場合向け\n\t#nextToken_Proc(): string {\n\t\tif (this.#errOverScr()) return '';\n\n\t\tthis.#recordKidoku();\n\n\t\t// トークンの行番号更新\n\t\tthis.#script.aLNum[this.#idxToken] ||= this.#lineNum;\t// ??はNaN不可\n\t\tconst token = this.#script.aToken[this.#idxToken]!;\n\t\tthis.#dbgToken(token);\n\t\t++this.#idxToken;\n\n\t\treturn token;\n\t}\n\t#dbgToken = (_token: string)=> { /* empty */ };\n\t#errOverScr(): boolean {\n\t\tif (this.#idxToken < this.#script.len) return false;\n\t\tthis.main.errScript('スクリプト終端です errOverScr');\n\t\treturn true;\n\t}\n\n\n\treadonly #REG_NONAME_LABEL\t\t= /(\\*{2,})([^|]*)/;\n\treadonly #REG_TOKEN_MACRO_BEGIN\t= /^\\[macro\\s/;\n\treadonly #REG_TOKEN_MACRO_END\t= /^\\[endmacro[\\s\\]]/;\n\t#seekScript(st: Script, inMacro: boolean, iln: number, iskipLabel: string, idx: number): ISeek {\n\t\t//console.log(`seekScript (from)inMacro:${inMacro} (from)ln:${ln} (to)skipLabel:${skipLabel}: (to)idx:${idx}`);\n\t\tconst len = st.aToken.length;\n\t\tlet ln = iln, skipLabel = iskipLabel;\n\t\tif (! skipLabel) {\t// ラベルジャンプ以外(先頭から開始)\n\t\t\tif (this.#errOverScr()) return {idx, ln};\n\n\t\t\tif (! st.aLNum[idx]) {\t// NaN、undefined は falsy\n\t\t\t\tln = 1;\n\t\t\t\tfor (let j=0; j<idx; ++j) {\n\t\t\t\t\t// 走査ついでにトークンの行番号も更新\n\t\t\t\t\tst.aLNum[j] ||= ln;\t// ??はNaN不可\n\n\t\t\t\t\tconst tkn = st.aToken[j]!;\n\t\t\t\t\tif (tkn.startsWith('\\n')) ln += tkn.length;\t// \\n 改行\n\t\t\t\t\telse ln += (tkn.match(/\\n/g) ?? []).length;\n\t\t\t\t}\n\t\t\t\tst.aLNum[idx] = ln;\n\t\t\t}\n\t\t\telse ln = st.aLNum[idx];\n\n\t\t\treturn {idx, ln};\n\t\t}\n\n\t\t// 無名ラベルジャンプ\n\t\tst.aLNum[0] = 1;\n\t\tconst a_skipLabel = skipLabel.match(this.#REG_NONAME_LABEL);\n\t\tif (a_skipLabel) {\n\t\t\tskipLabel = a_skipLabel[1]!;\n\t\t\tlet i = idx;\n\t\t\tswitch (a_skipLabel[2]) {\n\t\t\tcase 'before':\n\t\t\t\twhile (st.aToken[--i] !== skipLabel) {\n\t\t\t\t\tif (i === 0) DebugMng.myTrace(`[jump系 無名ラベルbefore] \n\t\t\t\t\t\t${String(ln)} 行目以前で ${inMacro ?'マクロ内に' :''} ラベル【 ${skipLabel} 】がありません`, 'ET');\n\t\t\t\t\tif (inMacro && st.aToken[i]!.search(this.#REG_TOKEN_MACRO_BEGIN) > -1) DebugMng.myTrace('[jump系 無名ラベルbefore] マクロ内にラベル【'+ skipLabel +'】がありません', 'ET');\n\t\t\t\t}\n\t\t\t\treturn {idx: i +1, ln: st.aLNum[i]!};\t//\tbreak;\n\n\t\t\tcase 'after':\n\t\t\t\twhile (st.aToken[++i] !== skipLabel) {\n\t\t\t\t\tif (i === len) DebugMng.myTrace(`[jump系 無名ラベルafter] ${String(ln)} 行目以後でマクロ内にラベル【${skipLabel}】がありません`, 'ET');\n\t\t\t\t\tif (st.aToken[i]!.search(this.#REG_TOKEN_MACRO_END) > -1) DebugMng.myTrace(`[jump系 無名ラベルafter] ${String(ln)} 行目以後でマクロ内にラベル【 ${skipLabel} 】がありません`, 'ET');\n\t\t\t\t}\n\t\t\t\treturn {idx: i +1, ln: st.aLNum[i]!};\t//\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tDebugMng.myTrace('[jump系] 無名ラベル指定【label='+ skipLabel +'】が間違っています', 'ET');\n\t\t\t}\n\t\t}\n\n\t\t// ラベルジャンプ\n\t\tln = 1;\n\t\t// (new RegExp(\"~\")) の場合は、バックスラッシュは2つ必要\n\t\tconst reLabel = new RegExp(\n\t\t\t'^'+ skipLabel.replaceAll('*', '\\\\*') +'(?=\\\\s|;|\\\\[|\\\\||$)');\n\t\tlet in_let_ml = false;\n\t\tfor (let i=0; i<len; ++i) {\n\t\t\t// 走査ついでにトークンの行番号も更新\n\t\t\tst.aLNum[i] ||= ln;\t// ??はNaN不可\n\n\t\t\tconst tkn = st.aToken[i]!;\n\t\t\tif (in_let_ml) {\n\t\t\t\tif (this.#grm.testTagEndLetml(tkn)) in_let_ml = false;\n\t\t\t\telse ln += (tkn.match(/\\n/g) ?? []).length;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst uc = tkn.charCodeAt(0);\t// TokenTopUnicode\n\t\t\tif (uc === 10) {ln += tkn.length; continue}\t// \\n 改行\n\t\t\tif (uc === 42) {\t// 42 = *\n\t\t\t\tif (tkn.search(reLabel) > -1) return {idx: i +1, ln};//\tbreak;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (uc !== 91) continue;\t// [ タグ開始\n\n\t\t\tln += (tkn.match(/\\n/g) ?? []).length;\n\t\t\tif (this.#grm.testTagLetml(tkn)) in_let_ml = true;\n\t\t}\n\t\tif (in_let_ml) throw '[let_ml]の終端・[endlet_ml]がありません';\n\n\t\tDebugMng.myTrace(`[jump系] ラベル【${skipLabel}】がありません`, 'ET');\n\t\tthrow 'Dummy';\n\t}\n\n\t#hScript\t: HScript\t= Object.create(null);\t//{} シナリオキャッシュ\n\t#resolveScript(txt: string) {\n\t\tlet mes = '';\n\t\ttry {\n\t\t\tmes = 'ScriptIterator.resolveScript';\n\t\t\tconst scr = this.#grm.resolveScript(txt);\n\t\t\tmes = 'ScriptIterator.replaceScript_Wildcard';\n\t\t\tthis.#replaceScript_Wildcard(scr);\n\t\t\tthis.#hScript[this.#scriptFn] = this.#script = scr;\n\t\t}\n\t\tcatch (e) {\n\t\t\tif (e instanceof Error) mes += `例外 mes=${e.message}(${e.name})`;\n\t\t\telse mes = String(e);\n\t\t\tthis.main.errScript(mes, false);\n\t\t}\n\t\tthis.val.touchAreaKidoku(this.#scriptFn);\n\t}\n\n\t#jump_light(cs: CallStack) {\n\t\t// jumpでは連続マクロでスタックオーバーフローになるので簡易版を\n\t\t// 主に[return]やマクロ終了でジャンプ先がチェック不要な場合用\n\t\t// analyzeInit()とかもジャンプ前にやってて不要だし\n\t\tthis.#scriptFn\t= cs.fn;\n\t\tthis.#idxToken\t= cs.idx;\n\t\tconst st = this.#hScript[this.#scriptFn];\n\t\tif (st) this.#script = st;\n\t\tthis.#lineNum = this.#script.aLNum[cs.idx]!;\n//console.log(`fn:ScriptIterator.ts %cjump_light cs ${cs.fn}:${this.#lineNum} idx:${cs.idx}`, 'background-color:#a03b79;');\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\n\n\t#recordKidoku() {\n\t\tconst ar = this.val.touchAreaKidoku(this.#scriptFn);\n\n\t\t// マクロ内やサブルーチンではisKidokuを変更させない\n\t\tif (this.#aCallStk.length > 0) {ar.record(this.#idxToken); return}\n\n\t\tthis.#isKidoku = ar.search(this.#idxToken);\n\t\tthis.val.setVal_Nochk('tmp', 'const.sn.isKidoku', this.#isKidoku);\n\t\tif (this.#isKidoku) return;\n\n\t\tar.record(this.#idxToken);\n\t\t// saveKidoku()\n\t\t\t// 厳密にはここですべきだが、パフォーマンスに問題があるので\n\t\t\t// クリック待ちを期待できるwait、waitclick、s、l、pタグで\n\t\t\t// saveKidoku()をコール。\n\t}\n\t#isKidoku\t= false;\n\tget isKidoku() {return this.#isKidoku}\n\t#eraseKidoku() {\n\t\tthis.val.getAreaKidoku(this.#scriptFn)?.erase(this.#idxToken);\n\t\tthis.#isKidoku = false;\n\t}\n\tget isNextKidoku(): boolean {\n\t\tlet fn\t= this.#scriptFn;\n\t\tlet idx\t= this.#idxToken;\n\t\tlet len\t= this.#script.len;\n\t\tif (this.#aCallStk.length > 0) {\n\t\t\tconst cs = this.#aCallStk[0]!;\n\t\t\tfn = cs.fn;\n\t\t\tidx = cs.idx;\n\t\t\tconst st = this.#hScript[fn];\n\t\t\tif (st) len = st.len;\n\t\t}\n\t\tif (idx === len) return false;\t// スクリプト終端\n\n\t\tconst areas = this.val.getAreaKidoku(fn);\n\t\treturn areas?.search(idx) ?? false;\n\t}\n\n\n\tget normalWait(): number {\n\t\treturn this.#isKidoku\n\t\t?\n\t\t\tthis.val.tagCh_doWait_Kidoku\n\t\t\t?\tthis.val.tagCh_msecWait_Kidoku\n\t\t\t:\t0\n\t\t:\n\t\t\tthis.val.tagCh_doWait\n\t\t\t?\tthis.val.tagCh_msecWait\n\t\t\t:\t0\n\t\t;\n\t}\n\n\n\t//MARK: 括弧マクロの定義\n\t#bracket2macro(hArg: TArg) {\n\t\tthis.#grm.bracket2macro(hArg, this.hTag, this.#script, this.#idxToken);\n\n\t\treturn false;\n\t}\n\n\t//MARK: 一文字マクロの定義\n\t#char2macro(hArg: TArg) {\n\t\tthis.#grm.char2macro(hArg, this.hTag, this.#script, this.#idxToken);\n\n\t\treturn false;\n\t}\n\n\t//MARK: マクロ定義の開始\n\t// eslint-disable-next-line no-irregular-whitespace\n\treadonly\t#REG_NG4MAC_NM = /[\"'#;\\\\] ]+/;\n\t#macro(hArg: TArg) {\n\t\tconst {name} = hArg;\n\t\tif (! name) throw 'nameは必須です';\n\t\tif (name in this.hTag) throw `[${name}]はタグかすでに定義済みのマクロです`;\n\t\tif (this.#REG_NG4MAC_NM.test(name)) throw `[${name}]はマクロ名として異常です`;\n\n\t\tconst ln = this.#lineNum;\n\t\tconst cs = new CallStack(this.#scriptFn, this.#idxToken);\n\t\tthis.#strStepin += '|'+ name;\n\t\t// (new RegExp(\"~\")) の場合は、バックスラッシュは2つ必要\n\t\tthis.#REGSTEPIN = new RegExp(`\\\\[(${this.#strStepin})\\\\b`);\n\t\tthis.hTag[<keyof T_HTag>name] = hArgM=> {\n\t\t\t// hArgM.design_unit = hArg.design_unit;\n\t\t\tthis.#callSub(hArgM);\n\n\t\t\t// AIRNovelの仕様:親マクロが子マクロコール時、*がないのに値を引き継ぐ\n\t\t\t//for (const k of Object.keys(hArg)) this.val.setVal_Nochk('mp', k, hArg[k]);\n\t\t\tthis.val.setMp({\n\t\t\t\t...hArgM,\n\t\t\t\t'const.sn.macro': JSON.stringify({name: hArg.name}),\n\t\t\t\t\t// ムダに大きいスクリプター用情報を削除、名前だけに\n\t\t\t\t'const.sn.me_call_scriptFn': this.#scriptFn,\n\t\t\t});\n\t\t\tthis.val.setVal_Nochk('mp', 'const.sn.me_call_scriptFn', this.#scriptFn);\n\n\t\t\tthis.#lineNum = ln;\n\t\t\tthis.#jump_light(cs);\n\n\t\t\treturn false;\n\t\t};\n\n\t\tfor (; this.#idxToken < this.#script.len; ++this.#idxToken) {\n\t\t\t// トークンの行番号更新\n\t\t\tthis.#script.aLNum[this.#idxToken] ||= this.#lineNum; // ??はNaN不可\n\n\t\t\tconst token = this.#script.aToken[this.#idxToken]!;\n\t\t\tif (token.search(this.#REG_TOKEN_MACRO_END) > -1) {\n\t\t\t\t++this.#idxToken;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst uc = token.charCodeAt(0);\t// TokenTopUnicode\n\t\t\tif (uc === 10) this.#lineNum += token.length;\t// \\n 改行\n\t\t\telse if (uc === 91) this.#lineNum += (token.match(/\\n/g) ?? []).length;\t// [ タグ開始\n\t\t}\n\t\tthrow `マクロ[${name}]定義の終端・[endmacro]がありません`;\n\t}\n\t#strStepin\t= 'call';\n\t#REGSTEPIN\t= /\\[(call)\\b/;\t// https://regex101.com/r/Lk9ASK/1\n\n\n\t//MARK: しおりの読込\n\t#load(hArg: TArg) {\n\t\tif ('fn' in hArg !== 'label' in hArg) throw 'fnとlabelはセットで指定して下さい';\n\n\t\tconst place = argChk_Num(hArg, 'place', 0);\n\t\tconst mark = this.val.getMark(place);\n\t\tif (! mark) throw `place=${String(place)} は存在しません`\n\n\t\treturn this.loadFromMark(hArg, mark, SndProcOnLoad.ALL_STOP_AND_PLAY);\n\t}\n\tloadFromMark(hArg: TArg, mark: T_Mark, snd: SndProcOnLoad = SndProcOnLoad.MINIMAL_STOP) {\n\t\tthis.hTag.clear_event({});\n\t\tthis.val.mark2save(mark);\n\t\tthis.val.setMp(creMP());\n\t\tthis.#layMng.recPagebreak();\n\n\t\tlet ap: Promise<void>[] = [];\n\t\tif (snd !== SndProcOnLoad.NO_TOUCH) ap = this.sndMng\n\t\t.playLoopFromSaveObj(snd === SndProcOnLoad.ALL_STOP_AND_PLAY);\n\n\t\tif (argChk_Boolean(hArg, 'do_rec', true)) this.#mark = {\n\t\t\thSave\t: this.val.cloneSave(),\n\t\t\thPages\t: {...mark.hPages},\n\t\t\taIfStk\t: [...mark.aIfStk],\n\t\t}\n\n\t\tconst o: TArg = {\n\t\t\tenabled\t: Boolean(this.val.getVal('save:const.sn.autowc.enabled')),\n\t\t\ttext\t: String(this.val.getVal('save:const.sn.autowc.text')),\n\t\t\ttime\t: Number(this.val.getVal('save:const.sn.autowc.time')),\n\t\t};\n\t\tthis.hTag.autowc(o);\n\n\t\tthis.#aIfStk = [...this.#mark.aIfStk];\n\t\tthis.#aCallStk = [];\n\t\tCmnTween.stopAllTw();\n\n\t\tconst p = Promise.allSettled([...ap, ...this.#layMng.playback(this.#mark.hPages)])\n\t\t.then(()=> this.#layMng.cover(false));\n\t\tconst {index, fn} = hArg;\n\t\tif (index) {\t// ページ移動用\n\t\t\tif (CmnLib.debugLog) console.log(`📜 %cloadFromMark index:${String(index)} move!%c fn:${fn ?? ''}`, 'color:#3B0;', '');\n\t\t\tp.then(()=> {\n\t\t\t\tif (! this.#jumpWork(fn, '', index)) this.main.resume();\n\t\t\t\t// if (ret)\t\t// 中で非同期で endProc() を呼ぶのでまかせる\n\t\t\t\t// if (! ret)\t// 同期でなにもせずすぐ返る\n\t\t\t})\n\t\t\t.catch((e: unknown)=> console.error('loadFromMark e:%o', e));\n\t\t\treturn true;\n\t\t}\n\n\t\tthis.#layMng.cover(true);\t// ページ移動では全画面黒で覆わない\n\t\tconst fn2 = String(this.val.getVal('save:const.sn.scriptFn'));\n\t\tconst idx = Number(this.val.getVal('save:const.sn.scriptIdx'));\n\t\t// eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\t\tdelete this.#hScript[fn2];\t// 必ずスクリプトを再読込。吉里吉里に動作を合わせる\n\t\tconst {label} = hArg;\n\t\tp.then(label ?()=> {\n\t\t\tthis.#scriptFn = fn2;\n\t\t\tthis.#idxToken = idx;\n\t\t\tif (! this.hTag.call({\n\t\t\t\t...fn ?{fn} :{},\n\t\t\t\tlabel,\n\t\t\t})) this.main.resume();\n\t\t}\n\t\t: ()=> {\n\t\t\tif (! this.#jumpWork(fn2, '', idx)) this.main.resume();\n\t\t})\n\t\t.catch((e: unknown)=> console.error('loadFromMark e:%o', e));\n\n\t\treturn true;\n\t}\n\n\t//MARK: スクリプト再読込\n\t#reload_script(hArg: TArg) {\t// 最後の[record_place]から再開\n\t\tconst mark = this.val.getMark(0);\n\t\tif (! mark) return false;\n\n\t\t// 起動から再読込までの間に追加・変更・削除されたファイルがあるかも、に対応\n\t\t//\tdelete this.hScript[this.#scriptFn];\t// これだと[reload_script]位置になる\n\t\t// eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\t\tdelete this.#hScript[getFn(mark.hSave['const.sn.scriptFn'])];\n\n\t\t// 派生ファイルを削除\n\t\tconst h: HScript = {};\n\t\tfor (const fn in this.#hScript) {\n\t\t\ttry {this.#cnvSnPath(fn +'@')}\n\t\t\tcatch {h[fn] = this.#hScript[fn]!}\t// 派生ファイル以外を残す\n\t\t}\n\t\tthis.#hScript = h;\n\n\t\thArg.do_rec = false;\n\t\treturn this.loadFromMark(hArg, mark, SndProcOnLoad.NO_TOUCH);\n\t}\n\n\n\t//MARK: セーブポイント指定\n\t#mark: T_Mark = {\n\t\thSave\t: creSAVEDATA(),\n\t\thPages\t: {},\n\t\taIfStk\t: [-1],\n\t};\n\t#record_place = ()=> {\n\t\tconst {fn, idx} = this.nowScrIdx();\n\t\tthis.val.setVal_Nochk('save', 'const.sn.scriptFn', fn);\n\t\tthis.val.setVal_Nochk('save', 'const.sn.scriptIdx', idx);\n\t\tthis.#mark = {\n\t\t\thSave\t: this.val.cloneSave(),\n\t\t\thPages\t: this.#layMng.record(),\n\t\t\taIfStk\t: this.#aIfStk.slice(this.#aCallStk.length),\n\t\t};\n\n\t\treturn false;\n\t}\n\tnowScrIdx(): {fn: string, idx: number} {\n\t\tconst len = this.#aCallStk.length;\n\t\tif (len === 0) return {\n\t\t\tfn\t: this.#scriptFn,\n\t\t\tidx\t: this.#idxToken,\n\t\t};\n\n\t\tconst cs = this.#aCallStk[0]!;\n\t\treturn {\n\t\t\tfn\t: cs.fn,\n\t\t\tidx\t: cs.idx,\n\t\t}\n\t}\n\tnowMark(): T_Mark {return {...this.#mark}}\t// コピーはここでする\n\n\t//MARK: スクリプト停止位置(マクロなどなら最上位の呼び元)\n\tnowScrFnLn(): {fn: string, ln: number, col_s: number, col_e: number} {\n\t\tconst {fn, idx} = this.nowScrIdx();\n\t\tconst st = this.#hScript[fn]!;\n\t\tconst o = this.#cnvIdx2lineCol(st, idx);\t// -1不要\n\t\treturn {fn, ...o};\n\t}\n\n\t//MARK: しおりの保存\n\t#save(hArg: TArg) {\n\t\tif (! ('place' in hArg)) throw 'placeは必須です';\n\t\tconst place = hArg.place;\n\n\t\tdelete hArg[':タグ名'];\n\t\tdelete hArg.place;\n\t\thArg.text = hArg.text ?? '';\n\t\tthis.#mark.json = hArg;\n\t\tthis.val.setMark(place, this.#mark);\n\n\t\tconst now_sp = Number(this.val.getVal('sys:const.sn.save.place'));\n\t\tif (place === now_sp) this.val.setVal_Nochk('sys', 'const.sn.save.place', now_sp +1);\n\n\t\treturn false;\n\t}\n\n\n\trecodeDesign(hArg: TArg) {\n\t\tlet fn = '';\n\t\tlet idx = 0;\n\n\t\tconst len = this.#aCallStk.length;\n\t\tif (hArg.design_unit && len > 0) {\n\t\t\t// デザインモードでこのマクロへの引数変更とするか(内部をサーチさせない)\n\t\t\tconst cs = this.#aCallStk[0]!;\n\t\t\tfn = cs.fn;\n\t\t\tidx = cs.idx;\n\t\t}\n\t\telse {\n\t\t\tfn = this.#scriptFn;\n\t\t\tidx = this.#idxToken;\n\t\t}\n\t\thArg[':path']\t= this.#cnvSnPath4Dbg(fn);\n\t\tconst scr = this.#hScript[fn]!;\n\t\tconst lc = this.#cnvIdx2lineCol(scr, idx);\n\t\thArg[':ln']\t\t= lc.ln;\n\t\thArg[':col_s']\t= lc.col_s;\n\t\thArg[':col_e']\t= lc.col_e;\n\t\tconst idx_1 = idx -1;\n\t\thArg[':idx_tkn']= idx_1;\n\t\thArg[':token']\t= scr.aToken[idx_1] ?? '';\n\n\t\tthis.sys.send2Dbg('_recodeDesign', hArg);\n\t}\n\treplace(idx: number, val: string) {this.#script.aToken[idx] = val}\n\n}\n"],"mappings":"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"}
|