@famibee/skynovel 2.0.2 → 2.0.3
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/dist/Button.js +36 -34
- package/dist/Button.js.map +1 -1
- package/dist/CallStack.js +11 -6
- package/dist/CallStack.js.map +1 -1
- package/dist/CmnInterface.js +13 -11
- package/dist/CmnInterface.js.map +1 -1
- package/dist/CmnLib.js +58 -56
- package/dist/CmnLib.js.map +1 -1
- package/dist/Config.js +9 -7
- package/dist/Config.js.map +1 -1
- package/dist/ConfigBase.js +52 -49
- package/dist/ConfigBase.js.map +1 -1
- package/dist/DebugMng.js +9 -6
- package/dist/DebugMng.js.map +1 -1
- package/dist/EventListenerCtn.js +6 -4
- package/dist/EventListenerCtn.js.map +1 -1
- package/dist/EventMng.js +522 -417
- package/dist/EventMng.js.map +1 -1
- package/dist/Grammar.js +22 -20
- package/dist/Grammar.js.map +1 -1
- package/dist/GrpLayer.js +58 -57
- package/dist/GrpLayer.js.map +1 -1
- package/dist/Layer.js +66 -64
- package/dist/Layer.js.map +1 -1
- package/dist/LayerMng.js +461 -441
- package/dist/LayerMng.js.map +1 -1
- package/dist/Main.js +69 -67
- package/dist/Main.js.map +1 -1
- package/dist/PropParser.js +23 -19
- package/dist/PropParser.js.map +1 -1
- package/dist/Reading.js +422 -418
- package/dist/Reading.js.map +1 -1
- package/dist/RubySpliter.js +4 -2
- package/dist/RubySpliter.js.map +1 -1
- package/dist/ScriptIterator.js +374 -370
- package/dist/ScriptIterator.js.map +1 -1
- package/dist/SndBuf.js +643 -622
- package/dist/SndBuf.js.map +1 -1
- package/dist/SoundMng.js +59 -60
- package/dist/SoundMng.js.map +1 -1
- package/dist/SpritesMng.js +135 -129
- package/dist/SpritesMng.js.map +1 -1
- package/dist/SysBase.js +985 -950
- package/dist/SysBase.js.map +1 -1
- package/dist/TxtLayer.js +558 -551
- package/dist/TxtLayer.js.map +1 -1
- package/dist/Variable.js +47 -45
- package/dist/Variable.js.map +1 -1
- package/dist/chunk.js +11 -9
- package/dist/gamepad.js +396 -660
- package/dist/gamepad.js.map +1 -1
- package/dist/pixi.js +2631 -2593
- package/dist/pixi.js.map +1 -1
- package/dist/platform.js +6 -4
- package/dist/platform.js.map +1 -1
- package/dist/rolldown-runtime.js +20 -0
- package/dist/web.js +418 -418
- package/dist/web.js.map +1 -1
- package/dist_app/Button.js +36 -34
- package/dist_app/Button.js.map +1 -1
- package/dist_app/CallStack.js +11 -6
- package/dist_app/CallStack.js.map +1 -1
- package/dist_app/CmnInterface.js +13 -11
- package/dist_app/CmnInterface.js.map +1 -1
- package/dist_app/CmnLib.js +58 -56
- package/dist_app/CmnLib.js.map +1 -1
- package/dist_app/Config.js +9 -7
- package/dist_app/Config.js.map +1 -1
- package/dist_app/ConfigBase.js +52 -49
- package/dist_app/ConfigBase.js.map +1 -1
- package/dist_app/DebugMng.js +9 -6
- package/dist_app/DebugMng.js.map +1 -1
- package/dist_app/EventListenerCtn.js +6 -4
- package/dist_app/EventListenerCtn.js.map +1 -1
- package/dist_app/EventMng.js +522 -417
- package/dist_app/EventMng.js.map +1 -1
- package/dist_app/Grammar.js +22 -20
- package/dist_app/Grammar.js.map +1 -1
- package/dist_app/GrpLayer.js +58 -57
- package/dist_app/GrpLayer.js.map +1 -1
- package/dist_app/Layer.js +66 -64
- package/dist_app/Layer.js.map +1 -1
- package/dist_app/LayerMng.js +461 -441
- package/dist_app/LayerMng.js.map +1 -1
- package/dist_app/Main.js +69 -67
- package/dist_app/Main.js.map +1 -1
- package/dist_app/PropParser.js +23 -19
- package/dist_app/PropParser.js.map +1 -1
- package/dist_app/Reading.js +422 -418
- package/dist_app/Reading.js.map +1 -1
- package/dist_app/RubySpliter.js +4 -2
- package/dist_app/RubySpliter.js.map +1 -1
- package/dist_app/ScriptIterator.js +374 -370
- package/dist_app/ScriptIterator.js.map +1 -1
- package/dist_app/SndBuf.js +643 -622
- package/dist_app/SndBuf.js.map +1 -1
- package/dist_app/SoundMng.js +59 -60
- package/dist_app/SoundMng.js.map +1 -1
- package/dist_app/SpritesMng.js +135 -129
- package/dist_app/SpritesMng.js.map +1 -1
- package/dist_app/SysBase.js +985 -950
- package/dist_app/SysBase.js.map +1 -1
- package/dist_app/TxtLayer.js +558 -551
- package/dist_app/TxtLayer.js.map +1 -1
- package/dist_app/Variable.js +47 -45
- package/dist_app/Variable.js.map +1 -1
- package/dist_app/app.js +62 -63
- package/dist_app/app.js.map +1 -1
- package/dist_app/appMain.js +11 -11
- package/dist_app/appMain.js.map +1 -1
- package/dist_app/chunk.js +11 -9
- package/dist_app/gamepad.js +396 -660
- package/dist_app/gamepad.js.map +1 -1
- package/dist_app/pixi.js +2028 -1990
- package/dist_app/pixi.js.map +1 -1
- package/dist_app/platform.js +6 -4
- package/dist_app/platform.js.map +1 -1
- package/dist_app/preload.js +1 -1
- package/dist_app/preload.js.map +1 -1
- package/dist_app/rolldown-runtime.js +20 -0
- package/package.json +20 -21
|
@@ -1 +1 @@
|
|
|
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":";;;;;;;;;;;AAyCA,IAAW,aAAA,yBAAA,GAAX;QAAuB,EAAA,EAAA,UAAA,KAAA,WAAS,EAAA,EAAA,OAAA,KAAA,QAAM,EAAA,EAAA,QAAA,KAAA,SAAO,EAAA,EAAA,WAAA,KAAA,YAAU,EAAA,EAAA,OAAA,KAAA,QAAM,EAAA,EAAA,WAAA,KAAA,YAAU,EAAA,EAAA,aAAA,KAAA,cAAY,EAAA,EAAA,UAAA,KAAA;EAAxE,cAAA,EAAA,CAAA,EAEA,gBAAA,yBAAA,GAAX;QACC,EAAA,EAAA,eAAA,KAAA,gBACA,EAAA,EAAA,WAAA,KAAA,YACA,EAAA,EAAA,oBAAA,KAAA;EAHU,iBAAA,EAAA,CAAA,EAOE,iBAAb,MAAa,EAAe;CAC3B,KAAoB;EAAC,QAAQ,CAAC,GAAG;EAAE,KAAK;EAAG,OAAO,CAAC,EAAE;EAAC;CAEtD,KAAY;CACZ,IAAI,WAAW;AAAC,SAAO,MAAA;;CACvB,KAAY;CACZ,IAAI,WAAW;AAAC,SAAO,MAAA;;CACvB,cAAc;AAAC,IAAE,MAAA;;CACjB,KAAW;CACX,IAAI,UAAU;AAAC,SAAO,MAAA;;CACtB,cAAuB,MAAe;AAAC,QAAA,KAAiB;;CACxD,iBAAiB;AAAC,QAAA,EAAe,MAAA,GAAgB,IAAI,EAAE,MAAA,EAAe;;CAItE,KAA0B,EAAE;CAE5B;CACA,KAAsB,IAAI,eAAa;CAIvC,YAAY,GAA8B,GAA+B,GAA+B,GAAkC,GAAuC,GAAmC,GAA+B;AA6ClP,EA7C4B,KAAA,MAAA,GAA8B,KAAA,OAAA,GAA+B,KAAA,OAAA,GAA+B,KAAA,MAAA,GAAkC,KAAA,SAAA,GAAuC,KAAA,SAAA,GAAmC,KAAA,MAAA,GAEpO,EAAK,UAAU,MAAI,MAAA,EAAa,EAAE,EAClC,EAAK,kBAAiB,IAItB,EAAK,mBAAkB,MAAA,GAAkB,EACzC,EAAK,eAAa,MAAI,MAAA,EAAkB,EAAE,EAG1C,EAAK,OACL,EAAK,QACL,EAAK,cAAc,MAAA,GAAa,EAChC,EAAK,MAAO,MAAI,MAAA,EAAS,EAAE,EAI3B,EAAK,QAAQ,MAAI,MAAA,EAAW,EAAE,EAC9B,EAAK,QAAQ,MAAI,MAAA,EAAW,EAAE,EAE9B,EAAK,aAAY,MAAI,MAAA,EAAgB,EAAE,EACvC,EAAK,UAAU,MAAI,MAAA,EAAa,EAAE,EAGlC,EAAK,iBAAgB,MAAI,MAAA,GAAoB,EAAE,EAC/C,EAAK,cAAc,MAAI,MAAA,GAAiB,EAAE,EAC1C,EAAK,YAAY,MAAI,MAAA,EAAa,EAAE,EACpC,EAAK,SAAU,MAAI,MAAA,GAAY,EAAE,EAKjC,EAAK,QAAS,MAAI,MAAA,GAAW,EAAE,EAC/B,EAAK,iBAAgB,MAAI,MAAA,GAAoB,EAAE,EAC/C,EAAK,qBAAoB,MAAA,IAAoB,EAC7C,EAAK,QAAS,MAAI,MAAA,GAAW,EAAE,EAG3B,EAAI,KAAK,MAAM,UAAO,MAAA,KAAiB,MAAQ;AAAC,GAAI,EAAM,MAAM,KAAK,MAAI,QAAQ,IAAI,WAAW,MAAA,EAAe,GAAG,OAAO,MAAA,EAAc,CAAC,MAAM,OAAO,MAAA,EAAe,CAAC,MAAM,OAAO,MAAA,EAAe,OAAO,CAAC,OAAO,EAAM,IAAI,yBAAyB;MACnP,EAAI,KAAK,MAAM,QAAK,MAAA,KAAqB,MAAW,QAAQ,IAAI,WAAW,MAAA,EAAe,GAAG,OAAO,MAAA,EAAc,CAAC,MAAM,OAAO,MAAA,EAAe,CAAC,MAAM,OAAO,MAAA,EAAe,OAAO,CAAC,OAAO,EAAS,OAAO,0BAA0B,MAAA,EAAgB,KAAK,GAE9P,EAAI,OAAO,gCAA+B,MAAA,EAAa,OAAO,EAC9D,EAAI,OAAO,oCAAmC,MAAA,EAAe,OAAO,EAEpE,MAAA,IAAY,IAAI,QAAQ,EAAI;EAE5B,IAAM,IAAK,EAAI,KAAK,KAAK;AAIzB,MAHA,MAAA,EAAU,UAAU,EAAG,EACvB,YAAY,UAAU,EAAG,EAErB,OAAO,OAAO;AAOjB,GALW,MAAA,GAGX,EAAI,SAAS,GAAM,MAAK,MAAA,EAA8B,KAAS,EAAE,CAAC,EAElE,KAAK,WAAU,MAAQ,MAAA,EAAmB,EAAM;GAEhD,IAAM,UAAW,KAAK,aAAa;AAKnC,GAJA,KAAK,oBAAmB;AAEvB,IADA,KAAK,oBAAmB,IACxB,KAAK,IAAI,SAAS,MAAM,EAAE,CAAC;MAE5B,MAAA,EAAY,QAAO,MAAI;IAEtB,IAAM,IAAU,EAAE,YAAY;AAE9B,SAAK,IAAM,CAAC,GAAI,MAAM,OAAO,QAAQ,EAAQ,CAAE,OAAA,EAAoB,GAAS,EAAE;AAE9E,OAAA,IAA0B,EAAE;AAE5B,SAAK,IAAM,KAAK,EAAE,YAAY,MAE7B,IAAA,EAAwB,EAAE,QAAQ;AAInC,QAAI,EAAE,aAAa;KAClB,IAAI;AAEJ,YAAO,IAAM,KAAK,WAAW,GAAE;MAG9B,IAAM,IAAK,EAAI,WAAW,EAAE;AAG5B,UAFI,MAAO,MACP,MAAO,MACP,MAAO,MAAM,EAAI,WAAW,EAAG;AACnC,MAAI,MAAO,OAAI,MAAA,KAAiB,EAAI;;AAIrC,KAFA,KAAK,IAAI,SAAS,eAAe,EAAE,CAAC,EACpC,KAAK,cAAc,GACnB,KAAK,aAAa;UAYlB,CATA,KAAK,mBAAkB;AAEtB,KADA,KAAK,mBAAkB,IACvB,KAAK,IAAI,SAAS,eAAe,EAAE,CAAC;OAMrC,KAAK,cAAc,GACnB,KAAK,aAAa;;QAIhB,MAAK,qBAAoB;;CAE/B,mBAAkB;CAClB,GAAe,GAAY,GAAwB;AAClD,KAAA,EAA4B,MAAA,EAAoB,EAAG,IAAI;;CAGxD,UAAU;AAAC,OAAK,UAAU,MAAA,WAA0B;;CAGpD,KAAqD;EACpD,YAAW;EAEX,kBAAiB;AAMhB,GALA,GAAA,IAA8B,EAAE,EAChC,GAAA,IAA0B,EAAE,EAC5B,KAAK,gBAAe,IAEpB,MAAA,EAAY,SAAU,EAAE,CAAC,EACzB,MAAA,IAAmB,WAAW;;EAE/B,eAAc;AAAC,QAAK,gBAAe;;EAInC,YAAW,MAAI,MAAA,EAAoB,EAAE,IAAI,EAAE,EAAE;EAC7C,aAAY,MAAI;AACX,SAAA,MAAqB,WAAW,YAEpC,MAAA,IAAmB,WAAW,MAE9B,KAAK,KAAK,QAAQ,IAAO,MAAM,OAAO,EAAE,OAAO,CAAC,GAAG,OAAO,EAAE,MAAM,CAAC,KAAK,OAAO,EAAE,MAAM,CAAC,UAAU,EAClG,KAAK,IAAI,SAAS,wBAAwB,EAAE,CAAC,EAC7C,KAAK,IAAI,SAAS,wBAAwB,EAAE,CAAC;;EAE9C,iBAAgB,MAAI;AACnB,MAAA,IAA0B,EAAE;AAE5B,QAAK,IAAM,KAAK,EAAE,EAAG,IAAA,EAAwB,EAAE,QAAQ;AAEvD,QAAK,IAAI,SAAS,EAAE,IAAI,EAAE,CAAC;;EAK5B,QAAO,MAAI,KAAK,IAAI,SAAS,EAAE,IAAI,EAAC,GAAG,MAAA,GAAc,EAAC,CAAC;EAEvD,OAAM,MAAI;AAAC,QAAK,IAAI,SAAS,EAAE,IAAI,EAAC,GAAG,KAAK,OAAO,MAAM,EAAE,IAAI,EAAC,CAAC;;EAGjE,gBAAe;AACV,SAAA,GAAqB,KAEzB,MAAA,KAAkB,MAAA,GAClB,MAAA,IAAmB,WAAW,UAC9B,KAAK,KAAK,QAAQ,GAAK,EACvB,KAAK,KAAK,QAAQ;;EAEnB,WAAU,MAAI,MAAA,EAAkB,EAAE;EAClC,cAAa;AACZ,OAAI,MAAA,GAAqB,CAAE;GAE3B,IAAM,IAAM,MAAA,EAAa,OAAO,MAAA,IAAgB,MAAA;AAQhD,GAPA,KAAK,IAAI,SAAS,aAAa,MAAA,GAAgB,KAAK,KAAO,GAAG,GAAE,OAAM,MAAM,EAAE,CAAC,EAE/E,MAAA,KAAkB,MAAA,GAClB,MAAA,IAAmB,MAAA,MAAqB,WAAW,OAChD,WAAW,OACX,WAAW,UACd,KAAK,KAAK,QAAQ,GAAK,EACvB,KAAK,KAAK,QAAQ;;EAEnB,UAAS,MAAI;AACR,SAAA,GAAqB,KAErB,MAAA,EAAe,SAAS,IAAG,MAAA,EAAiB,GAAK,GAChD,MAAA,EAAkB,EAAE;;EAE1B,aAAY;AAGX,GAFA,MAAA,IAAmB,WAAW,MAC9B,KAAK,KAAK,QAAQ,IAAO,OAAO,EAChC,KAAK,IAAI,SAAS,cAAc,EAAE,CAAC;;EAEpC,mBAAkB;AAGjB,GAFA,MAAA,IAAmB,WAAW,MAC9B,KAAK,KAAK,QAAQ,IAAO,OAAO,EAChC,KAAK,IAAI,SAAS,eAAe,EAAE,CAAC;;EAErC;CACD,MAAuB,MAAc,KAAK,IAAI,WAAW,GAAI,oBAAoB,OAAO;CACxF,MAA2B,MAC1B,KAAK,IAAI,wBAAwB,MAAA,EAAgB,EAAG;CACrD,GAAa,GAAQ;AACpB,MAAI,MAAA,GAAqB,CAAE;EAE3B,IAAM,IAAM,MAAA,EAAa,OAAO,MAAA,IAAgB,MAAA;AAChD,EAAI,MAAA,GAAgB,KAAK,KAAO,GAAG,GAAE,MAAA,EAAiB,GAAM,IAE3D,KAAK,IAAI,SAAS,cAAc,EAAE,CAAC,EACnC,MAAA,EAAY,OAAQ,EAAE;;CAGxB,GAAY,GAAc;AAMzB,EALA,KAAK,IAAI,SAAS,aAAa,IAAK,QAAO,MAAM,EAAE,CAAC,EACpD,MAAA,IAA0B,MAAA,EAAe,UAAS,IAAK,IAAG,IAC1D,MAAA,KAAkB,MAAA,GAClB,MAAA,IAAmB,IAAK,WAAW,UAAS,WAAW,YACvD,KAAK,KAAK,QAAQ,GAAK,EACvB,KAAK,KAAK,QAAQ;;CAEnB,KAAqB;CACrB,KAAA,IAAiB;AAChB,SAAO,MAAA,MAAqB,WAAW,SACnC,MAAA,MAAqB,WAAW,OAAM,IAAG;;CAE9C,KAA0B;AAIzB,SAHI,MAAA,IAAiB,MAAA,EAAa,MAAY,MAC9C,KAAK,IAAI,SAAS,eAAe,EAAE,CAAC,EACpC,KAAK,KAAK,QAAQ,IAAO,0BAA0B,EAC5C;;CAIR,QAAA,IAA2D,EAAE;CAC7D,QAAA,IAA2C,EAAE;CAC7C,KAAc,WAAW;CAEzB,WAAW,MAAkB;CAC7B,GAAc,GAAwB;AACrC,UAAQ,MAAA,GAAR;GACC,KAAK,WAAW;AACf,IAD2B,MAAA,GAAuB,EAClD,MAAA,IAAmB,WAAW;AAAS;GACxC,KAAK,WAAW;AACf,QAAI,MAAA,EAAe,WAAW,MAAA,EAAyB;AAKvD,WAHA,MAAA,IAAmB,WAAW,MAC9B,KAAK,KAAK,QAAQ,IAAO,SAAS,EAClC,KAAK,IAAI,SAAS,cAAc,EAAE,CAAC,EAC5B;GAER,KAAK,WAAW;AACf,IADyB,MAAA,GAAuB,EAChD,MAAA,IAAmB,WAAW;AAAM;GACrC,KAAK,WAAW,KAGf,QAHsB,MAAA,GAAuB,EAC7C,KAAK,KAAK,QAAQ,IAAO,SAAS,EAClC,KAAK,IAAI,SAAS,cAAc,EAAE,CAAC,EAC5B;GAER,KAAK,WAAW;AACf,IADyB,MAAA,GAAuB,EAChD,MAAA,IAAmB,WAAW;AAAS;GAExC;AAEC,QAAI,cAAc,EAAM,IAAI,GAAA,EAK3B,QAJA,MAAA,IAAmB,WAAW,OAC9B,KAAK,KAAK,QAAQ,IAAO,MAAM,EAAM,OAAO,EAC5C,KAAK,IAAI,SAAS,oBAAoB,EAAE,CAAC,EACzC,KAAK,IAAI,SAAS,oBAAoB,EAAE,CAAC,EAClC;IAGT;KACC,IAAM,IAAK,GAAA,EAA4B,MAAA,EAAoB,MAAA,EAAe;AAC1E,SAAI,CAAE,EAAI;KAEV,IAAM,IAAI,EAAG,MAAA;AACb,SAAI,CAAE,EAAG;AAIT,SAAI,EAAE;UAAgB,CAAE,KAAK,OAAO,MAAM,EAAE,UAAU,CAAE;gBAG/C,kBAAkB,KAAK,EAAE,EAAE,eAAe,EAAG;KACtD,IAAM,IAAU,MAAA,MAAqB,WAAW;AAEhD,KADA,MAAA,IAAmB,WAAW,OAC9B,KAAK,KAAK,QAAQ,IAAO,KAEvB,EAAE,YAAY,OAAM,aAAY,SAC/B,SAAS;KACZ,IAAM,IAAO,IAAS,qBAAoB;AAE1C,KADA,KAAK,IAAI,SAAS,GAAM,EAAE,CAAC,EAC3B,KAAK,IAAI,SAAS,GAAM,EAAE,CAAC;;AAE3B,WAAO;;AAGT,SAAO;;CAER,KAAmB;EAClB,IAAM,IAAI,GAAA,EAA4B,MAAM,MAAA,EAAe,IAAI,MAAA;AAE/D,EAAI,GAAG,gBAAc,EAAE,EAAE;;CAG1B,KAA2E;EAC1E,IAAM,IAAQ,MAAA,MAAqB,WAAW,WAAU,IAAG,GACrD,IAAO,MAAA,EAAa,OAAO,MAAA,IAAgB,IAAG,IAE9C,IAAM,MAAA,EAAoB,MAAA,EAAe,EACzC,IAAY,cAAc,EAAK,EAC/B,IAAK,IAAW,IAAI,EAAU,KAAI,GAGlC,IAAK,OAAO,KAAK,IAAI,OAAO,oBAAoB,IAAI,KAAK;AAC/D,MAAI,MAAA,MAAmB,EAAG,QAAO,CAAC;GAAC,IAAI;GAAK,IAAI;GAAG,KAAK;GAAG;GAAI;GAAG,CAAC;EAEnE,IAAM,IAAM,MAAA,EAAqB,MAAA,GAAc,MAAA,EAAe,EAExD,IAAI,CAAC;GAAC,IAAI;GAAK,IAAI,EAAI;GAAI,KAAK,EAAI,QAAO;GAAG;GAAI;GAAG,CAAC,EACtD,IAAM,MAAA,EAAe;AAC3B,MAAI,MAAQ,EAAG,QAAO;AAEtB,OAAK,IAAI,IAAE,IAAK,GAAG,KAAG,GAAG,EAAE,GAAG;GAC7B,IAAM,IAAK,MAAA,EAAe,IACpB,IAAK,MAAA,GAAc,EAAG;AAC5B,OAAI,CAAE,EAAI;GACV,IAAM,IAAM,EAAG,OAAO,EAAG,MAAK;AAC9B,OAAI,CAAE,EAAK;GACX,IAAM,IAAK,MAAA,EAAqB,GAAI,EAAG,IAAI,EAErC,IAAW,cAAc,EAAI;AACnC,KAAE,KAAK;IACN,IAAK,MAAA,EAAoB,EAAG,GAAG;IAC/B,IAAK,EAAG;IACR,KAAM,EAAG,QAAO;IAChB,IAAK,IAAU,IAAI,EAAS,KAAI;IAChC,IAAK,EAAG,MAAM,QAAQ;IACtB,CAAC;;AAGH,SAAO;;CAIR,MAAiB,MAAqB;CAEtC,MAAM,KAAK,GAAkB,GAAgC;EAC5D,IAAM,IAAU,KAAK,KAAmB;AAExC,MAAI,CAAE,EAAS,OAAM,UAAU,EAAS;AAGxC,EADA,MAAA,EAAgB,MAAM,EAAK,EAC3B,MAAA,EAAmB,EAAS;EAE5B,IAAM,IAAO,MAAA,EAAgB;AAC7B,MAAI,EAAK,MAAM;GACd,IAAM,IAAO,EAAK,KAAK;AACvB,OAAI,CAAE,KAAQ,EAAK,WAAW,IAAI,CAAE,OAAM;GAC1C,IAAM,IAAI,KAAK,OAAO,MAAM,EAAK,EAC3B,IAAK,OAAO,EAAE;AAEpB,OADI,MAAO,UAAU,MAAO,eACxB,CAAE,EAAG,QAAO;;EAGjB,IAAIoD,IAAa,EAAE,EACbC,IAAqB,MAAA,EAAe,GAAG,GAAG,EAAE,SAAS,UAAU,EAE/D,IAAM,MAAA,EAAe;AAC3B,MAAI,MAAA,EAAgB,aAAa;AAChC,OAAI,MAAQ,EAAG,OAAM;AACrB,OAAO,EAAC,GAAG,GAAI;;AAEhB,IAAK,UAAU;AA4Bf,OAAK,IAAM,CAAC,GAAQ,EAAC,QAAK,aAAS,OAAO,QAAQ,EAAK,EAAE;GACxD,IAAI,IAAI;AACR,OAAI,EAAI,WAAW,IAAI,EAAE;AACxB,QAAI,MAAQ,EAAG,OAAM;IAErB,IAAM,IAA4B,EAAK,EAAE,MAAM,EAAE;AACjD,QAAI,GAAK;AAAuB,OAAM,KAAU;AAAK;;AAErD,QAAI,MAAQ,KAAA,KAAa,MAAQ,OAAQ;AAEzC,QAAI;;AAKL,OADA,IAAI,KAAK,OAAO,gBAAgB,KAAK,GAAG,EACpC,MAAM,aAAa;AAAuB,MAAM,KAAU;AAAG;;AAE7D,SAAQ,KAAA,MACZ,IAAI,KAAK,OAAO,gBAAgB,EAAI,EAChC,MAAM,gBAAmC,EAAM,KAAU;;AAK9D,MAAI,QAAQ,aAAa,MAAA,EAAkB,IAAI,EAAS,EAAE;GACzD,IAAM,EAAC,YAAS,eAAW,QAAQ,eAAe;AAIlD,GAHA,QAAQ,UAAU,qBAAoB,EAAQ,EAAE,EAAE,UAAY,EAAQ,EAAE,CAAC,EACzE,QAAQ,OAAO,EACf,KAAK,IAAI,YAAY,EACrB,MAAM;;AAGP,EAAI,MAAA,EAAyB,IAAI,EAAS,KACzC,MAAA,EAAa,UAAU,EACvB,SAAS,cAAc;EAGxB,IAAM,IAAY,MAAA,EAAsB;AAKxC,SAJI,KACA,eAAe,GAAM,WAAW,MAAA,EAAmB,MAAa,GAAK,IACrE,MAAA,EAAa,aAAmB,EAAU,EAAK,GAE5C,EAAQ,EAAK;;CAIpB,KAAwB,IAAI,IAAI;EAqB/B;EACA;EAUA;EAyBA;EAaA;EACA;EACA;EAEA;EACA;EAcA;EACA;EACA;EACA;EAgCA;EAEA;EAqBA,CAAC;CACF,KAA+B,IAAI,IAAI;EACtC;EACA;EACA;EACA;EACA;EACA,CAAC;CAEF,KAAwD;EACvD,WAAc,SAAS,cAAc,EAAS;EAE9C,WAAa,MAAI,KAAK,KAAK,SAAS,EAAE;EAEtC,YAAgB;EAGhB,UAAY,KAAK,KAAK,WAAW,EAAC,KAAA,OAAa,CAAC;EAEhD,KAAO,MAAI,KAAK,KAAK,WAAW,EAAE;EAElC,UAAY,KAAK,KAAK,WAAW,EAAE,CAAC;EAKpC,aAAgB;EAChB;CAED,KAAwD;EAEvD,IAAQ;EACR,UAAa;EACb,IAAQ;EACR,MAAU;EACV,SAAY;EACZ,QAAW;EACX,IAAQ;EACR,IAAQ;EACR,IAAQ;EACR,IAAQ;EACR;CAGF;CACA;CACA,YAAY,GAAkB,GAAwB;AAErD,EADA,MAAA,IAAe,GACf,MAAA,IAAe;;CAKhB,GAAQ,GAAY;EACnB,IAAM,EAAC,YAAQ;AACf,MAAI,CAAE,EAAM,OAAM;EAElB,IAAI,IAAK,IACH,IAAM,MAAA,EAAa;AACzB,SAAO,MAAA,IAAe,MACrB,IAAK,MAAA,EAAa,OAAO,MAAA,IACrB,MAAO,KAFe,EAAE,MAAA;AAU7B,SANA,EAAK,OAAO,GACZ,EAAK,OAAO,OACZ,KAAK,KAAK,IAAI,EAAK,EACnB,MAAA,KAAkB,GAClB,MAAA,MAAkB,EAAG,MAAM,MAAM,IAAI,EAAE,EAAE,QAElC;;CAKR,KAAc;AACb,MAAI,MAAA,MAAmB,EAGtB,QAFA,QAAQ,MAAM,+BAA+B,MAAA,EAAe,eAAe,EAC3E,QAAQ,UAAU,EACX;EAGR,IAAM,IAAM,MAAA,EAAqB,MAAA,GAAc,MAAA,EAAe,EACxD,IAAM,eAAe,MAAA,EAAe,QAAQ,OAAO,EAAI,GAAG,CAAC,OAAO,OAAO,EAAI,QAAO,EAAE;AAC5F,UAAQ,MAAM,mBAAmB,IAAM;EACvC,IAAM,IAAM,MAAA,EAAe;AAC3B,MAAI,IAAM,GAAG;AACZ,WAAQ,KAAK,EAAI;AACjB,QAAK,IAAI,IAAE,IAAK,GAAG,KAAG,GAAG,EAAE,GAAG;IAC7B,IAAM,IAAK,MAAA,EAAe,IACpB,IAAM,EAAG,MAAM,SAEf,IAAgB,IACW,EAAK,UACnC,KAAA,GACG,IAAU,EAAG,MAAM,WAAW,IAC9B,IAAK,MAAA,EAAqB,MAAA,GAAc,EAAG,KAAK,EAAG,IAAI;AAC7D,YAAQ,KACP,GAAG,OAAO,IAAK,EAAE,CAAC,aAAa,EAAG,GAAG,QACpC,OAAO,EAAG,GAAG,CAAC,OAAO,OAAO,EAAG,QAAO,EAAE,GAExC,IAAe,OAAM,IAAe,WAAU,IAC9C,KAAK,EAAQ,WACd;;;AAKH,SAFA,QAAQ,UAAU,EAEX;;CAER,GAAgB,GAAwB,GAAyD;EAChG,IAAM,IAAM;GAAC,IAAI;GAAG,OAAO;GAAG,OAAO;GAAE;AACvC,MAAI,CAAE,EAAI,QAAO;EAEjB,IAAI,IAAI,IAAK,GACP,IAAK,EAAI,KAAK,EAAG,MAAM;AAC7B,SAAO,EAAG,MAAM,OAAO,IAAI;GAC1B,IAAM,IAAM,EAAG,OAAO;AACtB,OAAI,CAAE,EAAI,WAAW,KAAK,EAAE;IAC3B,IAAM,IAAM,EAAI;AAGhB,IADI,EAAI,QAAQ,MAAG,EAAI,SAAS,IAChC,EAAI,SAAS;;AAEd,OAAI,EAAE,IAAI,EAAG;;AAGd,SAAO;;CAKR,GAAa,GAAY;EACxB,IAAM,EAAC,YAAS,iBAAa;AAC7B,MAAI,CAAE,EAAS,OAAM;AAKrB,MAFA,MAAA,IAAqB,WAAY,IAE7B,CAAE,MAAA,GAAc;AACnB,OAAI,eAAe,GAAM,YAAY,GAAK,CAAE,OAAM,WAAW,EAAQ;AAErE,UADA,MAAA,UAAoB,IACb;;AAcR,MAXA,KAAK,eAAe,MAAiB;AAOpC,GANI,MAAA,MAAsB,MAAA,MACzB,MAAA,IAAoB,MAAA,GACpB,MAAA,EACC,MAAA,EAAqB,MAAA,OAAoB,MAAA,EAAa,OAAO,KAAK,GAAG,CACrE,GAEF,MAAA,EAAe,MAAA,GAAe,EAAK;KAEpC,KAAK,YAAY,GAAK,EAElB,CAAE,EAAW,QAAO;AAKxB,MAFA,MAAA,IAAuB,WAAY,IAE/B,CAAE,MAAA,GAAgB;AACrB,OAAI,eAAe,GAAM,YAAY,GAAK,CAAE,OAAM,WAAW,EAAU;AACvE,SAAA,UAAsB;;AAGvB,SAAO;;CAER,WAAqC;CACrC,WAAqD;CACrD,KAAe;CACf,KAA2C,EAAE;CAC7C,eAAe,MAAkB;CAGjC,KAAe;CACf,kBAAkB;AACjB,MAAI,MAAA,MAAmB,GAAG;AAEzB,GADA,QAAQ,MAAM,yCAAyC,MAAA,IAAiB,EACxE,QAAQ,UAAU;AAClB;;EAGD,IAAI,IAAI;AACR,OAAK,IAAI,IAAE,MAAA,IAAgB,GAAG,KAAG,MAChC,IAAI,OAAO,MAAA,EAAa,OAAO,GAAG,GAAG,GACrC,GAAK,EAAE,MAAM,MAAM,IAAI,EAAE,EAAE,UAAU,MAAA,KAFF,EAAE;EAItC,IAAM,IAAI,EAAE,MAAM,KAAK,CAAC,MAAM,CAAC,MAAA,EAAkB,EAC3C,IAAM,EAAE;AACd,UAAQ,MAAM,uBAAuB,OAAO,EAAI,CAAC,mBAAmB,MAAA,IAAiB;EACrF,IAAM,IAAe,OAAO,MAAA,EAAc,CAAC,QACrC,IAAK,MAAA,EAAqB,MAAA,GAAc,MAAA,EAAe;AAC7D,OAAK,IAAI,IAAE,GAAG,IAAE,GAAK,EAAE,GAAG;GACzB,IAAM,IAAK,MAAA,IAAe,IAAK,IAAG,GAC5B,IAAM,GAAG,OAAO,EAAG,CAAC,SAAS,GAAc,IAAI,CAAC,OAChD,IAAI,EAAE,IACN,IAAO,EAAE,SAAS,KAAI,EAAE,MAAM,GAAG,GAAG,GAAE,MAAK;AACjD,GAAI,MAAM,IAAK,IAAG,QAAQ,KACzB,IAAM,EAAK,MAAM,GAAG,EAAG,MAAM,GAAE,OAAM,EAAK,MAAM,EAAG,MAAM,EACzD,4CAA4C,wCAC5C,GACI,QAAQ,KAAK,IAAM,GAAM,2CAA2C;;AAE1E,UAAQ,UAAU;;CAKnB,KAAqB,CAAC,GAAG;CAEzB,KAAS;EACR,IAAM,IAAI,MAAA,EAAa;AACvB,MAAI,CAAE,EAAG,OAAM;AACf,MAAI,MAAM,GAAI,OAAM;AAKpB,SAHA,MAAA,IAAiB,GACjB,MAAA,EAAa,OAAO,EAEb;;CAGR,GAAI,GAAY;EAEf,IAAM,EAAC,WAAO;AACd,MAAI,CAAE,EAAK,OAAM;AACjB,MAAI,EAAI,WAAW,IAAI,CAAE,OAAM;EAE/B,IAAI,IAAW,GACX,IAAQ,KAAK,OAAO,MAAM,EAAI,GAAE,MAAA,IAAgB,IAC9C,IAAO,MAAA,EAAa,MAAM,MAAA,IAC1B,IAAM,MAAA,MAAiB,KAAQ,MAAM,IACrC,IAAM,MAAA,EAAa;AACzB,SAAO,MAAA,IAAe,GAAK,EAAE,MAAA,GAAgB;GAC5C,IAAM,IAAK,MAAA,EAAa,MAAM,MAAA;AAC9B,SAAA,EAAa,MAAM,MAAA,OAAoB,KAAM,MAAM,KAAI;GACvD,IAAM,IAAM,MAAA,EAAa,OAAO,MAAA;AAEhC,OAAI,CAAE,EAAK;GAEX,IAAM,IAAK,EAAI,WAAW,EAAE;AAC5B,OAAI,MAAO,IAAI;AAAC,UAAA,KAAiB,EAAI;AAAQ;;AAC7C,OAAI,MAAO,GAAI;GAEf,IAAM,CAAC,GAAU,KAAQ,mBAAmB,EAAI;AAChD,OAAI,EAAG,KAAY,KAAK,MAAO,OAAM,UAAU,EAAS;AAGxD,WAFA,MAAA,EAAgB,MAAM,EAAK,EAEnB,GAAR;IACA,KAAK;AAAM,OAAE;AAAU;IAEvB,KAAK;KAAQ;AAEZ,UADI,IAAW,KACX,IAAQ,GAAI;MAEhB,IAAM,IAAI,MAAA,EAAgB,KAAK,KAAK;AACpC,UAAI,CAAE,EAAG,OAAM;AACf,UAAI,EAAE,WAAW,IAAI,CAAE,OAAM;AAC7B,MAAI,KAAK,OAAO,MAAM,EAAE,KAAE,IAAQ,MAAA,IAAgB;;AACjD;IAEF,KAAK;AACJ,SAAI,IAAW,EAAG;AAClB,KAAI,MAAU,OAAI,IAAQ,MAAA,IAAgB;AAC1C;IAED,KAAK;AACJ,SAAI,IAAW,GAAG;AAAC,QAAE;AAAU;;AAW/B,YAVI,MAAU,MACb,EAAE,MAAA,GACF,MAAA,EAAa,MAAM,MAAA,MAAoB,MAGvC,MAAA,EAAa,QAAQ,MAAA,IAAgB,EAAE,EACvC,MAAA,IAAiB,GACjB,MAAA,IAAgB,MAAA,EAAa,MAAM,MAAA,KAG7B;;;AAGT,QAAM;;CAMP,GAAM,GAAY;AACjB,EAAM,eAAe,GAAM,SAAS,GAAM,IAAE,MAAA,IAAmB;EAE/D,IAAM,EAAC,UAAM;AAMb,SALI,KAAI,MAAA,EAAgB,EAAG,EAC3B,MAAA,EAAc,EAAC,GAAG,GAAK,EAAE,aAAa,cAAc,CAAC,EAGjD,eAAe,GAAM,qBAAqB,GAAM,IAAE,KAAK,KAAK,YAAY,EAAE,CAAC,EACxE,MAAA,EAAe,GAAI,EAAK,MAAM;;CAEtC,GAAS,GAAY,GAAwB;EAC5C,IAAMA,IAAqB;GAC1B,GAAG;GACH,GAAG,IAAW,EAAC,cAAc,GAAU,GAAE,EAAE;GAC3C,QAAU,KAAK,IAAI,SAAS;GAC5B,aAAc,MAAA,EAAa;GAC3B;AAID,EAHA,MAAA,EAAa,MAAM,MAAA,KAAkB,MAAA,GAC/B,MAAA,MAAkB,EAAI,gBAAgB,IAAI,MAAA,GAAsB,GACtE,MAAA,EAAe,KAAK,IAAI,UAAU,MAAA,GAAgB,MAAA,GAAgB,EAAI,CAAC,EACvE,MAAA,EAAa,QAAQ,GAAG;;CAIzB,GAAM,GAAY;AAIjB,SAHM,eAAe,GAAM,SAAS,GAAK,IAAE,MAAA,IAAmB,EAE9D,MAAA,EAAa,KAAK,IACX,MAAA,EAAe,EAAK,IAAI,EAAK,MAAM;;CAI3C,GAAW,GAAY;AACtB,MAAI,eAAe,GAAM,SAAS,GAAM,CAAE,OAAA,IAAiB,EAAE;WACpD,CAAE,MAAA,EAAe,KAAK,CAAE,OAAM;AAKvC,SAJA,MAAA,GAAsB,EACtB,MAAA,IAAe,CAAC,GAAG,EACnB,KAAK,IAAI,MAAM,OAAO,CAAC,EAEhB;;CAIR,GAAQ,GAAY;EACnB,IAAM,IAAK,MAAA,EAAe,KAAK;AAC/B,MAAI,CAAE,EAAI,OAAM;EAChB,IAAM,IAAM,EAAG;AACf,QAAA,IAAe,MAAA,EAAa,MAAM,CAAC,EAAI,aAAa;EAEpD,IAAM,IAAM,EAAI;AAEhB,EAAI,KAAK,KAAK,IAAI,MAAM,EAAI;EAI5B,IAAM,IAAc,EAAI;AAOxB,EANI,IAAa,KAAK,mBACrB,MAAA,GAAsB,EACf,KAEH,MAAA,GAAsB,EAEvB,EAAI,iBAAe,aAAa,cAAc,EAAI,cAAc;EAEpE,IAAM,EAAC,OAAI,aAAS;AAIpB,SAHI,KAAM,IAAc,MAAA,EAAe,GAAI,EAAM,GAE7C,EAAG,MAAM,MAAA,MAAgB,MAAA,GAAiB,EAAG,EAAS,MACnD,MAAA,EAAe,EAAG,IAAI,IAAI,EAAG,IAAI;;CAGzC,KAAa;CACb,KAAkB;AAEjB,EADA,MAAA,IAAkB,IAClB,KAAK,kBAAiB,MAAA,GAAsB;;CAI7C,KAAa;CACb,GAAU,IAAK,IAAI,IAAQ,IAAI,IAAM,GAAY;AAahD,MAZI,OAAO,YAAU,QAAQ,IAAI,wBAAwB,EAAG,OAAO,EAAM,OAAO,OAAO,EAAI,IAAI,eAAe,GAAG,EAC7G,CAAE,KAAM,CAAE,KAAO,KAAK,KAAK,UAAU,0BAA0B,EAC/D,KACG,EAAM,WAAW,IAAI,IAAE,KAAK,KAAK,UAAU,wBAAwB,EACzE,MAAA,IAAkB,GACZ,MAAA,EAAgB,WAAW,KAAK,KAAE,MAAA,IAAiB,OAGzD,MAAA,IAAkB,IAClB,MAAA,IAAiB,IAGd,CAAE,EAAyB,QAApB,KAAK,aAAa,EAAS;AACtC,MAAI,EAAG,SAAS,IAAI,CAAE,OAAM;EAE5B,IAAM,IAAY,MAAA,EAAgB,EAAG;AACrC,MAAI,MAAO,MAAA,EAAqC,QAApB,KAAK,aAAa,EAAS;AACvD,QAAA,IAAiB;EACjB,IAAM,IAAK,MAAA,GAAc;AACzB,MAAI,EAA4C,QAAvC,MAAA,IAAe,GAAI,KAAK,aAAa,EAAS;EAEvD,IAAM,IAAe,eAAe;AACpC,UAAQ,UAAU,EAAa;EAC/B,IAAI,IAAU,IACR,IAAM,IAAI,QAAM;AACtB,MAAI;AAIH,GAHA,IAAU,MAAA,EAAgB,IAAI,IAAI,EAElC,EAAI,IAAI;IAAC,MAAM,IAAI;IAAS,KAAK;IAAU,CAAC,EAC5C,EAAI,IAAI;IAAC,MAAM;IAAI,KAAK;IAAQ,CAAC;UAC1B;AAEP,KAAI,IAAI;IAAC,MAAM;IAAI,KAAK;IAAU,CAAC;;AAyCpC,SAvCA,EAAI,KAAK,GAAK,MAAQ;AAErB,QAAK,IAAI,IAAI,EAAI,WAAW,EAAI,KAAK,CAAC,MAAK,MAAI;AAE9C,IADA,EAAI,OAAO,GACX,GAAM;KACL,CACD,OAAO,MAAc;AAErB,IADA,KAAK,KAAK,UAAU,uBAAuB,EAAI,KAAK,GAAG,OAAO,EAAE,IAAI,GAAM,EAC1E,GAAM;KACL;IACD,CACD,MAAM,GAAM,MAAQ;AAEpB,OADA,QAAQ,QAAQ,EAAa,EACzB,GAAS;IACZ,IAAMmB,IAAkB,EAAK,IAAI,SAAU,MACrCC,IAAkB,EAAK,GAAK,MAC5BC,IAAkB,EAAQ,MAAM,KAAK,EACrCC,IAAkB,EAAQ,MAAM,KAAK,EACrC,IAAO,EAAM,QACb,IAAO,EAAM;AAEnB,SAAK,IAAI,IAAE,GAAG,IAAE,KAAQ,IAAE,GAAM,EAAE,EAAG,GAAM,OAAO,EAAM,MAAM;AAK9D,IAFA,EAAK,GAAK,OAAO,EAAM,KAAK,KAAK,EAEjC,OAAO,EAAK,IAAI;;AAUjB,GANA,KAAK,YAAY,MAAA,GACjB,MAAA,IAAgB,GAGhB,MAAA,GAAoB,EAAK,GAAK,KAAK,EACnC,KAAK,KAAK,aAAa,EAAE,CAAC,EAC1B,KAAK,aAAa;IACjB,EAEK;;CAER,cAA4B;AAC3B,EAAI,OAAO,YAAU,QAAQ,IAAI,2BAA2B,MAAA,EAAe,OAAO,MAAA,EAAgB,OAAO,OAAO,MAAA,EAAe,IAAI,eAAe,GAAG;EACrJ,IAAM,IAAI,MAAA,GAAiB,MAAA,GAAc,EAAQ,KAAK,IAAI,OAAO,yBAAyB,EAAG,MAAA,GAAe,MAAA,GAAiB,MAAA,EAAe;AAE5I,EADA,MAAA,IAAiB,EAAE,KACnB,MAAA,IAAgB,EAAE;;CAInB,kBAAiB;CACjB,KAA0B;AACzB,MAAI,MAAA,GAAkB,CAAE,QAAO;AAK/B,EAHA,MAAA,IAAoB,EAGpB,MAAA,EAAa,MAAM,MAAA,OAAoB,MAAA;EACvC,IAAM,IAAQ,MAAA,EAAa,OAAO,MAAA;AAIlC,SAHA,MAAA,EAAe,EAAM,EACrB,EAAE,MAAA,GAEK;;CAER,MAAa,MAAkB;CAC/B,KAAuB;AAGtB,SAFI,MAAA,IAAiB,MAAA,EAAa,MAAY,MAC9C,KAAK,KAAK,UAAU,uBAAuB,EACpC;;CAIR,KAA8B;CAC9B,MAAkC;CAClC,MAAgC;CAChC,IAAY,GAAY,GAAkB,GAAa,GAAoB,GAAoB;EAE9F,IAAM,IAAM,EAAG,OAAO,QAClB,IAAK,GAAK,IAAY;AAC1B,MAAI,CAAE,GAAW;AAChB,OAAI,MAAA,GAAkB,CAAE,QAAO;IAAC;IAAK;IAAG;AAExC,OAAM,EAAG,MAAM,GAYV,KAAK,EAAG,MAAM;QAZE;AACpB,QAAK;AACL,SAAK,IAAI,IAAE,GAAG,IAAE,GAAK,EAAE,GAAG;AAEzB,OAAG,MAAM,OAAO;KAEhB,IAAM,IAAM,EAAG,OAAO;AACtB,KAAI,EAAI,WAAW,KAAK,GAAE,KAAM,EAAI,SAC/B,MAAO,EAAI,MAAM,MAAM,IAAI,EAAE,EAAE;;AAErC,MAAG,MAAM,KAAO;;AAIjB,UAAO;IAAC;IAAK;IAAG;;AAIjB,IAAG,MAAM,KAAK;EACd,IAAM,IAAc,EAAU,MAAM,MAAA,EAAuB;AAC3D,MAAI,GAAa;AAChB,OAAY,EAAY;GACxB,IAAI,IAAI;AACR,WAAQ,EAAY,IAApB;IACA,KAAK;AACJ,YAAO,EAAG,OAAO,EAAE,OAAO,GAGzB,CAFI,MAAM,KAAG,SAAS,QAAQ;QAC3B,OAAO,EAAG,CAAC,SAAS,IAAS,UAAS,GAAG,QAAQ,EAAU,WAAW,KAAK,EAC1E,KAAW,EAAG,OAAO,GAAI,OAAO,MAAA,GAA4B,GAAG,MAAI,SAAS,QAAQ,kCAAiC,IAAW,WAAW,KAAK;AAErJ,YAAO;MAAC,KAAK,IAAG;MAAG,IAAI,EAAG,MAAM;MAAI;IAErC,KAAK;AACJ,YAAO,EAAG,OAAO,EAAE,OAAO,GAEzB,CADI,MAAM,KAAK,SAAS,QAAQ,sBAAsB,OAAO,EAAG,CAAC,iBAAiB,EAAU,UAAU,KAAK,EACvG,EAAG,OAAO,GAAI,OAAO,MAAA,GAA0B,GAAG,MAAI,SAAS,QAAQ,sBAAsB,OAAO,EAAG,CAAC,kBAAkB,EAAU,WAAW,KAAK;AAEzJ,YAAO;MAAC,KAAK,IAAG;MAAG,IAAI,EAAG,MAAM;MAAI;IAErC,QACC,UAAS,QAAQ,2BAA0B,IAAW,aAAa,KAAK;;;AAK1E,MAAK;EAEL,IAAM,IAAU,gBAAI,OACnB,MAAK,EAAU,WAAW,KAAK,MAAM,GAAE,sBAAsB,EAC1D,IAAY;AAChB,OAAK,IAAI,IAAE,GAAG,IAAE,GAAK,EAAE,GAAG;AAEzB,KAAG,MAAM,OAAO;GAEhB,IAAM,IAAM,EAAG,OAAO;AACtB,OAAI,GAAW;AACd,IAAI,MAAA,EAAU,gBAAgB,EAAI,GAAE,IAAY,KAC3C,MAAO,EAAI,MAAM,MAAM,IAAI,EAAE,EAAE;AACpC;;GAGD,IAAM,IAAK,EAAI,WAAW,EAAE;AAC5B,OAAI,MAAO,IAAI;AAAC,SAAM,EAAI;AAAQ;;AAClC,OAAI,MAAO,IAAI;AACd,QAAI,EAAI,OAAO,EAAQ,GAAG,GAAI,QAAO;KAAC,KAAK,IAAG;KAAG;KAAG;AACpD;;AAEG,SAAO,OAEX,MAAO,EAAI,MAAM,MAAM,IAAI,EAAE,EAAE,QAC3B,MAAA,EAAU,aAAa,EAAI,KAAE,IAAY;;AAK9C,QAHI,IAAiB,mCAErB,SAAS,QAAQ,eAAe,EAAU,UAAU,KAAK,EACnD;;CAGP,MAAqB,OAAO,OAAO,KAAK;CACxC,IAAe,GAAa;EAC3B,IAAI,IAAM;AACV,MAAI;AACH,OAAM;GACN,IAAM,IAAM,MAAA,EAAU,cAAc,EAAI;AAGxC,GAFA,IAAM,yCACN,MAAA,GAA6B,EAAI,EACjC,MAAA,GAAc,MAAA,KAAkB,MAAA,IAAe;WAEzC,GAAG;AAGT,GAFI,aAAa,QAAO,KAAO,UAAU,EAAE,QAAQ,GAAG,EAAE,KAAK,KACxD,IAAM,OAAO,EAAE,EACpB,KAAK,KAAK,UAAU,GAAK,GAAM;;AAEhC,OAAK,IAAI,gBAAgB,MAAA,EAAe;;CAGzC,IAAY,GAAe;AAK1B,EADA,MAAA,IAAiB,EAAG,IACpB,MAAA,IAAiB,EAAG;EACpB,IAAM,IAAK,MAAA,GAAc,MAAA;AAEzB,EADI,MAAI,MAAA,IAAe,IACvB,MAAA,IAAgB,MAAA,EAAa,MAAM,EAAG;;CAKvC,MAAyB;CACzB,MAA0B;CAC1B,IAAwB,GAAa;AACpC,OAAK,IAAI,IAAE,EAAI,MAAK,GAAG,KAAG,GAAG,EAAE,GAAG;GACjC,IAAM,IAAQ,EAAI,OAAO;AACzB,OAAI,CAAE,MAAA,GAAmB,KAAK,EAAM,CAAE;GAEtC,IAAM,CAAC,GAAU,KAAQ,mBAAmB,EAAM;AAClD,SAAA,EAAgB,MAAM,EAAK;GAE3B,IAAM,IAAO,MAAA,EAAgB,KAAK;AAClC,OAAI,CAAE,EAAM;GACZ,IAAM,EAAC,KAAK,MAAM;AAClB,OAAI,CAAE,EAAG,SAAS,IAAI,CAAE;AAGxB,GADA,EAAI,OAAO,OAAO,GAAG,GAAG,KAAM,OAAM,EAAM,EAC1C,EAAI,MAAM,OAAO,GAAG,GAAG,KAAK,IAAI;GAEhC,IAAM,IAAM,MAAa,eACtB,oBAAoB,MACpB,oBAAoB,IACjB,IAAI,KAAK,IAAI,UAAU,MAAK,EAAG,MAAM,GAAG,GAAG,GAAE,MAAM,EAAI;AAC7D,QAAK,IAAM,KAAK,GAAG;IAClB,IAAM,IAAK,EAAM,QAChB,MAAA,IACA,QAAO,mBAAmB,MAAM,EAAE,GAAM,CAAC,CACzC;AAGD,IADA,EAAI,OAAO,OAAO,GAAG,GAAG,EAAG,EAC3B,EAAI,MAAM,OAAO,GAAG,GAAG,IAAI;;;AAG7B,IAAI,MAAM,EAAI,OAAO;;CAItB,MAAgB;EACf,IAAM,IAAK,KAAK,IAAI,gBAAgB,MAAA,EAAe;AAGnD,MAAI,MAAA,EAAe,SAAS,GAAG;AAAC,KAAG,OAAO,MAAA,EAAe;AAAE;;AAE3D,QAAA,KAAiB,EAAG,OAAO,MAAA,EAAe,EAC1C,KAAK,IAAI,aAAa,OAAO,qBAAqB,MAAA,GAAe,EAC7D,OAAA,MAEJ,EAAG,OAAO,MAAA,EAAe;;CAM1B,MAAY;CACZ,IAAI,WAAW;AAAC,SAAO,MAAA;;CACvB,MAAe;AAEd,EADA,KAAK,IAAI,cAAc,MAAA,EAAe,EAAE,MAAM,MAAA,EAAe,EAC7D,MAAA,KAAiB;;CAElB,IAAI,eAAwB;EAC3B,IAAI,IAAK,MAAA,GACL,IAAM,MAAA,GACN,IAAM,MAAA,EAAa;AACvB,MAAI,MAAA,EAAe,SAAS,GAAG;GAC9B,IAAM,IAAK,MAAA,EAAe;AAE1B,GADA,IAAM,EAAG,IACT,IAAM,EAAG;GACT,IAAM,IAAK,MAAA,GAAc;AACzB,GAAI,MAAI,IAAM,EAAG;;AAKlB,SAHI,MAAQ,IAAY,KAEV,KAAK,IAAI,cAAc,EAAG,EAC1B,OAAO,EAAI,IAAI;;CAI9B,IAAI,aAAqB;AACxB,SAAO,MAAA,KAEN,KAAK,IAAI,sBACP,KAAK,IAAI,wBACT,IAEF,KAAK,IAAI,eACP,KAAK,IAAI,iBACT;;CAMJ,IAAe,GAAY;AAG1B,SAFA,MAAA,EAAU,cAAc,GAAM,KAAK,MAAM,MAAA,GAAc,MAAA,EAAe,EAE/D;;CAIR,IAAY,GAAY;AAGvB,SAFA,MAAA,EAAU,WAAW,GAAM,KAAK,MAAM,MAAA,GAAc,MAAA,EAAe,EAE5D;;CAKR,MAA0B;CAC1B,IAAO,GAAY;EAClB,IAAM,EAAC,YAAQ;AACf,MAAI,CAAE,EAAM,OAAM;AAClB,MAAI,KAAQ,KAAK,KAAM,OAAM,IAAI,EAAK;AACtC,MAAI,MAAA,GAAoB,KAAK,EAAK,CAAE,OAAM,IAAI,EAAK;EAEnD,IAAM,IAAK,MAAA,GACL,IAAK,IAAI,UAAU,MAAA,GAAgB,MAAA,EAAe;AAwBxD,OAvBA,MAAA,MAAmB,MAAK,GAExB,MAAA,KAAkB,gBAAI,OAAO,OAAO,MAAA,GAAgB,MAAM,EAC1D,KAAK,KAAmB,MAAQ,OAE/B,MAAA,EAAc,EAAM,EAIpB,KAAK,IAAI,MAAM;GACd,GAAG;GACH,kBAAkB,KAAK,UAAU,EAAC,MAAM,EAAK,MAAK,CAAC;GAEnD,6BAA6B,MAAA;GAC7B,CAAC,EACF,KAAK,IAAI,aAAa,MAAM,6BAA6B,MAAA,EAAe,EAExE,MAAA,IAAgB,GAChB,MAAA,GAAiB,EAAG,EAEb,KAGD,MAAA,IAAiB,MAAA,EAAa,KAAK,EAAE,MAAA,GAAgB;AAE3D,SAAA,EAAa,MAAM,MAAA,OAAoB,MAAA;GAEvC,IAAM,IAAQ,MAAA,EAAa,OAAO,MAAA;AAClC,OAAI,EAAM,OAAO,MAAA,GAA0B,GAAG,GAE7C,QADA,EAAE,MAAA,GACK;GAGR,IAAM,IAAK,EAAM,WAAW,EAAE;AAC9B,GAAI,MAAO,KAAI,MAAA,KAAiB,EAAM,SAC7B,MAAO,OAAI,MAAA,MAAkB,EAAM,MAAM,MAAM,IAAI,EAAE,EAAE;;AAEjE,QAAM,OAAO,EAAK;;CAEnB,MAAa;CACb,MAAa;CAIb,IAAM,GAAY;AACjB,MAAI,QAAQ,KAAS,WAAW,EAAM,OAAM;EAE5C,IAAM,IAAQ,WAAW,GAAM,SAAS,EAAE,EACpC,IAAO,KAAK,IAAI,QAAQ,EAAM;AACpC,MAAI,CAAE,EAAM,OAAM,SAAS,OAAO,EAAM,CAAC;AAEzC,SAAO,KAAK,aAAa,GAAM,GAAM,cAAc,kBAAkB;;CAEtE,aAAa,GAAY,GAAc,IAAqB,cAAc,cAAc;AAIvF,EAHA,KAAK,KAAK,YAAY,EAAE,CAAC,EACzB,KAAK,IAAI,UAAU,EAAK,EACxB,KAAK,IAAI,MAAM,OAAO,CAAC,EACvB,MAAA,EAAa,cAAc;EAE3B,IAAIc,IAAsB,EAAE;AAI5B,EAHI,MAAQ,cAAc,aAAU,IAAK,KAAK,OAC7C,oBAAoB,MAAQ,cAAc,kBAAkB,GAEzD,eAAe,GAAM,UAAU,GAAK,KAAE,MAAA,KAAa;GACtD,OAAQ,KAAK,IAAI,WAAW;GAC5B,QAAS,EAAC,GAAG,EAAK,QAAO;GACzB,QAAS,CAAC,GAAG,EAAK,OAAO;GACzB;EAED,IAAME,IAAU;GACf,SAAU,EAAQ,KAAK,IAAI,OAAO,+BAA+B;GACjE,MAAO,OAAO,KAAK,IAAI,OAAO,4BAA4B,CAAC;GAC3D,MAAO,OAAO,KAAK,IAAI,OAAO,4BAA4B,CAAC;GAC3D;AAKD,EAJA,KAAK,KAAK,OAAO,EAAE,EAEnB,MAAA,IAAe,CAAC,GAAG,MAAA,GAAW,OAAO,EACrC,MAAA,IAAiB,EAAE,EACnB,SAAS,WAAW;EAEpB,IAAM,IAAI,QAAQ,WAAW,CAAC,GAAG,GAAI,GAAG,MAAA,EAAa,SAAS,MAAA,GAAW,OAAO,CAAC,CAAC,CACjF,WAAU,MAAA,EAAa,MAAM,GAAM,CAAC,EAC/B,EAAC,UAAO,UAAM;AACpB,MAAI,EAQH,QAPI,OAAO,YAAU,QAAQ,IAAI,2BAA2B,OAAO,EAAM,CAAC,cAAc,KAAM,MAAM,eAAe,GAAG,EACtH,EAAE,WAAU;AACX,GAAM,MAAA,EAAe,GAAI,IAAI,EAAM,IAAE,KAAK,KAAK,QAAQ;IAGtD,CACD,OAAO,MAAc,QAAQ,MAAM,qBAAqB,EAAE,CAAC,EACrD;AAGR,QAAA,EAAa,MAAM,GAAK;EACxB,IAAM,IAAM,OAAO,KAAK,IAAI,OAAO,yBAAyB,CAAC,EACvD,IAAM,OAAO,KAAK,IAAI,OAAO,0BAA0B,CAAC;AAE9D,SAAO,MAAA,GAAc;EACrB,IAAM,EAAC,aAAS;AAchB,SAbA,EAAE,KAAK,UAAY;AAGlB,GAFA,MAAA,IAAiB,GACjB,MAAA,IAAiB,GACX,KAAK,KAAK,KAAK;IACpB,GAAG,IAAI,EAAC,OAAG,GAAE,EAAE;IACf;IACA,CAAC,IAAE,KAAK,KAAK,QAAQ;YAEhB;AACN,GAAM,MAAA,EAAe,GAAK,IAAI,EAAI,IAAE,KAAK,KAAK,QAAQ;IACrD,CACD,OAAO,MAAc,QAAQ,MAAM,qBAAqB,EAAE,CAAC,EAErD;;CAIR,IAAe,GAAY;EAC1B,IAAM,IAAO,KAAK,IAAI,QAAQ,EAAE;AAChC,MAAI,CAAE,EAAM,QAAO;AAKnB,SAAO,MAAA,GAAc,MAAM,EAAK,MAAM,qBAAqB;EAG3D,IAAMC,IAAa,EAAE;AACrB,OAAK,IAAM,KAAM,MAAA,GAChB,KAAI;AAAC,SAAA,EAAgB,IAAI,IAAI;UACvB;AAAC,KAAE,KAAM,MAAA,GAAc;;AAK9B,SAHA,MAAA,KAAgB,GAEhB,EAAK,SAAS,IACP,KAAK,aAAa,GAAM,GAAM,cAAc,SAAS;;CAK7D,MAAgB;EACf,OAAQ,aAAa;EACrB,QAAS,EAAE;EACX,QAAS,CAAC,GAAG;EACb;CACD,YAAqB;EACpB,IAAM,EAAC,OAAI,WAAO,KAAK,WAAW;AASlC,SARA,KAAK,IAAI,aAAa,QAAQ,qBAAqB,EAAG,EACtD,KAAK,IAAI,aAAa,QAAQ,sBAAsB,EAAI,EACxD,MAAA,KAAa;GACZ,OAAQ,KAAK,IAAI,WAAW;GAC5B,QAAS,MAAA,EAAa,QAAQ;GAC9B,QAAS,MAAA,EAAa,MAAM,MAAA,EAAe,OAAO;GAClD,EAEM;;CAER,YAAuC;AAEtC,MADY,MAAA,EAAe,WACf,EAAG,QAAO;GACrB,IAAK,MAAA;GACL,KAAM,MAAA;GACN;EAED,IAAM,IAAK,MAAA,EAAe;AAC1B,SAAO;GACN,IAAK,EAAG;GACR,KAAM,EAAG;GACT;;CAEF,UAAkB;AAAC,SAAO,EAAC,GAAG,MAAA,IAAW;;CAGzC,aAAqE;EACpE,IAAM,EAAC,OAAI,WAAO,KAAK,WAAW,EAC5B,IAAK,MAAA,GAAc;AAEzB,SAAO;GAAC;GAAI,GADF,MAAA,EAAqB,GAAI,EAAI;GACtB;;CAIlB,IAAM,GAAY;AACjB,MAAI,EAAG,WAAW,GAAO,OAAM;EAC/B,IAAM,IAAQ,EAAK;AAMnB,EAJA,OAAO,EAAK,SACZ,OAAO,EAAK,OACZ,EAAK,OAAO,EAAK,QAAQ,IACzB,MAAA,GAAW,OAAO,GAClB,KAAK,IAAI,QAAQ,GAAO,MAAA,GAAW;EAEnC,IAAM,IAAS,OAAO,KAAK,IAAI,OAAO,0BAA0B,CAAC;AAGjE,SAFI,MAAU,KAAQ,KAAK,IAAI,aAAa,OAAO,uBAAuB,IAAQ,EAAE,EAE7E;;CAIR,aAAa,GAAY;EACxB,IAAI,IAAK,IACL,IAAM,GAEJ,IAAM,MAAA,EAAe;AAC3B,MAAI,EAAK,eAAe,IAAM,GAAG;GAEhC,IAAM,IAAK,MAAA,EAAe;AAE1B,GADA,IAAK,EAAG,IACR,IAAM,EAAG;QAIT,CADA,IAAK,MAAA,GACL,IAAM,MAAA;AAEP,IAAK,WAAW,MAAA,EAAoB,EAAG;EACvC,IAAM,IAAM,MAAA,GAAc,IACpB,IAAK,MAAA,EAAqB,GAAK,EAAI;AAGzC,EAFA,EAAK,SAAU,EAAG,IAClB,EAAK,YAAY,EAAG,OACpB,EAAK,YAAY,EAAG;EACpB,IAAM,IAAQ,IAAK;AAInB,EAHA,EAAK,cAAa,GAClB,EAAK,YAAY,EAAI,OAAO,MAAU,IAEtC,KAAK,IAAI,SAAS,iBAAiB,EAAK;;CAEzC,QAAQ,GAAa,GAAa;AAAC,QAAA,EAAa,OAAO,KAAO"}
|
|
1
|
+
{"version":3,"file":"ScriptIterator.js","names":["#scriptFn","#idxToken","#lineNum","#jumpWork","#grm","#alzTagArg","#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","#setTag2ChIn","#setTag2FinishTrans","#evtMng","#hTag2SkipBypass","#hTag2CanSkip","#layMng","#fncSet","#fnLastBreak","#hScrCache4Dump","#fncBreak","#dumpErrLine","#eraseKidoku","#callSub","#resvToken","#clearResvToken","#jump_light","#nextToken_Proc","#skipLabel","#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","#mark"],"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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"}
|