@famibee/skynovel 1.64.19 → 1.64.21
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/CmnTween.js +26 -27
- package/dist/CmnTween.js.map +1 -1
- package/dist/DebugMng.js +2 -2
- package/dist/DebugMng.js.map +1 -1
- package/dist/EventMng.js +218 -213
- package/dist/EventMng.js.map +1 -1
- package/dist/LayerMng.js +64 -52
- package/dist/LayerMng.js.map +1 -1
- package/dist/Reading.js +34 -28
- package/dist/Reading.js.map +1 -1
- package/dist/ScriptIterator.js +1 -1
- package/dist/ScriptIterator.js.map +1 -1
- package/dist/SndBuf.js +22 -22
- package/dist/SndBuf.js.map +1 -1
- package/dist/TxtLayer.js +238 -239
- package/dist/TxtLayer.js.map +1 -1
- package/dist/appMain_cmn.d.ts.map +1 -1
- package/dist/sn/CmnInterface.d.ts +1 -1
- package/dist/sn/CmnInterface.d.ts.map +1 -1
- package/dist/sn/CmnLib.d.ts +1 -0
- package/dist/sn/CmnLib.d.ts.map +1 -1
- package/dist/sn/CmnTween.d.ts.map +1 -1
- package/dist/sn/EventMng.d.ts.map +1 -1
- package/dist/sn/FocusMng.d.ts +2 -0
- package/dist/sn/FocusMng.d.ts.map +1 -1
- package/dist/sn/FrameMng.d.ts.map +1 -1
- package/dist/sn/Hyphenation.d.ts.map +1 -1
- package/dist/sn/Layer.d.ts.map +1 -1
- package/dist/sn/Reading.d.ts.map +1 -1
- package/dist/sn/SndBuf.d.ts.map +1 -1
- package/dist/sn/TxtLayer.d.ts.map +1 -1
- package/dist/sn/TxtStage.d.ts.map +1 -1
- package/dist/sn/htm2tx.d.ts.map +1 -1
- package/dist/web2.js +4 -4
- package/dist/web2.js.map +1 -1
- package/dist_app/CmnTween.js +28 -29
- package/dist_app/CmnTween.js.map +1 -1
- package/dist_app/EventMng.js +326 -321
- package/dist_app/EventMng.js.map +1 -1
- package/dist_app/LayerMng.js +64 -52
- package/dist_app/LayerMng.js.map +1 -1
- package/dist_app/Reading.js +34 -28
- package/dist_app/Reading.js.map +1 -1
- package/dist_app/ScriptIterator.js +1 -1
- package/dist_app/ScriptIterator.js.map +1 -1
- package/dist_app/SndBuf.js +22 -22
- package/dist_app/SndBuf.js.map +1 -1
- package/dist_app/TxtLayer.js +306 -307
- package/dist_app/TxtLayer.js.map +1 -1
- package/dist_app/app2.js +6 -6
- package/dist_app/app2.js.map +1 -1
- package/dist_app/appMain.js +1 -1
- package/dist_app/appMain.js.map +1 -1
- package/dist_app/appMain_cmn.d.ts.map +1 -1
- package/dist_app/sn/CmnInterface.d.ts +1 -1
- package/dist_app/sn/CmnInterface.d.ts.map +1 -1
- package/dist_app/sn/CmnLib.d.ts +1 -0
- package/dist_app/sn/CmnLib.d.ts.map +1 -1
- package/dist_app/sn/CmnTween.d.ts.map +1 -1
- package/dist_app/sn/EventMng.d.ts.map +1 -1
- package/dist_app/sn/FocusMng.d.ts +2 -2
- package/dist_app/sn/FocusMng.d.ts.map +1 -1
- package/dist_app/sn/FrameMng.d.ts.map +1 -1
- package/dist_app/sn/Hyphenation.d.ts.map +1 -1
- package/dist_app/sn/Layer.d.ts.map +1 -1
- package/dist_app/sn/Reading.d.ts.map +1 -1
- package/dist_app/sn/SndBuf.d.ts.map +1 -1
- package/dist_app/sn/TxtLayer.d.ts.map +1 -1
- package/dist_app/sn/TxtStage.d.ts.map +1 -1
- package/dist_app/sn/htm2tx.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScriptIterator.js","sources":["../src/sn/ScriptIterator.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/* ***** BEGIN LICENSE BLOCK *****\n\tCopyright (c) 2018-2025 Famibee (famibee.blog38.fc2.com)\n\n\tThis software is released under the MIT License.\n\thttp://opensource.org/licenses/mit-license.php\n** ***** END LICENSE BLOCK ***** */\n\nimport {argChk_Boolean, getFn, CmnLib, argChk_Num, RPN_COMP_CHIN} from './CmnLib';\nimport type {T_HTag, TArg, Script, TTag} from './Grammar';\nimport type {T_Main, T_Variable, T_Mark, T_PropParser, T_HEvt2Fnc} from './CmnInterface';\nimport {creSAVEDATA} from './CmnInterface';\nimport type {Config} from './Config';\nimport {CallStack, creCSArg, creMP, type ICallStackArg} from './CallStack';\nimport {Grammar, tagToken2Name_Args, tagToken2Name} from './Grammar';\nimport {AnalyzeTagArg} from './AnalyzeTagArg';\nimport {RubySpliter} from './RubySpliter';\nimport type {EventMng} from './EventMng';\nimport type {LayerMng} from './LayerMng';\nimport {DebugMng} from './DebugMng';\nimport type {SoundMng} from './SoundMng';\nimport type {SysBase} from './SysBase';\nimport {SEARCH_PATH_ARG_EXT} from './ConfigBase';\nimport {CmnTween} from './CmnTween';\nimport {Reading, ReadingState} from './Reading';\nimport {BUF_BGM} from './SndBuf';\n\nimport {Loader} from 'pixi.js';\n\ntype HScript = {\n\t[fn: string]: Script;\n}\n\ntype ISeek = {\n\tidx\t\t: number;\n\tln\t\t: number;\n}\n\n\nconst enum BreakState {Running, Wait, Break, Breaking, Step, Stepping, StepOuting, StepOut}\n\nconst enum SndProcOnLoad {\n\tMINIMAL_STOP,\n\tNO_TOUCH,\n\tALL_STOP_AND_PLAY,\n}\n\n\nexport class ScriptIterator {\n\t#script\t\t: Script\t= {aToken: [''], len: 1, aLNum: [1]};\n\n\t#scriptFn\t= '';\n\tget scriptFn() {return this.#scriptFn}\n\t#idxToken\t= 0;\n\tget idxToken() {return this.#idxToken}\n\tsubIdxToken() {--this.#idxToken}\n\t#lineNum\t= 0;\n\tget lineNum() {return this.#lineNum}\n\treadonly addLineNum\t= (len: number)=> {this.#lineNum += len};\n\tjumpJustBefore() {this.#jumpWork(this.#scriptFn, '', --this.#idxToken)}\n\t\t// 直前にジャンプ\n\n\n\t#aCallStk\t: CallStack[]\t= [];\t// FILOバッファ(push/pop)\n\n\treadonly\t#grm;\n\treadonly\t#alzTagArg\t= new AnalyzeTagArg;\n\n\n\t//MARK: コンストラクタ\n\tconstructor(private readonly cfg: Config, private readonly hTag: T_HTag, private readonly main: T_Main, private readonly val: T_Variable, private readonly prpPrs: T_PropParser, private readonly sndMng: SoundMng, private readonly sys: SysBase) {\n\t\t// 変数操作\n\t\thTag.let_ml\t\t= o=> this.#let_ml(o);\t// インラインテキスト代入\n\t\thTag.endlet_ml\t= ()=> false;\t\t\t// インラインテキスト代入終端\n\t\t\t// [if]ブロック内で【未定義のタグ[endlet_ml]です】エラーが発生する対策\n\n\t\t// デバッグ・その他\n\t\thTag.dump_stack\t= ()=> this.#dump_stack();\t// スタックのダンプ\n\t\thTag.dump_script= o=> this.#dump_script(o);\t// スクリプトのダンプ\n\n\t\t// 条件分岐\n\t\thTag.else\t\t=\t\t\t\t\t\t\t// その他ifブロック開始\n\t\thTag.elsif\t\t=\t\t\t\t\t\t\t// 別条件のifブロック開始\n\t\thTag.endif\t\t= ()=> this.#endif();\t\t// ifブロックの終端\n\t\thTag.if\t\t\t= o=> this.#if(o);\t\t\t// ifブロックの開始\n\n\t\t// ラベル・ジャンプ\n\t\t//hTag.button\t// LayerMng.ts内で定義\t\t// ボタンを表示\n\t\thTag.call\t\t= o=> this.#call(o);\t\t// サブルーチンコール\n\t\thTag.jump\t\t= o=> this.#jump(o);\t\t// シナリオジャンプ\n\t\t//hTag.page\t\t= // ReadState が担当に\t\t// ページ移動\n\t\thTag.pop_stack\t= o=> this.#pop_stack(o);\t// コールスタック破棄\n\t\thTag.return\t\t= o=> this.#return(o);\t\t// サブルーチンから戻る\n\n\t\t// マクロ\n\t\thTag.bracket2macro\t= o=> this.#bracket2macro(o);// 括弧マクロの定義\n\t\thTag.char2macro\t\t= o=> this.#char2macro(o);\t// 一文字マクロの定義\n\t\thTag.endmacro\t\t= o=> this.#return(o);\t\t// マクロ定義の終了\n\t\thTag.macro\t\t\t= o=> this.#macro(o);\t\t// マクロ定義の開始\n\n\t\t// しおり\n\t\t//hTag.copybookmark\t\t// Variable.ts内で定義\t// しおりの複写\n\t\t//hTag.erasebookmark\t// Variable.ts内で定義\t// しおりの消去\n\t\thTag.load\t\t\t= o=> this.#load(o);\t\t\t// しおりの読込\n\t\thTag.reload_script\t= o=> this.#reload_script(o);\t// スクリプト再読込\n\t\thTag.record_place\t= ()=> this.#record_place();\t// セーブポイント指定\n\t\thTag.save\t\t\t= o=> this.#save(o);\t\t\t// しおりの保存\n\n\n\t\tif (cfg.oCfg.debug.token) this.#dbgToken = token=> {if (token.trim() !== '') console.log(`🌱 トークン ${this.#scriptFn}:${String(this.#lineNum)} (i:${String(this.#idxToken)} cs:${String(this.#aCallStk.length)}) %c【${token}】`, 'background-color:#350;')};\n\t\tif (cfg.oCfg.debug.tag) this.#procDebugtag = tag_name=> console.log(`🌲 タグ解析 ${this.#scriptFn}:${String(this.#lineNum)} (i:${String(this.#idxToken)} cs:${String(this.#aCallStk.length)}) %c[${tag_name} %o]`, 'background-color:#30B;', this.#alzTagArg.hPrm);\n\n\t\tval.defTmp('const.sn.aIfStk.length', ()=> this.#aIfStk.length);\n\t\tval.defTmp('const.sn.vctCallStk.length', ()=> this.#aCallStk.length);\n\n\t\tthis.#grm = new Grammar(cfg);\n\n\t\tconst ce = cfg.oCfg.init.escape;\n\t\tthis.#grm.setEscape(ce);\n\t\tRubySpliter.setEscape(ce);\n\n\t\tif (CmnLib.isDbg) {\n\t\t\t// sys.addHook((type, o)=> (<[nm: string]: ((o: any)=> void)>this.#hHook)[type]?.(o));\n\t\t\tconst _h = this.#hHook;\n\t\t\t// type t = keyof typeof this.#hHook;\n\t\t\t// sys.addHook((type: keyof typeof _h, o)=> this.#hHook[ type ]?.(o));\t// x\n\t\t\tsys.addHook((type, o)=> this.#hHook[ <keyof typeof _h>type ]?.(o));\n\t\t\t// sys.addHook((type, o)=> this.#hHook[type]?.(o));\n\t\t\tthis.isBreak = token=> this.#isBreak_base(token);\n\n\t\t\tconst fnc = ()=> this.analyzeInit();\n\t\t\tthis.analyzeInit = ()=> {\n\t\t\t\tthis.analyzeInit = ()=> { /* empty */ };\n\t\t\t\tthis.sys.send2Dbg('hi', {});\n\t\t\t};\n\t\t\tthis.#hHook.auth = o=> {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\t\tconst hLineBP = o.hBreakpoint.hFn2hLineBP;\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\t\t\t\tfor (const [fn, v] of Object.entries(hLineBP)) this.#regBreakPoint(fn, <any>v);\n\n\t\t\t\tScriptIterator.#hFuncBP = {};\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\t\tfor (const v of o.hBreakpoint.aFunc) {\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\t\t\tScriptIterator.#hFuncBP[v.name] = 1;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\t\tif (o.stopOnEntry) {\n\t\t\t\t\tlet tkn;\n\t\t\t\t\t// eslint-disable-next-line no-cond-assign\n\t\t\t\t\twhile (tkn = this.nextToken()) {\n\t\t\t\t\t\t// if (! tkn) break;\t// 初期化前に終了した場合向け\n\n\t\t\t\t\t\tconst uc = tkn.charCodeAt(0);\t// TokenTopUnicode\n\t\t\t\t\t\tif (uc === 91) break;\t// [ タグ開始\n\t\t\t\t\t\tif (uc === 38) break;\t// & 変数操作・変数表示\n\t\t\t\t\t\tif (uc === 42 && tkn.length === 1) break;\t// 単文字の *\n\t\t\t\t\t\tif (uc === 10) this.#lineNum += tkn.length;\t// \\n 改行\n\t\t\t\t\t}\n\t\t\t\t\tthis.sys.callHook('stopOnEntry', {});\n\t\t\t\t\tthis.analyzeInit = fnc;\n\t\t\t\t\tthis.analyzeInit();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.noticeWait = ()=> {\n\t\t\t\t\t\tthis.noticeWait = ()=> { /* empty */ };\n\t\t\t\t\t\tthis.sys.callHook('stopOnEntry', {});\t// sn全体へ通知\n\n//\t\t\t\t\t\tthis.sys.callHook('continue', {});\t// sn全体へ通知\n//\t\t\t\t\t\tthis.breakState = BreakState.breaking;\n\t\t\t\t\t};\n\n\t\t\t\t\tthis.analyzeInit = fnc;\n\t\t\t\t\tthis.analyzeInit();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse this.recodeDesign = ()=> { /* empty */ };\n\t}\n\tnoticeWait = ()=> { /* empty */ };\n\t#regBreakPoint(fn: string, o: {[ln: number]: any}) {\n\t\tScriptIterator.#hFn2hLineBP[this.#cnvSnPath4Dbg(fn)] = o;\n\t}\n\n\tdestroy() {this.isBreak = this.#record_place = ()=> false}\n\n\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\treadonly #hHook\t: {[nm: string]: (o: any)=> void;} = {\n\t\tauth: ()=> { /* empty */ }, // constructorでセット\n\t\t//launch:\t// ここでは冒頭停止に間に合わないのでanalyzeInit()で\n\t\tdisconnect: ()=> {\n\t\t\tScriptIterator.#hFn2hLineBP = {};\n\t\t\tScriptIterator.#hFuncBP = {};\n\t\t\tthis.isBreak = ()=> false;\n\n\t\t\tthis.#hHook.continue!({});\n\t\t\tthis.#breakState = BreakState.Running;\n\t\t},\n\t\trestart: ()=> {this.isBreak = ()=> false},\n\n\t\t// ブレークポイント登録\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n\t\tadd_break: o=> this.#regBreakPoint(o.fn, o.o),\n\t\tdata_break: o=> {\n\t\t\tif (this.#breakState !== BreakState.Running) return;\n\n\t\t\tthis.#breakState = BreakState.Wait;\n\t\t\t// eslint-disable-next-line @typescript-eslint/restrict-template-expressions, @typescript-eslint/no-unsafe-member-access\n\t\t\tthis.main.setLoop(false, `変数 ${o.dataId}【${o.old_v}】→【${o.new_v}】データブレーク`);\n\t\t\tthis.sys.callHook('stopOnDataBreakpoint', {});\t// sn全体へ通知\n\t\t\tthis.sys.send2Dbg('stopOnDataBreakpoint', {});\n\t\t},\n\t\tset_func_break: o=> {\n\t\t\tScriptIterator.#hFuncBP = {};\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\tfor (const v of o.a) ScriptIterator.#hFuncBP[v.name] = 1;\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n\t\t\tthis.sys.send2Dbg(o.ri, {});\n\t\t},\n\n\t\t// 情報問い合わせ系\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n\t\tstack: o=> this.sys.send2Dbg(o.ri, {a: this.#aStack()}),\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n\t\teval: o=> {this.sys.send2Dbg(o.ri, {v: this.prpPrs.parse(o.txt)})},\n\n\t\t// デバッガからの操作系\n\t\tcontinue: ()=> {\n\t\t\tif (this.#isIdxOverLast()) return;\n\n\t\t\tthis.#idxToken -= this.#idxDx4Dbg;\n\t\t\tthis.#breakState = BreakState.Breaking;\n\t\t\tthis.main.setLoop(true);\n\t\t\tthis.main.resume();\t// jumpループ後などで停止している場合があるので\n\t\t},\n\t\tstepover: o=> this.#go_stepover(o),\n\t\tstepin: ()=> {\n\t\t\tif (this.#isIdxOverLast()) return;\n\n\t\t\tconst tkn = this.#script.aToken[this.#idxToken -this.#idxDx4Dbg];\n\t\t\tthis.sys.callHook(`stopOnStep${this.#REGSTEPIN.test(tkn ?? '') ?'In' :''}`, {});\t// sn全体へ通知\n\n\t\t\tthis.#idxToken -= this.#idxDx4Dbg;\n\t\t\tthis.#breakState = this.#breakState === BreakState.Wait\n\t\t\t\t? BreakState.Step\n\t\t\t\t: BreakState.Stepping;\n\t\t\tthis.main.setLoop(true);\n\t\t\tthis.main.resume();\t// jumpループ後などで停止している場合があるので\n\t\t},\n\t\tstepout: o=> {\n\t\t\tif (this.#isIdxOverLast()) return;\n\n\t\t\tif (this.#aCallStk.length > 0) this.#go_stepout(true);\n\t\t\telse this.#go_stepover(o);\n\t\t},\n\t\tpause: ()=> {\n\t\t\tthis.#breakState = BreakState.Step;\n\t\t\tthis.main.setLoop(false, '一時停止');\n\t\t\tthis.sys.send2Dbg('stopOnStep', {});\n\t\t},\n\t\tstopOnEntry: ()=> {\n\t\t\tthis.#breakState = BreakState.Step;\n\t\t\tthis.main.setLoop(false, '一時停止');\n\t\t\tthis.sys.send2Dbg('stopOnEntry', {});\n\t\t},\n\t} as const;\n\treadonly #cnvSnPath = (fn: string)=> this.cfg.searchPath(fn, SEARCH_PATH_ARG_EXT.SCRIPT);\n\treadonly #cnvSnPath4Dbg = (fn: string)=>\n\t\tthis.sys.pathBaseCnvSnPath4Dbg + this.#cnvSnPath(fn);\n\t#go_stepover(o: any) {\n\t\tif (this.#isIdxOverLast()) return;\n\n\t\tconst tkn = this.#script.aToken[this.#idxToken -this.#idxDx4Dbg];\n\t\tif (this.#REGSTEPIN.test(tkn ?? '')) this.#go_stepout(false);\n\t\telse {\n\t\t\tthis.sys.callHook('stopOnStep', {});\t// sn全体へ通知\n\t\t\tthis.#hHook.stepin!(o);\n\t\t}\n\t}\n\t#go_stepout(out: boolean) {\n\t\tthis.sys.callHook(`stopOnStep${out ?'Out' :''}`, {});\t// sn全体へ通知\n\t\tthis.#csDepth_macro_esc = this.#aCallStk.length -(out ?1 :0);\n\t\tthis.#idxToken -= this.#idxDx4Dbg;\n\t\tthis.#breakState = out ?BreakState.StepOut :BreakState.StepOuting;\n\t\tthis.main.setLoop(true);\n\t\tthis.main.resume();\t// jumpループ後などで停止している場合があるので\n\t}\n\t#csDepth_macro_esc\t= 0;\n\tget #idxDx4Dbg() {\n\t\treturn this.#breakState === BreakState.Break\n\t\t\t|| this.#breakState === BreakState.Step ?1 :0\n\t}\n\t#isIdxOverLast(): boolean {\n\t\tif (this.#idxToken < this.#script.len) return false;\n\t\tthis.sys.callHook('stopOnEntry', {});\t// sn全体へ通知\n\t\tthis.main.setLoop(false, 'スクリプト終端です isIdxOverLast');\n\t\treturn true;\n\t}\n\n\t// reload 再生成 Main に受け渡すため static\n\tstatic\t#hFn2hLineBP: {[fn: string]: {[ln: number]: any}} = {};\n\tstatic\t#hFuncBP: {[tag_name: string]: 1} = {};\n\t#breakState\t= BreakState.Running;\n\t\t// https://raw.githubusercontent.com/famibee/SKYNovel-vscode-extension/master/src/doc/BreakStateSMD.pu\n\tisBreak = (_token: string)=> false;\n\t#isBreak_base(token: string): boolean {\n\t\tswitch (this.#breakState) {\n\t\t\tcase BreakState.StepOuting:\tthis.#subHitCondition();\n\t\t\t\tthis.#breakState = BreakState.StepOut;\tbreak;\n\t\t\tcase BreakState.StepOut:\n\t\t\t\tif (this.#aCallStk.length !== this.#csDepth_macro_esc) break;\n\n\t\t\t\tthis.#breakState = BreakState.Step;\n\t\t\t\tthis.main.setLoop(false, 'ステップ実行');\n\t\t\t\tthis.sys.send2Dbg('stopOnStep', {});\n\t\t\t\treturn true;\t// タグを実行せず、直前停止\n\n\t\t\tcase BreakState.Stepping:\tthis.#subHitCondition();\n\t\t\t\tthis.#breakState = BreakState.Step;\tbreak;\n\t\t\tcase BreakState.Step:\t\tthis.#subHitCondition();\n\t\t\t\tthis.main.setLoop(false, 'ステップ実行');\n\t\t\t\tthis.sys.send2Dbg('stopOnStep', {});\n\t\t\t\treturn true;\t// タグを実行せず、直前停止\n\n\t\t\tcase BreakState.Breaking:\tthis.#subHitCondition();\n\t\t\t\tthis.#breakState = BreakState.Running;\tbreak;\n\n\t\t\tdefault:\n\t\t\t{\t// 関数ブレークポイント\n\t\t\t\tif (tagToken2Name(token) in ScriptIterator.#hFuncBP) {\n\t\t\t\t\tthis.#breakState = BreakState.Break;\n\t\t\t\t\tthis.main.setLoop(false, `関数 ${token} ブレーク`);\n\t\t\t\t\tthis.sys.callHook('stopOnBreakpoint', {});\t// sn全体へ通知\n\t\t\t\t\tthis.sys.send2Dbg('stopOnBreakpoint', {});\n\t\t\t\t\treturn true;\t// タグを実行せず、直前停止\n\t\t\t\t}\n\t\t\t}\n\t\t\t{\t// ブレークポイント\n\t\t\t\tconst bp = ScriptIterator.#hFn2hLineBP[this.#cnvSnPath4Dbg(this.#scriptFn)];\n\t\t\t\tif (! bp) break;\n\n\t\t\t\tconst o = bp[this.#lineNum];\n\t\t\t\tif (! o) break;\n\n//console.log(`fn:ScriptIterator.ts line:145 👺 【bs:${this.#breakState} idx:${this.#idxToken} ln:${this.#lineNum} tkn:${this.#script.aToken[this.#idxToken -1]}:】 o:%o`, o);\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n\t\t\t\tif (o.condition) {if (! this.prpPrs.parse(o.condition)) break}\n\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\t\telse if ('hitCondition' in o && --o.hitCondition > 0) break;\n\t\t\t\tconst isBreak = this.#breakState === BreakState.Running;\n\t\t\t\tthis.#breakState = BreakState.Break;\n\t\t\t\tthis.main.setLoop(false, isBreak ?\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\t\t\t(o.condition ? '条件' :'ヒットカウント') +'ブレーク'\n\t\t\t\t\t :'ステップ実行');\n\t\t\t\tconst type = isBreak ?'stopOnBreakpoint' :'stopOnStep';\n\t\t\t\tthis.sys.callHook(type, {});\t// sn全体へ通知\n\t\t\t\tthis.sys.send2Dbg(type, {});\n\t\t\t}\n\t\t\t\treturn true;\t// タグを実行せず、直前停止\n\t\t}\n\n\t\treturn false;\t// no break、タグを実行\n\t}\n\t#subHitCondition() {\t// step実行中でbreakしないがヒットカウントだけ減算\n\t\tconst o = ScriptIterator.#hFn2hLineBP[getFn(this.#scriptFn)]?.[this.#lineNum];\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\tif (o?.hitCondition) --o.hitCondition;\n\t}\n\n\t#aStack(): {fn: string, ln: number, col: number, nm: string, ma: string}[] {\n\t\tconst idx_n = this.#breakState === BreakState.Breaking ?1 :0;\n\t\tconst tkn0 = this.#script.aToken[this.#idxToken -1 +idx_n]!;\n\n\t\tconst fn0 = this.#cnvSnPath4Dbg(this.#scriptFn);\n\t\tconst tag_name0 = tagToken2Name(tkn0);\n\t\tconst nm = tag_name0 ?`[${tag_name0}]` :tkn0;\n//console.log(`fn:ScriptIterator.ts aStack breakState:${this.#breakState} idx:${this.#idxToken -1} idx_n:${idx_n} tkn0:${tkn0}: fn0:${fn0} nm:${nm} tkn02:${this.#script.aToken[this.#idxToken -1]}: +tkn02:${this.#script.aToken[this.#idxToken]}:`);\n//console.log(`fn:ScriptIterator.ts a:%o anum:%o`, this.script.aToken, this.script.aLNum);\n\t\tconst ma = String(this.val.getVal('mp:const.sn.macro') ?? '{}');\n\t\tif (this.#idxToken === 0) return [{fn: fn0, ln: 1, col: 1, nm, ma}];\n\n\t\tconst lc0 = this.#cnvIdx2lineCol(this.#script, this.#idxToken);// -1不要\n//console.log(`fn:ScriptIterator.ts ln:${lc0.ln} col:${lc0.col_s} col2:${this.#script.aLNum[this.#idxToken -1]}`);\n\t\tconst a = [{fn: fn0, ln: lc0.ln, col: lc0.col_s +1, nm, ma}];\n\t\tconst len = this.#aCallStk.length;\n\t\tif (len === 0) return a;\n\n\t\tfor (let i=len -1; i>=0; --i) {\n\t\t\tconst cs = this.#aCallStk[i]!;\n\t\t\tconst st = this.#hScript[cs.fn];\n\t\t\tif (! st) continue;\n\t\t\tconst tkn = st.aToken[cs.idx -1];\n\t\t\tif (! tkn) continue;\n\t\t\tconst lc = this.#cnvIdx2lineCol(st, cs.idx);\t// -1不要\n\n\t\t\tconst tag_name = tagToken2Name(tkn);\n\t\t\ta.push({\n\t\t\t\tfn\t: this.#cnvSnPath4Dbg(cs.fn),\n\t\t\t\tln\t: lc.ln,\n\t\t\t\tcol\t: lc.col_s +1,\n\t\t\t\tnm\t: tag_name ?`[${tag_name}]` :tkn,\n\t\t\t\tma\t: cs.csArg[':hMp']['const.sn.macro'],\n\t\t\t});\n\t\t}\n\n\t\treturn a;\n\t}\n\n\t// result = true : waitする resume()で再開\n\t#procDebugtag\t= (_tag_name: string)=> { /* empty */ };\n\t//MARK: タグ解析\n\tasync\tタグ解析(tag_name: string, args: string): Promise<boolean> {\n\t\tconst tag_fnc = this.hTag[<keyof T_HTag>tag_name];\n\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\tif (! tag_fnc) throw `未定義のタグ【${tag_name}】です`;\n\n\t\tthis.#alzTagArg.parse(args);\n\t\tthis.#procDebugtag(tag_name);\n\n\t\tconst hPrm = this.#alzTagArg.hPrm;\n\t\tif (hPrm.cond) {\n\t\t\tconst cond = hPrm.cond.val;\n\t\t\tif (! cond || cond.startsWith('&')) throw '属性condは「&」が不要です';\n\t\t\tconst p = this.prpPrs.parse(cond);\n\t\t\tconst ps = String(p);\n\t\t\tif (ps === 'null' || ps === 'undefined') return false;\n\t\t\tif (! p) return false;\n\t\t}\n\n\t\tlet hArg: TArg = {};\n\t\tconst csa: ICallStackArg = this.#aCallStk.at(-1)?.csArg ?? creCSArg();\n\n\t\tconst len = this.#aCallStk.length;\n\t\tif (this.#alzTagArg.isKomeParam) {\n\t\t\tif (len === 0) throw '属性「*」はマクロのみ有効です';\n\t\t\thArg = {...csa};\n\t\t}\n\t\thArg[':タグ名'] = tag_name;\n\t// #region タグ位置のコールスタック情報を埋め込むコード(デバッグ用)\n\t/*\t{\n\t\t\tconst lc0 = this.#cnvIdx2lineCol(this.#script, this.#idxToken);\n\t\t\tlet now = `存在位置 fn:${this.#scriptFn} line:${lc0.ln} col:${lc0.col_s +1}`;\n\t\t\thArg[':path'] = now;\n\t\t\tconst len = this.#aCallStk.length;\n\t\t\tif (len > 0) {\n\t\t\t\tfor (let i=len -1; i>=0; --i) {\n\t\t\t\t\tconst cs = this.#aCallStk[i];\n\t\t\t\t\tconst hMp = cs.csArg[':hMp'];\n\t\t\t\t\tconst from_macro_nm = hMp ?hMp[':タグ名'] :undefined;\n\t\t\t\t\tconst call_nm = cs.csArg[':タグ名'] ?? '';\n\t\t\t\t\tconst lc = this.#cnvIdx2lineCol(this.#hScript[cs.fn], cs.idx);\n\t\t\t\t\tnow += ` <- (${len -i}) fn:${cs.fn} line:${lc.ln\n\t\t\t\t\t\t} col:${lc.col_s +1\n\t\t\t\t\t\t}`+ (from_macro_nm ?'(['+ from_macro_nm +']マクロ内)' :' ')+\n\t\t\t\t\t\t`で [${call_nm} ...]をコール`;\n\t\t\t\t}\n\t\t\t}\n\t\t}*/\n\t// #endregion\n\t// #region タグ位置情報を埋め込むコード(デバッグ用)\n//\t\thArg[':path'] = this.#scriptFn;\n//\t\thArg[':ln'] = this.#lineNum;\n\t// #endregion\n\t\t// valやdefの値について。null はありえない。'null'や'undefined' はありえる。\n\t\t// 省略時以外で undefined はない。a=undefined と書いても 'undefined' になる\n\t\tfor (const [arg_nm, {val, def}] of Object.entries(hPrm)) {\n\t\t\tlet v = val;\n\t\t\tif (val.startsWith('%')) {\n\t\t\t\tif (len === 0) throw '属性「%」はマクロ定義内でのみ使用できます(そのマクロの引数を示す簡略文法であるため)';\n\n\t\t\t\tconst mac = (<{[nm: string]: any}>csa)[v.slice(1)];\n\t\t\t\tif (mac) {(<{[nm: string]: any}>hArg)[arg_nm] = mac; continue}\n\n\t\t\t\tif (def === undefined || def === 'null') continue;\n\t\t\t\t\t// defの'null'指定。%変数が無い場合、タグやマクロに属性を渡さない\n\t\t\t\tv = def;\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\t\tv = this.prpPrs.getValAmpersand(v ?? '');\n\t\t\tif (v !== 'undefined') {(<{[nm: string]: any}>hArg)[arg_nm] = v; continue}\n\n\t\t\tif (def === undefined) continue;\n\t\t\tv = this.prpPrs.getValAmpersand(def);\n\t\t\tif (v !== 'undefined') (<{[nm: string]: any}>hArg)[arg_nm] = v;\n\t\t\t\t// 存在しない値の場合、属性を渡さない\n\t\t}\n\n\t\t// (一部タグの処理直前に)文字出現処理を終わらせる\n\t\tif (Reading.needGoTxt && this.#setTag2ChIn.has(tag_name)) {\n\t\t\tconst {promise, resolve} = Promise.withResolvers();\n\t\t\tReading.beginProc(RPN_COMP_CHIN, ()=> resolve(0), false, ()=> resolve(0));\n\t\t\tReading.goTxt();\n\t\t\tthis.val.saveKidoku();\n\t\t\tawait promise;\n\t\t}\n\t\t// (一部タグの処理直前に)画面トランジションを止める\n\t\tif (this.#setTag2FinishTrans.has(tag_name)) {\n\t\t\tthis.#evtMng.hideHint();\n\t\t\tCmnTween.stopEndTrans();\n\t\t}\n\t\t// キー押しっぱなしスキップで処理せずスルーする\n\t\tconst fncBypass = this.#hTag2SkipBypass[tag_name];\n\t\tif (fncBypass\n\t\t\t&& argChk_Boolean(hArg, 'canskip', this.#hTag2CanSkip[tag_name] ?? true)\n\t\t\t&& this.#evtMng.isSkipping) return fncBypass(hArg);\n\n\t\treturn tag_fnc(hArg);\n\t}\n\t\t// 文字出現演出を待つタグ\n\t\t//\tここで列挙せずタグ処理で文字表示を始めたい場合、goTxt()すること\n\t\treadonly\t#setTag2ChIn = new Set([\n\t\t// 変数操作\n\t\t\t// 'clearsysvar',\t// システム変数の全消去\n\t\t\t// 'clearvar',\t\t// ゲーム変数の全消去\n\t\t\t// 'let_abs',\t\t// 絶対値\n\t\t\t// 'let_char_at',\t// 文字列から一字取りだし\n\t\t\t// 'let_index_of',\t// 文字列で検索\n\t\t\t// 'let_length',\t// 文字列の長さ\n\t\t\t// 'let_ml',\t\t// インラインテキスト代入\n\n\t\t\t// 'let_replace',\t// 正規表現で置換\n\t\t\t// 'let_round',\t\t// 四捨五入\n\t\t\t// 'let_search',\t// 正規表現で検索\n\t\t\t// 'let_substr',\t// 文字列から抜きだし\n\t\t\t// 'let',\t\t\t// 変数代入・演算\n\n\t\t// レイヤ共通\n\t\t\t// 'add_lay',\t\t// レイヤを追加する\n\t\t\t// 'clear_lay',\t// レイヤ設定の消去\n\t\t\t// 'finish_trans',\t// トランス強制終了\n\t\t\t// 'lay',\t// レイヤ設定\n\t\t\t'trans',\t// ページ裏表を交換\n\t\t\t'wt',\t// トランス終了待ち\n\t\t\t// 'add_filter',\t// フィルター追加\n\t\t\t// 'clear_filter',\t// フィルター全削除\n\t\t\t// 'enable_filter',// フィルター個別切替\n\n\t\t// トゥイーンアニメ\n\t\t\t// 'pause_tsy',\t// 一時停止\n\t\t\t// 'resume_tsy',\t// 一時停止再開\n\t\t\t// 'stop_tsy',\t// トゥイーン中断\n\t\t\t// 'tsy',\t\t// トゥイーン開始\n\t\t\t'wait_tsy',\t// トゥイーン終了待ち\n\n\t\t// 文字・文字レイヤ\n\t\t\t// 'autowc',\t// 文字ごとのウェイト\n\t\t\t// 'ch',\t\t// 文字を追加する\n\t\t\t// 'ch_in_style',\t// 文字出現演出定義\n\t\t\t// 'ch_out_style',\t// 文字消去演出定義\n\t\t\t// 'clear_text',\t// 文字消去\n\t\t\t// 'current',\t// デフォルト文字レイヤ設定\n\t\t\t// 'endlet_ml',\t// インラインテキスト代入の終端\n\t\t\t// 'endlink',\t// ハイパーリンクの終了\n\t\t\t// 'er',\t\t// ページ両面の文字消去\n\t\t\t// 'graph',\t\t// インライン画像表示\n\t\t\t// 'link',\t\t// ハイパーリンク\n\t\t\t// 'r',\t\t\t// 改行\n\t\t\t// 'rec_ch',\t// 履歴書き込み\n\t\t\t// 'rec_r',\t\t// 履歴改行\n\t\t\t// 'reset_rec',\t// 履歴リセット\n\t\t\t// 'ruby2',\t\t// 文字列と複数ルビの追加\n\t\t\t// 'set_focus',\t// フォーカス移動\n\t\t\t// 'span',\t\t// インラインスタイル設定\n\t\t\t// 'tcy',\t\t// 縦中横を表示する\n\n\t\t// 画像・画像レイヤ\n\t\t\t// 'add_face',\t// 差分名称の定義\n\t\t\t'wv',\t\t// 動画再生終了待ち\n\n\t\t// HTMLフレーム\n\t\t\t// 'add_frame',\t// フレーム追加\n\t\t\t// 'frame',\t// フレームに設定\n\t\t\t// 'let_frame',\t// フレーム変数を取得\n\t\t\t// 'set_frame',\t// フレーム変数に設定\n\t\t\t// 'tsy_frame',\t// フレームをトゥイーン開始\n\n\t\t// イベント\n\t\t\t// 'clear_event',\t// イベントを全消去\n\t\t\t// 'enable_event',\t// イベント有無の切替\n\t\t\t// 'event',\t// イベントを予約\n\t\t\t'l',\t// 行末クリック待ち\n\t\t\t'p',\t// 改ページクリック待ち\n\t\t\t's',\t// 停止する\n\t\t\t// [set_cancel_skip] スキップ中断予約\n\t\t\t'wait',\t\t// ウェイトを入れる\n\t\t\t'waitclick',\t// クリックを待つ\n\n\t\t// BGM・効果音\n\t\t\t// 'fadebgm',\t// BGMのフェード\n\t\t\t// 'fadeoutbgm',// BGMのフェードアウト\n\t\t\t// 'fadeoutse',\t// 効果音のフェードアウト\n\t\t\t// 'fadese',\t// 効果音のフェード\n\t\t\t// 'playbgm',\t// BGM の演奏\n\t\t\t// 'playse',\t// 効果音の再生\n\t\t\t// 'stop_allse',// 全効果音再生の停止\n\t\t\t// 'stopbgm',\t// BGM 演奏の停止\n\t\t\t// 'stopfadese',// 音声フェードの停止\n\t\t\t// 'stopse',\t// 効果音再生の停止\n\t\t\t// 'volume',\t// BGMや効果音の音量を指定\n\t\t\t'wb',\t// BGM フェードの終了待ち\n\t\t\t'wf',\t// 効果音フェードの終了待ち\n\t\t\t'wl',\t// BGM 再生の終了待ち\n\t\t\t'ws',\t// 効果音再生の終了待ち\n\t\t\t// 'xchgbuf',\t// サウンドバッファの交換\n\n\t\t// 条件分岐\n\t\t\t// 'else',\t// その他ifブロック開始\n\t\t\t// 'elsif',\t// 別条件のifブロック開始\n\t\t\t// 'endif',\t// ifブロックの終端\n\t\t\t// 'if',\t// ifブロックの開始\n\n\t\t// ラベル・ジャンプ\n\t\t\t// 'button',\t// ボタンを表示\n\t\t\t// 'call',\t\t// サブルーチンコール\n\t\t\t// 'jump',\t\t// シナリオジャンプ\n\t\t\t// 'page',\t\t// ページ移動\n\t\t\t// 'pop_stack',\t// コールスタック破棄\n\t\t\t// 'return',\t// サブルーチンから戻る\n\n\t\t// マクロ\n\t\t\t// 'bracket2macro',\t// 括弧マクロの定義\n\t\t\t// 'char2macro',\t// 一文字マクロの定義\n\t\t\t// 'endmacro',\t// マクロ定義の終了\n\t\t\t// 'macro',\t\t// マクロ定義の開始\n\n\t\t// しおり\n\t\t\t// 'copybookmark',\t// しおりの複写\n\t\t\t// 'erasebookmark',\t// しおりの消去\n\t\t\t// 'load',\t\t\t// しおりの読込\n\t\t\t// 'record_place',\t// セーブポイント指定\n\t\t\t// 'reload_script',\t// スクリプト再読込\n\t\t\t// 'save',\t\t\t// しおりの保存\n\n\t\t// 画面揺らし\n\t\t\t'quake',\t\t// 画面を揺らす\n\t\t\t// 'stop_quake',// 画面揺らし中断\n\t\t\t'wq',\t\t// 画面揺らし終了待ち\n\n\t\t// システム\n\t\t\t// 'close',\t\t// アプリの終了\n\t\t\t// 'export',\t// プレイデータをエクスポート\n\t\t\t// 'import',\t// プレイデータをインポート\n\t\t\t// 'loadplugin',\t// プラグインの読み込み\n\t\t\t// 'navigate_to',\t// URLを開く\n\t\t\t// 'snapshot',\t\t// スナップショット\n\t\t\t// 'title',\t\t// タイトル指定\n\t\t\t// 'toggle_full_screen',\t// 全画面状態切替\n\t\t\t// 'update_check',\t// 更新チェック機能\n\t\t\t// 'window',\t// アプリウインドウ設定\n\n\t\t// デバッグ・その他\n\t\t\t// 'dump_lay',\t\t// レイヤのダンプ\n\t\t\t// 'dump_script',\t// 外部へスクリプトを表示\n\t\t\t// 'dump_stack',\t// スタックのダンプ\n\t\t\t// 'dump_val',\t\t// 変数のダンプ\n\t\t\t// 'log',\t\t// ログ出力\n\t\t\t// 'trace',\t\t// デバッグ表示へ出力\n\t\t]);\n\t\treadonly\t#setTag2FinishTrans = new Set([\n\t\t\t'finish_trans',\t// トランス強制終了\n\t\t\t'trans',\t\t// ページ裏表を交換\n\t\t\t'quake',\t\t// 画面を揺らす\n\t\t\t'stop_quake',\t// 画面揺らし中断\n\t\t\t'add_filter',\t// フィルター追加\n\t\t]);\n\t\t// キー押しっぱなしスキップで処理せずスルーするタグ\n\t\treadonly\t#hTag2SkipBypass: {[tag_name: string]: TTag} = {\n\t\t\t'wt'\t\t: ()=> {CmnTween.stopEndTrans(); return false},\n\t\t\t\t\t\t\t\t\t\t\t// トランス終了待ち\n\t\t\t'wait_tsy'\t: o=> this.hTag.stop_tsy(o),\t// トゥイーン終了待ち\n\t\t\t// 'wv',\t\t:タグ内部で処理\t// 動画再生終了待ち\n\t\t\t'wait'\t\t\t: ()=> false,\t// ウェイトを入れる\n\t\t\t// 'playbgm',\t:スルー不可\t\t// BGM の演奏\n\t\t\t// 'playse',\t:タグ内部で処理\t// 効果音の再生\n\t\t\t'wb'\t: ()=> this.hTag.stopfadese({buf: BUF_BGM}),\n\t\t\t\t\t\t\t\t\t\t\t// BGM フェードの終了待ち\n\t\t\t'wf'\t: o=> this.hTag.stopfadese(o),\t// 効果音フェードの終了待ち\n\t\t\t// 'ws'\t\t:タグ内部で処理\t// 効果音再生の終了待ち\n\t\t\t'wq'\t: ()=> this.hTag.stop_quake({}),\t// 画面揺らし終了待ち\n\t\t\t// fade系\t:タグ内部で処理\n\t\t\t// 'ch'\t\t:タグ内部で処理\t// 文字を追加する\n\t\t\t// 'tsy'\t:タグ内部で処理\t// トゥイーン開始\n\t\t\t// 'trans'\t:タグ内部で処理\t// ページ裏表を交換\n\t\t\t'quake'\t\t: ()=> false,\t\t// 画面を揺らす\n\t\t};\n\t\t// タグ処理中にクリックなどで即終わらせられるタグ(canskip 属性がある)\n\t\treadonly\t#hTag2CanSkip: {[tag_name: string]: boolean} = {\n\t\t\t\t\t\t// デフォルト値\n\t\t\t'wt'\t\t: true ,\t// [wt]トランス終了待ち\n\t\t\t'wait_tsy'\t: true ,\t// [wait_tsy]トゥイーン終了待ち\n\t\t\t'wv'\t\t: true ,\t// [wv]動画再生終了待ち\n\t\t\t'wait'\t\t: true ,\t// [wait]ウェイトを入れる\n\t\t\t'playbgm'\t: false,\t// [playbgm]BGM の演奏\n\t\t\t'playse'\t: true ,\t// [playse]効果音の再生\n\t\t\t'wb'\t\t: false,\t// [wb]BGM フェードの終了待ち\n\t\t\t'wf'\t\t: false,\t// [wf]効果音フェードの終了待ち\n\t\t\t'ws'\t\t: false,\t// [ws]効果音再生の終了待ち\n\t\t\t'wq'\t\t: true ,\t// [wq]画面揺らし終了待ち\n\t\t};\n\n\n\t#evtMng\t: EventMng;\n\t#layMng\t: LayerMng;\n\tsetOtherObj(evtMng: EventMng, layMng: LayerMng): void {\n\t\tthis.#evtMng = evtMng;\n\t\tthis.#layMng = layMng;\n\t}\n\n\n\t//MARK: インラインテキスト代入\n\t#let_ml(hArg: TArg) {\n\t\tconst {name} = hArg;\n\t\tif (! name) throw 'nameは必須です';\n\n\t\tlet ml = '';\n\t\tconst len = this.#script.len;\n\t\tfor (; this.#idxToken<len; ++this.#idxToken) {\n\t\t\tml = this.#script.aToken[this.#idxToken]!;\n\t\t\tif (ml !== '') break;\n\t\t}\n\t\thArg.text = ml;\n\t\thArg.cast = 'str';\n\t\tthis.hTag.let(hArg);\n\t\tthis.#idxToken += 2;\n\t\tthis.#lineNum += (ml.match(/\\n/g) ?? []).length;\n\n\t\treturn false;\n\t}\n\n\n\t//MARK: スタックのダンプ\n\t#dump_stack() {\n\t\tif (this.#idxToken === 0) {\n\t\t\tconsole.group(`🥟 [dump_stack] スクリプト現在地 fn:${this.#scriptFn} line:1 col:0`);\n\t\t\tconsole.groupEnd();\n\t\t\treturn false;\n\t\t}\n\n\t\tconst lc0 = this.#cnvIdx2lineCol(this.#script, this.#idxToken);\n\t\tconst now = `スクリプト現在地 fn:${this.#scriptFn} line:${String(lc0.ln)} col:${String(lc0.col_s +1)}`;\n\t\tconsole.group(`🥟 [dump_stack] ${now}`);\n\t\tconst len = this.#aCallStk.length;\n\t\tif (len > 0) {\n\t\t\tconsole.info(now);\n\t\t\tfor (let i=len -1; i>=0; --i) {\n\t\t\t\tconst cs = this.#aCallStk[i]!;\n\t\t\t\tconst hMp = cs.csArg[':hMp'];\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\t\t\tconst from_macro_nm = hMp\n\t\t\t\t\t? <string>(<{[nm: string]: any}>hMp)[':タグ名']\n\t\t\t\t\t: undefined;\n\t\t\t\tconst call_nm = cs.csArg[':タグ名'] ?? '';\n\t\t\t\tconst lc = this.#cnvIdx2lineCol(this.#hScript[cs.fn], cs.idx);\n\t\t\t\tconsole.info(\n\t\t\t\t\t`${String(len -i)}つ前のコール元 fn:${cs.fn} line:${\n\t\t\t\t\t\tString(lc.ln)} col:${String(lc.col_s +1)\n\t\t\t\t\t}${\n\t\t\t\t\t\tfrom_macro_nm ?'(['+ from_macro_nm +']マクロ内)' :' '\n\t\t\t\t\t}で [${call_nm} ...]をコール`\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tconsole.groupEnd();\n\n\t\treturn false;\n\t}\n\t#cnvIdx2lineCol(st: Script | undefined, idx: number): {ln: number, col_s: number, col_e: number} {\n\t\tconst ret = {ln: 1, col_s: 0, col_e: 0};\n\t\tif (! st) return ret;\n\n\t\tlet i = idx -1;\n\t\tconst lN = ret.ln = st.aLNum[i]!;\n\t\twhile (st.aLNum[i] === lN) {\n\t\t\tconst tkn = st.aToken[i]!;\n\t\t\tif (! tkn.startsWith('\\n')) {\n\t\t\t\tconst len = tkn.length;\n//console.log(`fn:ScriptIterator.ts line:586 cnvIdx2lineCol tkn:${st.aToken[i]} len:${len} s:${ret.col_s} e:${ret.col_e}`);\n\t\t\t\tif (ret.col_e > 0) ret.col_s += len;\n\t\t\t\tret.col_e += len;\n\t\t\t}\n\t\t\tif (--i < 0) break;\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\n\t//MARK: 外部へスクリプトを表示\n\t#dump_script(hArg: TArg) {\n\t\tconst {set_fnc, break_fnc} = hArg;\n\t\tif (! set_fnc) throw 'set_fncは必須です';\t// スクリプトを返すコールバック\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\tthis.#fncSet = (<any>globalThis)[set_fnc];\n\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\tif (! this.#fncSet) {\n\t\t\tif (argChk_Boolean(hArg, 'need_err', true)) throw `HTML内に関数${set_fnc}が見つかりません`;\n\t\t\tthis.#fncSet = ()=> { /* empty */ };\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.noticeBreak = (goto: boolean)=> {\n\t\t\tif (this.#fnLastBreak !== this.#scriptFn) {\n\t\t\t\tthis.#fnLastBreak = this.#scriptFn;\n\t\t\t\tthis.#fncSet(\n\t\t\t\t\tthis.#hScrCache4Dump[this.#scriptFn] ??= this.#script.aToken.join('')\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.#fncBreak(this.#lineNum, goto);\n\t\t};\n\t\tthis.noticeBreak(true);\t// 一度目のthis.fncBreak()はスルー(まだ読んでないし)\n\n\t\tif (! break_fnc) return false;\t// Break通知コールバック\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\tthis.#fncBreak = (<any>globalThis)[break_fnc];\n\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\tif (! this.#fncBreak) {\n\t\t\tif (argChk_Boolean(hArg, 'need_err', true)) throw `HTML内に関数${break_fnc}が見つかりません`;\n\t\t\tthis.#fncBreak = ()=> { /* empty */ };\n\t\t}\n\n\t\treturn false;\n\t}\n\t#fncSet: (txt: string)=> void = ()=> { /* empty */ };\n\t#fncBreak: (ln: number, goto: boolean)=> void = ()=> { /* empty */ };\n\t#fnLastBreak = '';\n\t#hScrCache4Dump: {[fn: string]: string;} = {};\n\tnoticeBreak = (_goto: boolean)=> { /* empty */ };\n\n\n\t#dumpErrLine = 5;\n\tdumpErrForeLine() {\n\t\tif (this.#idxToken === 0) {\n\t\t\tconsole.group(`🥟 Error line (from 0 rows before) fn:${this.#scriptFn}`);\n\t\t\tconsole.groupEnd();\n\t\t\treturn;\n\t\t}\n\n\t\tlet s = '';\n\t\tfor (let i=this.#idxToken -1; i>=0; --i) {\n\t\t\ts = String(this.#script.aToken[i]) + s;\n\t\t\tif ((s.match(/\\n/g) ?? []).length >= this.#dumpErrLine) break;\n\t\t}\n\t\tconst a = s.split('\\n').slice(-this.#dumpErrLine);\n\t\tconst len = a.length;\n\t\tconsole.group(`🥟 Error line (from ${String(len)} rows before) fn:${this.#scriptFn}`);\n\t\tconst ln_txt_width = String(this.#lineNum).length;\n\t\tconst lc = this.#cnvIdx2lineCol(this.#script, this.#idxToken);\n\t\tfor (let i=0; i<len; ++i) {\n\t\t\tconst ln = this.#lineNum -len +i +1;\n\t\t\tconst mes = `${String(ln).padStart(ln_txt_width, ' ')}: %c`;\n\t\t\tconst e = a[i]!;\n\t\t\tconst line = e.length > 75 ?e.slice(0, 75) +'…' :e;\t// 長い場合は後略\n\t\t\tif (i === len -1) console.info(\n\t\t\t\tmes + line.slice(0, lc.col_s) +'%c'+ line.slice(lc.col_s),\n\t\t\t\t'color: black; background-color: skyblue;', 'color: black; background-color: pink;'\n\t\t\t)\n\t\t\telse console.info(mes + line, 'color: black; background-color: skyblue;');\n\t\t}\n\t\tconsole.groupEnd();\n\t\t//console.log('Linkの出力 : %o', 'file:///Volumes/MacHD2/_Famibee/SKYNovel/prj/mat/main.sn');\n\t}\n\n\n\t#aIfStk\t: number[]\t= [-1];\t// 先頭に積む FIFOバッファ(unshift / shift)\n\t//MARK: ifブロックの終端\n\t#endif() {\n\t\tconst t = this.#aIfStk[0];\n\t\tif (! t) throw 'this.#aIfStk が異常です';\n\t\tif (t === -1) throw 'ifブロック内ではありません';\n\n\t\tthis.#idxToken = t;\n\t\tthis.#aIfStk.shift();\t// 最初の要素を取り除く\n\n\t\treturn false;\n\t}\n\t//MARK: ifブロックの開始\n\t#if(hArg: TArg) {\n\t\t//console.log('if idxToken:'+ this.#idxToken);\n\t\tconst {exp} = hArg;\n\t\tif (! exp) throw 'expは必須です';\n\t\tif (exp.startsWith('&')) throw '属性expは「&」が不要です';\n\n\t\tlet cntDepth = 0;\t\t// if深度カウンター\n\t\tlet\tidxGo = this.prpPrs.parse(exp) ?this.#idxToken :-1;\n\t\tconst lnIf = this.#script.aLNum[this.#idxToken];\n\t\tconst zLn = this.#lineNum -((lnIf ?? 0) || 0);\t// ??ではなく。NaN は falsy\n\t\tconst len = this.#script.len;\n\t\tfor (; this.#idxToken<len; ++this.#idxToken) {\n\t\t\tconst ln = this.#script.aLNum[this.#idxToken];\n\t\t\tthis.#script.aLNum[this.#idxToken] = ((ln ?? 0) || 0)+ zLn; // ??はNaN不可\n\t\t\tconst tkn = this.#script.aToken[this.#idxToken];\n\t\t\t//console.log(`[if]トークン ${this.#scriptFn}:${this.#lineNum} idx:${this.#idxToken} realLn:${this.#script.aLNum[this.#idxToken]} idxGo:${idxGo} cntDepth:${cntDepth} token<${tkn}>`);\n\t\t\tif (! tkn) continue;\n\n\t\t\tconst uc = tkn.charCodeAt(0);\t// TokenTopUnicode\n\t\t\tif (uc === 10) {this.#lineNum += tkn.length; continue}\t// \\n 改行\n\t\t\tif (uc !== 91) continue;\t// [ タグ開始以外\n\n\t\t\tconst [tag_name, args] = tagToken2Name_Args(tkn);\n\t\t\tif (! (tag_name in this.hTag)) throw `未定義のタグ[${tag_name}]です`;\n\t\t\tthis.#alzTagArg.parse(args);\n\n\t\t\tswitch (tag_name) {\n\t\t\tcase 'if':\t++cntDepth; break;\n\n\t\t\tcase 'elsif':{\n\t\t\t\tif (cntDepth > 0) break;\n\t\t\t\tif (idxGo > -1) break;\n\n\t\t\t\tconst e = this.#alzTagArg.hPrm.exp?.val;\n\t\t\t\tif (! e) throw 'expは必須です';\n\t\t\t\tif (e.startsWith('&')) throw '属性expは「&」が不要です';\n\t\t\t\tif (this.prpPrs.parse(e)) idxGo = this.#idxToken +1;\n\t\t\t}\tbreak;\n\n\t\t\tcase 'else':\n\t\t\t\tif (cntDepth > 0) break;\n\t\t\t\tif (idxGo === -1) idxGo = this.#idxToken +1;\n\t\t\t\tbreak;\n\n\t\t\tcase 'endif':\n\t\t\t\tif (cntDepth > 0) {--cntDepth; break}\n\t\t\t\tif (idxGo === -1) {\n\t\t\t\t\t++this.#idxToken;\n\t\t\t\t\tthis.#script.aLNum[this.#idxToken]! += zLn;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.#aIfStk.unshift(this.#idxToken +1);\t// 先頭に要素追加\n\t\t\t\t\tthis.#idxToken = idxGo;\n\t\t\t\t\tthis.#lineNum = this.#script.aLNum[this.#idxToken]!;\n\t\t\t\t\t\t// +zLn 不要\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tthrow '[endif]がないままスクリプト終端です';\n\t\t//return false;\n\t}\n\n\n\t//MARK: サブルーチンコール\n\t#call(hArg: TArg) {\n\t\tif (! argChk_Boolean(hArg, 'count', false)) this.#eraseKidoku();\n\n\t\tconst {fn} = hArg;\n\t\tif (fn) this.#cnvSnPath(fn);\t// chk only\n\t\tthis.#callSub({...hArg}, ReadingState.popLocalEvts());\n\t\t\t// ':hEvt1Time'の扱いだけは[macro]と異なる\n\n\t\tif (argChk_Boolean(hArg, 'clear_local_event', false)) this.hTag.clear_event({});\n\t\treturn this.#jumpWork(fn, hArg.label);\n\t}\n\t#callSub(hArg: TArg, hEvt1Time?: T_HEvt2Fnc) {\n\t\tconst csa: ICallStackArg = {\n\t\t\t...hArg,\n\t\t\t':hEvt1Time': hEvt1Time,\n\t\t\t':hMp'\t\t: this.val.cloneMp(),\n\t\t\t':lenIfStk'\t: this.#aIfStk.length,\n\t\t};\n\t\tthis.#script.aLNum[this.#idxToken] = this.#lineNum;\t// 戻ったときの行番号\n\t\tif (! this.#resvToken) {csa[':resvToken'] = ''; this.#clearResvToken()}\n\t\tthis.#aCallStk.push(new CallStack(this.#scriptFn, this.#idxToken, csa));\n\t\tthis.#aIfStk.unshift(-1);\t// 最初に要素を追加\n\t}\n\n\t//MARK: シナリオジャンプ\n\t#jump(hArg: TArg) {\n\t\tif (! argChk_Boolean(hArg, 'count', true)) this.#eraseKidoku();\n\n\t\tthis.#aIfStk[0] = -1;\n\t\treturn this.#jumpWork(hArg.fn, hArg.label);\n\t}\n\n\t//MARK: コールスタック破棄\n\t#pop_stack(hArg: TArg) {\n\t\tif (argChk_Boolean(hArg, 'clear', false)) this.#aCallStk = [];\n\t\telse if (! this.#aCallStk.pop()) throw 'スタックが空です';\n\t\tthis.#clearResvToken();\n\t\tthis.#aIfStk = [-1];\n\t\tthis.val.setMp(creMP());\n\n\t\treturn false;\n\t}\n\n\t//MARK: サブルーチンから戻る\n\t#return(hArg: TArg) {\n\t\tconst cs = this.#aCallStk.pop();\n\t\tif (! cs) throw 'スタックが空です';\n\t\tconst csa = cs.csArg;\n\t\tthis.#aIfStk = this.#aIfStk.slice(-csa[':lenIfStk']);\t// 最初の要素を取り除く\n\n\t\tconst hMp = csa[':hMp'];\t// マクロからの復帰の場合にmp:値も復帰\n\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\tif (hMp) this.val.setMp(hMp);\n\t\t\t// たぶん型チェック的に if (hMp) は不要だが、\n\t\t\t// あとからESLint対応なので安易に挙動を変えない方針で\n\n\t\tconst after_token = csa[':resvToken'];\n\t\tif (after_token) this.nextToken = ()=> {\n\t\t\tthis.#clearResvToken();\n\t\t\treturn after_token;\n\t\t}\n\t\telse this.#clearResvToken();\n\n\t\tif (csa[':hEvt1Time']) ReadingState.pushLocalEvts(csa[':hEvt1Time']);\n\n\t\tconst {fn, label} = hArg;\n\t\tif (fn || label) return this.#jumpWork(fn, label);\n\n\t\tif (cs.fn in this.#hScript) {this.#jump_light(cs); return false}\n\t\treturn this.#jumpWork(cs.fn, '', cs.idx);\t// 確実にスクリプトロードなので\n\t}\n\n\t#resvToken\t= '';\n\t#clearResvToken() {\n\t\tthis.#resvToken = '';\n\t\tthis.nextToken = ()=> this.#nextToken_Proc();\n\t}\n\n\n\t#skipLabel = '';\n\t#jumpWork(fn = '', label = '', idx = 0): boolean {\n\t\tif (CmnLib.debugLog) console.log(`📜 %c1:jumpWork%c fn:${fn} lbl:${label} idx:${String(idx)}`, 'color:#3B0;', '');\n\t\tif (! fn && ! label) this.main.errScript('[jump系] fnまたはlabelは必須です');\n\t\tif (label) {\n\t\t\tif (! label.startsWith('*')) this.main.errScript('[jump系] labelは*で始まります');\n\t\t\tthis.#skipLabel = label;\n\t\t\tif (! this.#skipLabel.startsWith('**')) this.#idxToken = idx;\n\t\t}\n\t\telse {\n\t\t\tthis.#skipLabel = '';\n\t\t\tthis.#idxToken = idx;\n\t\t}\n\n\t\tif (! fn) {this.analyzeInit(); return false}\n\t\tif (fn.includes('@')) throw '[jump系] fn には文字「@」は禁止です';\n\n\t\tconst full_path = this.#cnvSnPath(fn);\n\t\tif (fn === this.#scriptFn) {this.analyzeInit(); return false}\n\t\tthis.#scriptFn = fn;\n\t\tconst st = this.#hScript[fn];\n\t\tif (st) {this.#script = st; this.analyzeInit(); return false}\n\n\t\tconst RPN_JUMPWORK = `jumpWork fn:${fn}`;\n\t\tReading.beginProc(RPN_JUMPWORK);\n\t\tlet fp_diff = '';\n\t\tconst ldr = new Loader;\n\t\ttry {\n\t\t\tfp_diff = this.#cnvSnPath(fn +'@');\n\t\t\t// 派生ファイルが存在する場合\n\t\t\tldr.add({name: fn +':base', url: full_path});\n\t\t\tldr.add({name: fn, url: fp_diff});\n\t\t} catch {\n\t\t\t// 派生ファイルはない\n\t\t\tldr.add({name: fn, url: full_path});\n\t\t}\n\t\tldr.use((res, next)=> {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\t\t\tthis.sys.dec(res.extension, res.data).then(d=> {\n\t\t\t\tres.data = d;\n\t\t\t\tnext();\n\t\t\t})\n\t\t\t.catch((e: unknown)=> {\n\t\t\t\tthis.main.errScript(`[jump系]snロード失敗です fn:${res.name} ${String(e)}`, false);\n\t\t\t\tnext();\n\t\t\t});\n\t\t})\n\t\t.load((_ldr, hRes)=> {\n\t\t\tReading.endProc(RPN_JUMPWORK);\n\t\t\tif (fp_diff) {\t// 派生ファイルが存在する場合\n\t\t\t\tconst scrBase: string = hRes[fn +':base']!.data;\n\t\t\t\tconst scrDiff: string = hRes[fn]!.data;\n\t\t\t\tconst aBase: string[] = scrBase.split('\\n');\n\t\t\t\tconst aDiff: string[] = scrDiff.split('\\n');\n\t\t\t\tconst lenB = aBase.length;\n\t\t\t\tconst lenD = aDiff.length;\n\t\t\t\t// 【派生スクリプト】の空行へ、【基底スクリプト】の同じ行の内容をコピー\n\t\t\t\tfor (let i=0; i<lenD && i<lenB; ++i) aDiff[i] ||= aBase[i] ?? '';\n\n\t\t\t\t// 【接尾辞つきファイル】として扱う\n\t\t\t\thRes[fn]!.data = aDiff.join('\\n');\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\t\t\t\tdelete hRes[fn +':base'];\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line @typescript-eslint/unbound-method\n\t\t\tthis.nextToken = this.#nextToken_Proc;\n\t\t\tthis.#lineNum = 1;\n\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\t\t\tthis.#resolveScript(hRes[fn]!.data);\n\t\t\tthis.hTag.record_place({});\n\t\t\tthis.analyzeInit();\n\t\t});\n\n\t\treturn true;\n\t}\n\tprivate\tanalyzeInit(): void {\n\t\tif (CmnLib.debugLog) console.log(`📜 %c9:analyzeInit%c fn:${this.#scriptFn} lbl:${this.#skipLabel} idx:${String(this.#idxToken)}`, 'color:#3B0;', '');\n\t\tconst o = this.#seekScript(this.#script, Boolean(this.val.getVal('mp:const.sn.macro.name')), this.#lineNum, this.#skipLabel, this.#idxToken);\n\t\tthis.#idxToken\t= o.idx;\n\t\tthis.#lineNum\t= o.ln;\n\t}\n\n\t// シナリオ解析処理ループ・冒頭処理\n\tnextToken = ()=> '';\t// 初期化前に終了した場合向け\n\t#nextToken_Proc(): string {\n\t\tif (this.#errOverScr()) return '';\n\n\t\tthis.#recordKidoku();\n\n\t\t// トークンの行番号更新\n\t\tthis.#script.aLNum[this.#idxToken] ||= this.#lineNum;\t// ??はNaN不可\n\t\tconst token = this.#script.aToken[this.#idxToken]!;\n\t\tthis.#dbgToken(token);\n\t\t++this.#idxToken;\n\n\t\treturn token;\n\t}\n\t#dbgToken = (_token: string)=> { /* empty */ };\n\t#errOverScr(): boolean {\n\t\tif (this.#idxToken < this.#script.len) return false;\n\t\tthis.main.errScript('スクリプト終端です errOverScr');\n\t\treturn true;\n\t}\n\n\n\treadonly #REG_NONAME_LABEL\t\t= /(\\*{2,})([^|]*)/;\n\treadonly #REG_TOKEN_MACRO_BEGIN\t= /^\\[macro\\s/;\n\treadonly #REG_TOKEN_MACRO_END\t= /^\\[endmacro[\\s\\]]/;\n\t#seekScript(st: Script, inMacro: boolean, iln: number, iskipLabel: string, idx: number): ISeek {\n\t\t//console.log(`seekScript (from)inMacro:${inMacro} (from)ln:${ln} (to)skipLabel:${skipLabel}: (to)idx:${idx}`);\n\t\tconst len = st.aToken.length;\n\t\tlet ln = iln, skipLabel = iskipLabel;\n\t\tif (! skipLabel) {\t// ラベルジャンプ以外(先頭から開始)\n\t\t\tif (this.#errOverScr()) return {idx, ln};\n\n\t\t\tif (! st.aLNum[idx]) {\t// NaN、undefined は falsy\n\t\t\t\tln = 1;\n\t\t\t\tfor (let j=0; j<idx; ++j) {\n\t\t\t\t\t// 走査ついでにトークンの行番号も更新\n\t\t\t\t\tst.aLNum[j] ||= ln;\t// ??はNaN不可\n\n\t\t\t\t\tconst tkn = st.aToken[j]!;\n\t\t\t\t\tif (tkn.startsWith('\\n')) ln += tkn.length;\t// \\n 改行\n\t\t\t\t\telse ln += (tkn.match(/\\n/g) ?? []).length;\n\t\t\t\t}\n\t\t\t\tst.aLNum[idx] = ln;\n\t\t\t}\n\t\t\telse ln = st.aLNum[idx];\n\n\t\t\treturn {idx, ln};\n\t\t}\n\n\t\t// 無名ラベルジャンプ\n\t\tst.aLNum[0] = 1;\n\t\tconst a_skipLabel = skipLabel.match(this.#REG_NONAME_LABEL);\n\t\tif (a_skipLabel) {\n\t\t\tskipLabel = a_skipLabel[1]!;\n\t\t\tlet i = idx;\n\t\t\tswitch (a_skipLabel[2]) {\n\t\t\tcase 'before':\n\t\t\t\twhile (st.aToken[--i] !== skipLabel) {\n\t\t\t\t\tif (i === 0) DebugMng.myTrace(`[jump系 無名ラベルbefore] \n\t\t\t\t\t\t${String(ln)} 行目以前で ${inMacro ?'マクロ内に' :''} ラベル【 ${skipLabel} 】がありません`, 'ET');\n\t\t\t\t\tif (inMacro && st.aToken[i]!.search(this.#REG_TOKEN_MACRO_BEGIN) > -1) DebugMng.myTrace('[jump系 無名ラベルbefore] マクロ内にラベル【'+ skipLabel +'】がありません', 'ET');\n\t\t\t\t}\n\t\t\t\treturn {idx: i +1, ln: st.aLNum[i]!};\t//\tbreak;\n\n\t\t\tcase 'after':\n\t\t\t\twhile (st.aToken[++i] !== skipLabel) {\n\t\t\t\t\tif (i === len) DebugMng.myTrace(`[jump系 無名ラベルafter] ${String(ln)} 行目以後でマクロ内にラベル【${skipLabel}】がありません`, 'ET');\n\t\t\t\t\tif (st.aToken[i]!.search(this.#REG_TOKEN_MACRO_END) > -1) DebugMng.myTrace(`[jump系 無名ラベルafter] ${String(ln)} 行目以後でマクロ内にラベル【 ${skipLabel} 】がありません`, 'ET');\n\t\t\t\t}\n\t\t\t\treturn {idx: i +1, ln: st.aLNum[i]!};\t//\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tDebugMng.myTrace('[jump系] 無名ラベル指定【label='+ skipLabel +'】が間違っています', 'ET');\n\t\t\t}\n\t\t}\n\n\t\t// ラベルジャンプ\n\t\tln = 1;\n\t\t// (new RegExp(\"~\")) の場合は、バックスラッシュは2つ必要\n\t\tconst reLabel = new RegExp(\n\t\t\t'^'+ skipLabel.replaceAll('*', '\\\\*') +'(?=\\\\s|;|\\\\[|\\\\||$)');\n\t\tlet in_let_ml = false;\n\t\tfor (let i=0; i<len; ++i) {\n\t\t\t// 走査ついでにトークンの行番号も更新\n\t\t\tst.aLNum[i] ||= ln;\t// ??はNaN不可\n\n\t\t\tconst tkn = st.aToken[i]!;\n\t\t\tif (in_let_ml) {\n\t\t\t\tif (this.#grm.testTagEndLetml(tkn)) in_let_ml = false;\n\t\t\t\telse ln += (tkn.match(/\\n/g) ?? []).length;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst uc = tkn.charCodeAt(0);\t// TokenTopUnicode\n\t\t\tif (uc === 10) {ln += tkn.length; continue}\t// \\n 改行\n\t\t\tif (uc === 42) {\t// 42 = *\n\t\t\t\tif (tkn.search(reLabel) > -1) return {idx: i +1, ln};//\tbreak;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (uc !== 91) continue;\t// [ タグ開始\n\n\t\t\tln += (tkn.match(/\\n/g) ?? []).length;\n\t\t\tif (this.#grm.testTagLetml(tkn)) in_let_ml = true;\n\t\t}\n\t\tif (in_let_ml) throw '[let_ml]の終端・[endlet_ml]がありません';\n\n\t\tDebugMng.myTrace(`[jump系] ラベル【${skipLabel}】がありません`, 'ET');\n\t\tthrow 'Dummy';\n\t}\n\n\t#hScript\t: HScript\t= Object.create(null);\t//{} シナリオキャッシュ\n\t#resolveScript(txt: string) {\n\t\tlet mes = '';\n\t\ttry {\n\t\t\tmes = 'ScriptIterator.resolveScript';\n\t\t\tconst scr = this.#grm.resolveScript(txt);\n\t\t\tmes = 'ScriptIterator.replaceScript_Wildcard';\n\t\t\tthis.#replaceScript_Wildcard(scr);\n\t\t\tthis.#hScript[this.#scriptFn] = this.#script = scr;\n\t\t}\n\t\tcatch (e) {\n\t\t\tif (e instanceof Error) mes += `例外 mes=${e.message}(${e.name})`;\n\t\t\telse mes = String(e);\n\t\t\tthis.main.errScript(mes, false);\n\t\t}\n\t\tthis.val.touchAreaKidoku(this.#scriptFn);\n\t}\n\n\t#jump_light(cs: CallStack) {\n\t\t// jumpでは連続マクロでスタックオーバーフローになるので簡易版を\n\t\t// 主に[return]やマクロ終了でジャンプ先がチェック不要な場合用\n\t\t// analyzeInit()とかもジャンプ前にやってて不要だし\n\t\tthis.#scriptFn\t= cs.fn;\n\t\tthis.#idxToken\t= cs.idx;\n\t\tconst st = this.#hScript[this.#scriptFn];\n\t\tif (st) this.#script = st;\n\t\tthis.#lineNum = this.#script.aLNum[cs.idx]!;\n//console.log(`fn:ScriptIterator.ts %cjump_light cs ${cs.fn}:${this.#lineNum} idx:${cs.idx}`, 'background-color:#a03b79;');\n\t}\n\n\n\treadonly #REG_WILDCARD\t= /^\\[(call|loadplugin)\\s/;\n\treadonly #REG_WILDCARD2\t= /\\bfn\\s*=\\s*[^\\s\\]]+/;\n\t#replaceScript_Wildcard(scr: Script) {\n\t\tfor (let i=scr.len -1; i>=0; --i) {\n\t\t\tconst token = scr.aToken[i]!;\n\t\t\tif (! this.#REG_WILDCARD.test(token)) continue;\n\n\t\t\tconst [tag_name, args] = tagToken2Name_Args(token);\n\t\t\tthis.#alzTagArg.parse(args);\n\n\t\t\tconst p_fn = this.#alzTagArg.hPrm.fn;\n\t\t\tif (! p_fn) continue;\n\t\t\tconst {val: fn} = p_fn;\n\t\t\tif (! fn.endsWith('*')) continue;\n\n\t\t\tscr.aToken.splice(i, 1, '\\t', '; '+ token);\n\t\t\tscr.aLNum.splice(i, 1, NaN, NaN);\n\n\t\t\tconst ext = tag_name === 'loadplugin'\n\t\t\t\t? SEARCH_PATH_ARG_EXT.CSS\n\t\t\t\t: SEARCH_PATH_ARG_EXT.SN;\n\t\t\tconst a = this.cfg.matchPath('^'+ fn.slice(0, -1) +'.*', ext);\n\t\t\tfor (const v of a) {\n\t\t\t\tconst nt = token.replace(\n\t\t\t\t\tthis.#REG_WILDCARD2,\n\t\t\t\t\t'fn='+ decodeURIComponent(getFn(v[ext]!))\n\t\t\t\t);\n\t\t\t\t//console.log('\\t='+ nt +'=');\n\t\t\t\tscr.aToken.splice(i, 0, nt);\n\t\t\t\tscr.aLNum.splice(i, 0, NaN);\n\t\t\t}\n\t\t}\n\t\tscr.len = scr.aToken.length;\n\t}\n\n\n\t#recordKidoku() {\n\t\tconst ar = this.val.touchAreaKidoku(this.#scriptFn);\n\n\t\t// マクロ内やサブルーチンではisKidokuを変更させない\n\t\tif (this.#aCallStk.length > 0) {ar.record(this.#idxToken); return}\n\n\t\tthis.#isKidoku = ar.search(this.#idxToken);\n\t\tthis.val.setVal_Nochk('tmp', 'const.sn.isKidoku', this.#isKidoku);\n\t\tif (this.#isKidoku) return;\n\n\t\tar.record(this.#idxToken);\n\t\t// saveKidoku()\n\t\t\t// 厳密にはここですべきだが、パフォーマンスに問題があるので\n\t\t\t// クリック待ちを期待できるwait、waitclick、s、l、pタグで\n\t\t\t// saveKidoku()をコール。\n\t}\n\t#isKidoku\t= false;\n\tget isKidoku() {return this.#isKidoku}\n\t#eraseKidoku() {\n\t\tthis.val.getAreaKidoku(this.#scriptFn)?.erase(this.#idxToken);\n\t\tthis.#isKidoku = false;\n\t}\n\tget isNextKidoku(): boolean {\n\t\tlet fn\t= this.#scriptFn;\n\t\tlet idx\t= this.#idxToken;\n\t\tlet len\t= this.#script.len;\n\t\tif (this.#aCallStk.length > 0) {\n\t\t\tconst cs = this.#aCallStk[0]!;\n\t\t\tfn = cs.fn;\n\t\t\tidx = cs.idx;\n\t\t\tconst st = this.#hScript[fn];\n\t\t\tif (st) len = st.len;\n\t\t}\n\t\tif (idx === len) return false;\t// スクリプト終端\n\n\t\tconst areas = this.val.getAreaKidoku(fn);\n\t\treturn areas?.search(idx) ?? false;\n\t}\n\n\n\tget normalWait(): number {\n\t\treturn this.#isKidoku\n\t\t?\n\t\t\tthis.val.tagCh_doWait_Kidoku\n\t\t\t?\tthis.val.tagCh_msecWait_Kidoku\n\t\t\t:\t0\n\t\t:\n\t\t\tthis.val.tagCh_doWait\n\t\t\t?\tthis.val.tagCh_msecWait\n\t\t\t:\t0\n\t\t;\n\t}\n\n\n\t//MARK: 括弧マクロの定義\n\t#bracket2macro(hArg: TArg) {\n\t\tthis.#grm.bracket2macro(hArg, this.hTag, this.#script, this.#idxToken);\n\n\t\treturn false;\n\t}\n\n\t//MARK: 一文字マクロの定義\n\t#char2macro(hArg: TArg) {\n\t\tthis.#grm.char2macro(hArg, this.hTag, this.#script, this.#idxToken);\n\n\t\treturn false;\n\t}\n\n\t//MARK: マクロ定義の開始\n\t// eslint-disable-next-line no-irregular-whitespace\n\treadonly\t#REG_NG4MAC_NM = /[\"'#;\\\\] ]+/;\n\t#macro(hArg: TArg) {\n\t\tconst {name} = hArg;\n\t\tif (! name) throw 'nameは必須です';\n\t\tif (name in this.hTag) throw `[${name}]はタグかすでに定義済みのマクロです`;\n\t\tif (this.#REG_NG4MAC_NM.test(name)) throw `[${name}]はマクロ名として異常です`;\n\n\t\tconst ln = this.#lineNum;\n\t\tconst cs = new CallStack(this.#scriptFn, this.#idxToken);\n\t\tthis.#strStepin += '|'+ name;\n\t\t// (new RegExp(\"~\")) の場合は、バックスラッシュは2つ必要\n\t\tthis.#REGSTEPIN = new RegExp(`\\\\[(${this.#strStepin})\\\\b`);\n\t\tthis.hTag[<keyof T_HTag>name] = hArgM=> {\n\t\t\thArgM.design_unit = hArg.design_unit;\n\t\t\tthis.#callSub(hArgM);\n\n\t\t\t// AIRNovelの仕様:親マクロが子マクロコール時、*がないのに値を引き継ぐ\n\t\t\t//for (const k of Object.keys(hArg)) this.val.setVal_Nochk('mp', k, hArg[k]);\n\t\t\tthis.val.setMp({\n\t\t\t\t...hArgM,\n\t\t\t\t'const.sn.macro': JSON.stringify({name: hArg.name}),\n\t\t\t\t\t// ムダに大きいスクリプター用情報を削除、名前だけに\n\t\t\t\t'const.sn.me_call_scriptFn': this.#scriptFn,\n\t\t\t});\n\t\t\tthis.val.setVal_Nochk('mp', 'const.sn.me_call_scriptFn', this.#scriptFn);\n\n\t\t\tthis.#lineNum = ln;\n\t\t\tthis.#jump_light(cs);\n\n\t\t\treturn false;\n\t\t};\n\n\t\tfor (; this.#idxToken < this.#script.len; ++this.#idxToken) {\n\t\t\t// トークンの行番号更新\n\t\t\tthis.#script.aLNum[this.#idxToken] ||= this.#lineNum; // ??はNaN不可\n\n\t\t\tconst token = this.#script.aToken[this.#idxToken]!;\n\t\t\tif (token.search(this.#REG_TOKEN_MACRO_END) > -1) {\n\t\t\t\t++this.#idxToken;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst uc = token.charCodeAt(0);\t// TokenTopUnicode\n\t\t\tif (uc === 10) this.#lineNum += token.length;\t// \\n 改行\n\t\t\telse if (uc === 91) this.#lineNum += (token.match(/\\n/g) ?? []).length;\t// [ タグ開始\n\t\t}\n\t\tthrow `マクロ[${name}]定義の終端・[endmacro]がありません`;\n\t}\n\t#strStepin\t= 'call';\n\t#REGSTEPIN\t= /\\[(call)\\b/;\t// https://regex101.com/r/Lk9ASK/1\n\n\n\t//MARK: しおりの読込\n\t#load(hArg: TArg) {\n\t\tif ('fn' in hArg !== 'label' in hArg) throw 'fnとlabelはセットで指定して下さい';\n\n\t\tconst place = argChk_Num(hArg, 'place', 0);\n\t\tconst mark = this.val.getMark(place);\n\t\tif (! mark) throw `place=${String(place)} は存在しません`\n\n\t\treturn this.loadFromMark(hArg, mark, SndProcOnLoad.ALL_STOP_AND_PLAY);\n\t}\n\tloadFromMark(hArg: TArg, mark: T_Mark, snd: SndProcOnLoad = SndProcOnLoad.MINIMAL_STOP) {\n\t\tthis.hTag.clear_event({});\n\t\tthis.val.mark2save(mark);\n\t\tthis.val.setMp(creMP());\n\t\tthis.#layMng.recPagebreak();\n\n\t\tlet ap: Promise<void>[] = [];\n\t\tif (snd !== SndProcOnLoad.NO_TOUCH) ap = this.sndMng\n\t\t.playLoopFromSaveObj(snd === SndProcOnLoad.ALL_STOP_AND_PLAY);\n\n\t\tif (argChk_Boolean(hArg, 'do_rec', true)) this.#mark = {\n\t\t\thSave\t: this.val.cloneSave(),\n\t\t\thPages\t: {...mark.hPages},\n\t\t\taIfStk\t: [...mark.aIfStk],\n\t\t}\n\n\t\tconst o: TArg = {\n\t\t\tenabled\t: Boolean(this.val.getVal('save:const.sn.autowc.enabled')),\n\t\t\ttext\t: String(this.val.getVal('save:const.sn.autowc.text')),\n\t\t\ttime\t: Number(this.val.getVal('save:const.sn.autowc.time')),\n\t\t};\n\t\tthis.hTag.autowc(o);\n\n\t\tthis.#aIfStk = [...this.#mark.aIfStk];\n\t\tthis.#aCallStk = [];\n\t\tCmnTween.stopAllTw();\n\n\t\tconst p = Promise.allSettled([...ap, ...this.#layMng.playback(this.#mark.hPages)])\n\t\t.then(()=> this.#layMng.cover(false));\n\t\tconst {index, fn} = hArg;\n\t\tif (index) {\t// ページ移動用\n\t\t\tif (CmnLib.debugLog) console.log(`📜 %cloadFromMark index:${String(index)} move!%c fn:${fn ?? ''}`, 'color:#3B0;', '');\n\t\t\tp.then(()=> {\n\t\t\t\tif (! this.#jumpWork(fn, '', index)) this.main.resume();\n\t\t\t\t// if (ret)\t\t// 中で非同期で endProc() を呼ぶのでまかせる\n\t\t\t\t// if (! ret)\t// 同期でなにもせずすぐ返る\n\t\t\t})\n\t\t\t.catch((e: unknown)=> console.error('loadFromMark e:%o', e));\n\t\t\treturn true;\n\t\t}\n\n\t\tthis.#layMng.cover(true);\t// ページ移動では全画面黒で覆わない\n\t\tconst fn2 = String(this.val.getVal('save:const.sn.scriptFn'));\n\t\tconst idx = Number(this.val.getVal('save:const.sn.scriptIdx'));\n\t\t// eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\t\tdelete this.#hScript[fn2];\t// 必ずスクリプトを再読込。吉里吉里に動作を合わせる\n\t\tconst {label} = hArg;\n\t\tp.then(label ?()=> {\n\t\t\tthis.#scriptFn = fn2;\n\t\t\tthis.#idxToken = idx;\n\t\t\tif (! this.hTag.call({fn, label})) this.main.resume();\n\t\t}\n\t\t: ()=> {\n\t\t\tif (! this.#jumpWork(fn2, '', idx)) this.main.resume();\n\t\t})\n\t\t.catch((e: unknown)=> console.error('loadFromMark e:%o', e));\n\n\t\treturn true;\n\t}\n\n\t//MARK: スクリプト再読込\n\t#reload_script(hArg: TArg) {\t// 最後の[record_place]から再開\n\t\tconst mark = this.val.getMark(0);\n\t\tif (! mark) return false;\n\n\t\t// 起動から再読込までの間に追加・変更・削除されたファイルがあるかも、に対応\n\t\t//\tdelete this.hScript[this.#scriptFn];\t// これだと[reload_script]位置になる\n\t\t// eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\t\tdelete this.#hScript[getFn(mark.hSave['const.sn.scriptFn'])];\n\n\t\t// 派生ファイルを削除\n\t\tconst h: HScript = {};\n\t\tfor (const fn in this.#hScript) {\n\t\t\ttry {this.#cnvSnPath(fn +'@')}\n\t\t\tcatch {h[fn] = this.#hScript[fn]!}\t// 派生ファイル以外を残す\n\t\t}\n\t\tthis.#hScript = h;\n\n\t\thArg.do_rec = false;\n\t\treturn this.loadFromMark(hArg, mark, SndProcOnLoad.NO_TOUCH);\n\t}\n\n\n\t//MARK: セーブポイント指定\n\t#mark: T_Mark = {\n\t\thSave\t: creSAVEDATA(),\n\t\thPages\t: {},\n\t\taIfStk\t: [-1],\n\t};\n\t#record_place = ()=> {\n\t\tconst {fn, idx} = this.nowScrIdx();\n\t\tthis.val.setVal_Nochk('save', 'const.sn.scriptFn', fn);\n\t\tthis.val.setVal_Nochk('save', 'const.sn.scriptIdx', idx);\n\t\tthis.#mark = {\n\t\t\thSave\t: this.val.cloneSave(),\n\t\t\thPages\t: this.#layMng.record(),\n\t\t\taIfStk\t: this.#aIfStk.slice(this.#aCallStk.length),\n\t\t};\n\n\t\treturn false;\n\t}\n\tnowScrIdx(): {fn: string, idx: number} {\n\t\tconst len = this.#aCallStk.length;\n\t\tif (len === 0) return {\n\t\t\tfn\t: this.#scriptFn,\n\t\t\tidx\t: this.#idxToken,\n\t\t};\n\n\t\tconst cs = this.#aCallStk[0]!;\n\t\treturn {\n\t\t\tfn\t: cs.fn,\n\t\t\tidx\t: cs.idx,\n\t\t}\n\t}\n\tnowMark(): T_Mark {return {...this.#mark}}\t// コピーはここでする\n\n\t//MARK: スクリプト停止位置(マクロなどなら最上位の呼び元)\n\tnowScrFnLn(): {fn: string, ln: number, col_s: number, col_e: number} {\n\t\tconst {fn, idx} = this.nowScrIdx();\n\t\tconst st = this.#hScript[fn]!;\n\t\tconst o = this.#cnvIdx2lineCol(st, idx);\t// -1不要\n\t\treturn {fn, ...o};\n\t}\n\n\t//MARK: しおりの保存\n\t#save(hArg: TArg) {\n\t\tif (! ('place' in hArg)) throw 'placeは必須です';\n\t\tconst place = Number(hArg.place);\n\n\t\tdelete hArg[':タグ名'];\n\t\tdelete hArg.place;\n\t\thArg.text = hArg.text ?? '';\n\t\tthis.#mark.json = hArg;\n\t\tthis.val.setMark(place, this.#mark);\n\n\t\tconst now_sp = Number(this.val.getVal('sys:const.sn.save.place'));\n\t\tif (place === now_sp) this.val.setVal_Nochk('sys', 'const.sn.save.place', now_sp +1);\n\n\t\treturn false;\n\t}\n\n\n\trecodeDesign(hArg: TArg) {\n\t\tlet fn = '';\n\t\tlet idx = 0;\n\n\t\tconst len = this.#aCallStk.length;\n\t\tif (hArg.design_unit && len > 0) {\n\t\t\t// デザインモードでこのマクロへの引数変更とするか(内部をサーチさせない)\n\t\t\tconst cs = this.#aCallStk[0]!;\n\t\t\tfn = cs.fn;\n\t\t\tidx = cs.idx;\n\t\t}\n\t\telse {\n\t\t\tfn = this.#scriptFn;\n\t\t\tidx = this.#idxToken;\n\t\t}\n\t\thArg[':path']\t= this.#cnvSnPath4Dbg(fn);\n\t\tconst scr = this.#hScript[fn]!;\n\t\tconst lc = this.#cnvIdx2lineCol(scr, idx);\n\t\thArg[':ln']\t\t= lc.ln;\n\t\thArg[':col_s']\t= lc.col_s;\n\t\thArg[':col_e']\t= lc.col_e;\n\t\tconst idx_1 = idx -1;\n\t\thArg[':idx_tkn']= idx_1;\n\t\thArg[':token']\t= scr.aToken[idx_1];\n\n\t\tthis.sys.send2Dbg('_recodeDesign', hArg);\n\t}\n\treplace(idx: number, val: string) {this.#script.aToken[idx] = val}\n\n}\n"],"names":["ScriptIterator","cfg","hTag","main","val","prpPrs","sndMng","sys","o","#let_ml","#dump_stack","#dump_script","#endif","#if","#call","#jump","#pop_stack","#return","#bracket2macro","#char2macro","#macro","#load","#reload_script","#record_place","#save","#dbgToken","token","#scriptFn","#lineNum","#idxToken","#aCallStk","#procDebugtag","tag_name","#alzTagArg","#aIfStk","#grm","Grammar","ce","RubySpliter","CmnLib","#hHook","type","#isBreak_base","fnc","hLineBP","fn","v","#regBreakPoint","#hFuncBP","tkn","uc","#script","len","#jumpWork","AnalyzeTagArg","#hFn2hLineBP","#cnvSnPath4Dbg","#breakState","#aStack","#isIdxOverLast","#idxDx4Dbg","#go_stepover","#REGSTEPIN","#go_stepout","#cnvSnPath","SEARCH_PATH_ARG_EXT","out","#csDepth_macro_esc","_token","#subHitCondition","tagToken2Name","bp","isBreak","getFn","idx_n","tkn0","fn0","tag_name0","nm","ma","lc0","#cnvIdx2lineCol","a","i","cs","st","#hScript","lc","_tag_name","args","tag_fnc","hPrm","cond","p","ps","hArg","csa","creCSArg","arg_nm","def","mac","Reading","#setTag2ChIn","promise","resolve","RPN_COMP_CHIN","#setTag2FinishTrans","#evtMng","CmnTween","fncBypass","#hTag2SkipBypass","argChk_Boolean","#hTag2CanSkip","BUF_BGM","#layMng","evtMng","layMng","name","ml","now","hMp","from_macro_nm","call_nm","idx","ret","lN","set_fnc","break_fnc","#fncSet","goto","#fnLastBreak","#hScrCache4Dump","#fncBreak","_goto","#dumpErrLine","s","ln_txt_width","ln","mes","line","exp","cntDepth","idxGo","lnIf","zLn","tagToken2Name_Args","e","#eraseKidoku","#callSub","ReadingState","hEvt1Time","#resvToken","#clearResvToken","CallStack","creMP","after_token","label","#jump_light","#nextToken_Proc","#skipLabel","full_path","RPN_JUMPWORK","fp_diff","ldr","Loader","res","next","d","_ldr","hRes","scrBase","scrDiff","aBase","aDiff","lenB","lenD","#resolveScript","#seekScript","#errOverScr","#recordKidoku","#REG_NONAME_LABEL","#REG_TOKEN_MACRO_BEGIN","#REG_TOKEN_MACRO_END","inMacro","iln","iskipLabel","skipLabel","j","a_skipLabel","DebugMng","reLabel","in_let_ml","txt","scr","#replaceScript_Wildcard","#REG_WILDCARD","#REG_WILDCARD2","p_fn","ext","nt","ar","#isKidoku","#REG_NG4MAC_NM","#strStepin","hArgM","place","argChk_Num","mark","snd","ap","#mark","index","fn2","h","creSAVEDATA","now_sp","idx_1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ScriptIterator.js","sources":["../src/sn/ScriptIterator.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/* ***** BEGIN LICENSE BLOCK *****\n\tCopyright (c) 2018-2025 Famibee (famibee.blog38.fc2.com)\n\n\tThis software is released under the MIT License.\n\thttp://opensource.org/licenses/mit-license.php\n** ***** END LICENSE BLOCK ***** */\n\nimport {argChk_Boolean, getFn, CmnLib, argChk_Num, RPN_COMP_CHIN} from './CmnLib';\nimport type {T_HTag, TArg, Script, TTag} from './Grammar';\nimport type {T_Main, T_Variable, T_Mark, T_PropParser, T_HEvt2Fnc} from './CmnInterface';\nimport {creSAVEDATA} from './CmnInterface';\nimport type {Config} from './Config';\nimport {CallStack, creCSArg, creMP, type ICallStackArg} from './CallStack';\nimport {Grammar, tagToken2Name_Args, tagToken2Name} from './Grammar';\nimport {AnalyzeTagArg} from './AnalyzeTagArg';\nimport {RubySpliter} from './RubySpliter';\nimport type {EventMng} from './EventMng';\nimport type {LayerMng} from './LayerMng';\nimport {DebugMng} from './DebugMng';\nimport type {SoundMng} from './SoundMng';\nimport type {SysBase} from './SysBase';\nimport {SEARCH_PATH_ARG_EXT} from './ConfigBase';\nimport {CmnTween} from './CmnTween';\nimport {Reading, ReadingState} from './Reading';\nimport {BUF_BGM} from './SndBuf';\n\nimport {Loader} from 'pixi.js';\n\ntype HScript = {\n\t[fn: string]: Script;\n}\n\ntype ISeek = {\n\tidx\t\t: number;\n\tln\t\t: number;\n}\n\n\nconst enum BreakState {Running, Wait, Break, Breaking, Step, Stepping, StepOuting, StepOut}\n\nconst enum SndProcOnLoad {\n\tMINIMAL_STOP,\n\tNO_TOUCH,\n\tALL_STOP_AND_PLAY,\n}\n\n\nexport class ScriptIterator {\n\t#script\t\t: Script\t= {aToken: [''], len: 1, aLNum: [1]};\n\n\t#scriptFn\t= '';\n\tget scriptFn() {return this.#scriptFn}\n\t#idxToken\t= 0;\n\tget idxToken() {return this.#idxToken}\n\tsubIdxToken() {--this.#idxToken}\n\t#lineNum\t= 0;\n\tget lineNum() {return this.#lineNum}\n\treadonly addLineNum\t= (len: number)=> {this.#lineNum += len};\n\tjumpJustBefore() {this.#jumpWork(this.#scriptFn, '', --this.#idxToken)}\n\t\t// 直前にジャンプ\n\n\n\t#aCallStk\t: CallStack[]\t= [];\t// FILOバッファ(push/pop)\n\n\treadonly\t#grm;\n\treadonly\t#alzTagArg\t= new AnalyzeTagArg;\n\n\n\t//MARK: コンストラクタ\n\tconstructor(private readonly cfg: Config, private readonly hTag: T_HTag, private readonly main: T_Main, private readonly val: T_Variable, private readonly prpPrs: T_PropParser, private readonly sndMng: SoundMng, private readonly sys: SysBase) {\n\t\t// 変数操作\n\t\thTag.let_ml\t\t= o=> this.#let_ml(o);\t// インラインテキスト代入\n\t\thTag.endlet_ml\t= ()=> false;\t\t\t// インラインテキスト代入終端\n\t\t\t// [if]ブロック内で【未定義のタグ[endlet_ml]です】エラーが発生する対策\n\n\t\t// デバッグ・その他\n\t\thTag.dump_stack\t= ()=> this.#dump_stack();\t// スタックのダンプ\n\t\thTag.dump_script= o=> this.#dump_script(o);\t// スクリプトのダンプ\n\n\t\t// 条件分岐\n\t\thTag.else\t\t=\t\t\t\t\t\t\t// その他ifブロック開始\n\t\thTag.elsif\t\t=\t\t\t\t\t\t\t// 別条件のifブロック開始\n\t\thTag.endif\t\t= ()=> this.#endif();\t\t// ifブロックの終端\n\t\thTag.if\t\t\t= o=> this.#if(o);\t\t\t// ifブロックの開始\n\n\t\t// ラベル・ジャンプ\n\t\t//hTag.button\t// LayerMng.ts内で定義\t\t// ボタンを表示\n\t\thTag.call\t\t= o=> this.#call(o);\t\t// サブルーチンコール\n\t\thTag.jump\t\t= o=> this.#jump(o);\t\t// シナリオジャンプ\n\t\t//hTag.page\t\t= // ReadState が担当に\t\t// ページ移動\n\t\thTag.pop_stack\t= o=> this.#pop_stack(o);\t// コールスタック破棄\n\t\thTag.return\t\t= o=> this.#return(o);\t\t// サブルーチンから戻る\n\n\t\t// マクロ\n\t\thTag.bracket2macro\t= o=> this.#bracket2macro(o);// 括弧マクロの定義\n\t\thTag.char2macro\t\t= o=> this.#char2macro(o);\t// 一文字マクロの定義\n\t\thTag.endmacro\t\t= o=> this.#return(o);\t\t// マクロ定義の終了\n\t\thTag.macro\t\t\t= o=> this.#macro(o);\t\t// マクロ定義の開始\n\n\t\t// しおり\n\t\t//hTag.copybookmark\t\t// Variable.ts内で定義\t// しおりの複写\n\t\t//hTag.erasebookmark\t// Variable.ts内で定義\t// しおりの消去\n\t\thTag.load\t\t\t= o=> this.#load(o);\t\t\t// しおりの読込\n\t\thTag.reload_script\t= o=> this.#reload_script(o);\t// スクリプト再読込\n\t\thTag.record_place\t= ()=> this.#record_place();\t// セーブポイント指定\n\t\thTag.save\t\t\t= o=> this.#save(o);\t\t\t// しおりの保存\n\n\n\t\tif (cfg.oCfg.debug.token) this.#dbgToken = token=> {if (token.trim() !== '') console.log(`🌱 トークン ${this.#scriptFn}:${String(this.#lineNum)} (i:${String(this.#idxToken)} cs:${String(this.#aCallStk.length)}) %c【${token}】`, 'background-color:#350;')};\n\t\tif (cfg.oCfg.debug.tag) this.#procDebugtag = tag_name=> console.log(`🌲 タグ解析 ${this.#scriptFn}:${String(this.#lineNum)} (i:${String(this.#idxToken)} cs:${String(this.#aCallStk.length)}) %c[${tag_name} %o]`, 'background-color:#30B;', this.#alzTagArg.hPrm);\n\n\t\tval.defTmp('const.sn.aIfStk.length', ()=> this.#aIfStk.length);\n\t\tval.defTmp('const.sn.vctCallStk.length', ()=> this.#aCallStk.length);\n\n\t\tthis.#grm = new Grammar(cfg);\n\n\t\tconst ce = cfg.oCfg.init.escape;\n\t\tthis.#grm.setEscape(ce);\n\t\tRubySpliter.setEscape(ce);\n\n\t\tif (CmnLib.isDbg) {\n\t\t\t// sys.addHook((type, o)=> (<[nm: string]: ((o: any)=> void)>this.#hHook)[type]?.(o));\n\t\t\tconst _h = this.#hHook;\n\t\t\t// type t = keyof typeof this.#hHook;\n\t\t\t// sys.addHook((type: keyof typeof _h, o)=> this.#hHook[ type ]?.(o));\t// x\n\t\t\tsys.addHook((type, o)=> this.#hHook[ <keyof typeof _h>type ]?.(o));\n\t\t\t// sys.addHook((type, o)=> this.#hHook[type]?.(o));\n\t\t\tthis.isBreak = token=> this.#isBreak_base(token);\n\n\t\t\tconst fnc = ()=> this.analyzeInit();\n\t\t\tthis.analyzeInit = ()=> {\n\t\t\t\tthis.analyzeInit = ()=> { /* empty */ };\n\t\t\t\tthis.sys.send2Dbg('hi', {});\n\t\t\t};\n\t\t\tthis.#hHook.auth = o=> {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\t\tconst hLineBP = o.hBreakpoint.hFn2hLineBP;\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\t\t\t\tfor (const [fn, v] of Object.entries(hLineBP)) this.#regBreakPoint(fn, <any>v);\n\n\t\t\t\tScriptIterator.#hFuncBP = {};\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\t\tfor (const v of o.hBreakpoint.aFunc) {\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\t\t\tScriptIterator.#hFuncBP[v.name] = 1;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\t\tif (o.stopOnEntry) {\n\t\t\t\t\tlet tkn;\n\t\t\t\t\t// eslint-disable-next-line no-cond-assign\n\t\t\t\t\twhile (tkn = this.nextToken()) {\n\t\t\t\t\t\t// if (! tkn) break;\t// 初期化前に終了した場合向け\n\n\t\t\t\t\t\tconst uc = tkn.charCodeAt(0);\t// TokenTopUnicode\n\t\t\t\t\t\tif (uc === 91) break;\t// [ タグ開始\n\t\t\t\t\t\tif (uc === 38) break;\t// & 変数操作・変数表示\n\t\t\t\t\t\tif (uc === 42 && tkn.length === 1) break;\t// 単文字の *\n\t\t\t\t\t\tif (uc === 10) this.#lineNum += tkn.length;\t// \\n 改行\n\t\t\t\t\t}\n\t\t\t\t\tthis.sys.callHook('stopOnEntry', {});\n\t\t\t\t\tthis.analyzeInit = fnc;\n\t\t\t\t\tthis.analyzeInit();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.noticeWait = ()=> {\n\t\t\t\t\t\tthis.noticeWait = ()=> { /* empty */ };\n\t\t\t\t\t\tthis.sys.callHook('stopOnEntry', {});\t// sn全体へ通知\n\n//\t\t\t\t\t\tthis.sys.callHook('continue', {});\t// sn全体へ通知\n//\t\t\t\t\t\tthis.breakState = BreakState.breaking;\n\t\t\t\t\t};\n\n\t\t\t\t\tthis.analyzeInit = fnc;\n\t\t\t\t\tthis.analyzeInit();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse this.recodeDesign = ()=> { /* empty */ };\n\t}\n\tnoticeWait = ()=> { /* empty */ };\n\t#regBreakPoint(fn: string, o: {[ln: number]: any}) {\n\t\tScriptIterator.#hFn2hLineBP[this.#cnvSnPath4Dbg(fn)] = o;\n\t}\n\n\tdestroy() {this.isBreak = this.#record_place = ()=> false}\n\n\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\treadonly #hHook\t: {[nm: string]: (o: any)=> void;} = {\n\t\tauth: ()=> { /* empty */ }, // constructorでセット\n\t\t//launch:\t// ここでは冒頭停止に間に合わないのでanalyzeInit()で\n\t\tdisconnect: ()=> {\n\t\t\tScriptIterator.#hFn2hLineBP = {};\n\t\t\tScriptIterator.#hFuncBP = {};\n\t\t\tthis.isBreak = ()=> false;\n\n\t\t\tthis.#hHook.continue!({});\n\t\t\tthis.#breakState = BreakState.Running;\n\t\t},\n\t\trestart: ()=> {this.isBreak = ()=> false},\n\n\t\t// ブレークポイント登録\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n\t\tadd_break: o=> this.#regBreakPoint(o.fn, o.o),\n\t\tdata_break: o=> {\n\t\t\tif (this.#breakState !== BreakState.Running) return;\n\n\t\t\tthis.#breakState = BreakState.Wait;\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\tthis.main.setLoop(false, `変数 ${String(o.dataId)}【${String(o.old_v)}】→【${String(o.new_v)}】データブレーク`);\n\t\t\tthis.sys.callHook('stopOnDataBreakpoint', {});\t// sn全体へ通知\n\t\t\tthis.sys.send2Dbg('stopOnDataBreakpoint', {});\n\t\t},\n\t\tset_func_break: o=> {\n\t\t\tScriptIterator.#hFuncBP = {};\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\tfor (const v of o.a) ScriptIterator.#hFuncBP[v.name] = 1;\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n\t\t\tthis.sys.send2Dbg(o.ri, {});\n\t\t},\n\n\t\t// 情報問い合わせ系\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n\t\tstack: o=> this.sys.send2Dbg(o.ri, {a: this.#aStack()}),\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n\t\teval: o=> {this.sys.send2Dbg(o.ri, {v: this.prpPrs.parse(o.txt)})},\n\n\t\t// デバッガからの操作系\n\t\tcontinue: ()=> {\n\t\t\tif (this.#isIdxOverLast()) return;\n\n\t\t\tthis.#idxToken -= this.#idxDx4Dbg;\n\t\t\tthis.#breakState = BreakState.Breaking;\n\t\t\tthis.main.setLoop(true);\n\t\t\tthis.main.resume();\t// jumpループ後などで停止している場合があるので\n\t\t},\n\t\tstepover: o=> this.#go_stepover(o),\n\t\tstepin: ()=> {\n\t\t\tif (this.#isIdxOverLast()) return;\n\n\t\t\tconst tkn = this.#script.aToken[this.#idxToken -this.#idxDx4Dbg];\n\t\t\tthis.sys.callHook(`stopOnStep${this.#REGSTEPIN.test(tkn ?? '') ?'In' :''}`, {});\t// sn全体へ通知\n\n\t\t\tthis.#idxToken -= this.#idxDx4Dbg;\n\t\t\tthis.#breakState = this.#breakState === BreakState.Wait\n\t\t\t\t? BreakState.Step\n\t\t\t\t: BreakState.Stepping;\n\t\t\tthis.main.setLoop(true);\n\t\t\tthis.main.resume();\t// jumpループ後などで停止している場合があるので\n\t\t},\n\t\tstepout: o=> {\n\t\t\tif (this.#isIdxOverLast()) return;\n\n\t\t\tif (this.#aCallStk.length > 0) this.#go_stepout(true);\n\t\t\telse this.#go_stepover(o);\n\t\t},\n\t\tpause: ()=> {\n\t\t\tthis.#breakState = BreakState.Step;\n\t\t\tthis.main.setLoop(false, '一時停止');\n\t\t\tthis.sys.send2Dbg('stopOnStep', {});\n\t\t},\n\t\tstopOnEntry: ()=> {\n\t\t\tthis.#breakState = BreakState.Step;\n\t\t\tthis.main.setLoop(false, '一時停止');\n\t\t\tthis.sys.send2Dbg('stopOnEntry', {});\n\t\t},\n\t} as const;\n\treadonly #cnvSnPath = (fn: string)=> this.cfg.searchPath(fn, SEARCH_PATH_ARG_EXT.SCRIPT);\n\treadonly #cnvSnPath4Dbg = (fn: string)=>\n\t\tthis.sys.pathBaseCnvSnPath4Dbg + this.#cnvSnPath(fn);\n\t#go_stepover(o: any) {\n\t\tif (this.#isIdxOverLast()) return;\n\n\t\tconst tkn = this.#script.aToken[this.#idxToken -this.#idxDx4Dbg];\n\t\tif (this.#REGSTEPIN.test(tkn ?? '')) this.#go_stepout(false);\n\t\telse {\n\t\t\tthis.sys.callHook('stopOnStep', {});\t// sn全体へ通知\n\t\t\tthis.#hHook.stepin!(o);\n\t\t}\n\t}\n\t#go_stepout(out: boolean) {\n\t\tthis.sys.callHook(`stopOnStep${out ?'Out' :''}`, {});\t// sn全体へ通知\n\t\tthis.#csDepth_macro_esc = this.#aCallStk.length -(out ?1 :0);\n\t\tthis.#idxToken -= this.#idxDx4Dbg;\n\t\tthis.#breakState = out ?BreakState.StepOut :BreakState.StepOuting;\n\t\tthis.main.setLoop(true);\n\t\tthis.main.resume();\t// jumpループ後などで停止している場合があるので\n\t}\n\t#csDepth_macro_esc\t= 0;\n\tget #idxDx4Dbg() {\n\t\treturn this.#breakState === BreakState.Break\n\t\t\t|| this.#breakState === BreakState.Step ?1 :0\n\t}\n\t#isIdxOverLast(): boolean {\n\t\tif (this.#idxToken < this.#script.len) return false;\n\t\tthis.sys.callHook('stopOnEntry', {});\t// sn全体へ通知\n\t\tthis.main.setLoop(false, 'スクリプト終端です isIdxOverLast');\n\t\treturn true;\n\t}\n\n\t// reload 再生成 Main に受け渡すため static\n\tstatic\t#hFn2hLineBP: {[fn: string]: {[ln: number]: any}} = {};\n\tstatic\t#hFuncBP: {[tag_name: string]: 1} = {};\n\t#breakState\t= BreakState.Running;\n\t\t// https://raw.githubusercontent.com/famibee/SKYNovel-vscode-extension/master/src/doc/BreakStateSMD.pu\n\tisBreak = (_token: string)=> false;\n\t#isBreak_base(token: string): boolean {\n\t\tswitch (this.#breakState) {\n\t\t\tcase BreakState.StepOuting:\tthis.#subHitCondition();\n\t\t\t\tthis.#breakState = BreakState.StepOut;\tbreak;\n\t\t\tcase BreakState.StepOut:\n\t\t\t\tif (this.#aCallStk.length !== this.#csDepth_macro_esc) break;\n\n\t\t\t\tthis.#breakState = BreakState.Step;\n\t\t\t\tthis.main.setLoop(false, 'ステップ実行');\n\t\t\t\tthis.sys.send2Dbg('stopOnStep', {});\n\t\t\t\treturn true;\t// タグを実行せず、直前停止\n\n\t\t\tcase BreakState.Stepping:\tthis.#subHitCondition();\n\t\t\t\tthis.#breakState = BreakState.Step;\tbreak;\n\t\t\tcase BreakState.Step:\t\tthis.#subHitCondition();\n\t\t\t\tthis.main.setLoop(false, 'ステップ実行');\n\t\t\t\tthis.sys.send2Dbg('stopOnStep', {});\n\t\t\t\treturn true;\t// タグを実行せず、直前停止\n\n\t\t\tcase BreakState.Breaking:\tthis.#subHitCondition();\n\t\t\t\tthis.#breakState = BreakState.Running;\tbreak;\n\n\t\t\tdefault:\n\t\t\t{\t// 関数ブレークポイント\n\t\t\t\tif (tagToken2Name(token) in ScriptIterator.#hFuncBP) {\n\t\t\t\t\tthis.#breakState = BreakState.Break;\n\t\t\t\t\tthis.main.setLoop(false, `関数 ${token} ブレーク`);\n\t\t\t\t\tthis.sys.callHook('stopOnBreakpoint', {});\t// sn全体へ通知\n\t\t\t\t\tthis.sys.send2Dbg('stopOnBreakpoint', {});\n\t\t\t\t\treturn true;\t// タグを実行せず、直前停止\n\t\t\t\t}\n\t\t\t}\n\t\t\t{\t// ブレークポイント\n\t\t\t\tconst bp = ScriptIterator.#hFn2hLineBP[this.#cnvSnPath4Dbg(this.#scriptFn)];\n\t\t\t\tif (! bp) break;\n\n\t\t\t\tconst o = bp[this.#lineNum];\n\t\t\t\tif (! o) break;\n\n//console.log(`fn:ScriptIterator.ts line:145 👺 【bs:${this.#breakState} idx:${this.#idxToken} ln:${this.#lineNum} tkn:${this.#script.aToken[this.#idxToken -1]}:】 o:%o`, o);\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n\t\t\t\tif (o.condition) {if (! this.prpPrs.parse(o.condition)) break}\n\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\t\telse if ('hitCondition' in o && --o.hitCondition > 0) break;\n\t\t\t\tconst isBreak = this.#breakState === BreakState.Running;\n\t\t\t\tthis.#breakState = BreakState.Break;\n\t\t\t\tthis.main.setLoop(false, isBreak ?\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\t\t\t(o.condition ? '条件' :'ヒットカウント') +'ブレーク'\n\t\t\t\t\t :'ステップ実行');\n\t\t\t\tconst type = isBreak ?'stopOnBreakpoint' :'stopOnStep';\n\t\t\t\tthis.sys.callHook(type, {});\t// sn全体へ通知\n\t\t\t\tthis.sys.send2Dbg(type, {});\n\t\t\t}\n\t\t\t\treturn true;\t// タグを実行せず、直前停止\n\t\t}\n\n\t\treturn false;\t// no break、タグを実行\n\t}\n\t#subHitCondition() {\t// step実行中でbreakしないがヒットカウントだけ減算\n\t\tconst o = ScriptIterator.#hFn2hLineBP[getFn(this.#scriptFn)]?.[this.#lineNum];\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\tif (o?.hitCondition) --o.hitCondition;\n\t}\n\n\t#aStack(): {fn: string, ln: number, col: number, nm: string, ma: string}[] {\n\t\tconst idx_n = this.#breakState === BreakState.Breaking ?1 :0;\n\t\tconst tkn0 = this.#script.aToken[this.#idxToken -1 +idx_n]!;\n\n\t\tconst fn0 = this.#cnvSnPath4Dbg(this.#scriptFn);\n\t\tconst tag_name0 = tagToken2Name(tkn0);\n\t\tconst nm = tag_name0 ?`[${tag_name0}]` :tkn0;\n//console.log(`fn:ScriptIterator.ts aStack breakState:${this.#breakState} idx:${this.#idxToken -1} idx_n:${idx_n} tkn0:${tkn0}: fn0:${fn0} nm:${nm} tkn02:${this.#script.aToken[this.#idxToken -1]}: +tkn02:${this.#script.aToken[this.#idxToken]}:`);\n//console.log(`fn:ScriptIterator.ts a:%o anum:%o`, this.script.aToken, this.script.aLNum);\n\t\tconst ma = String(this.val.getVal('mp:const.sn.macro') ?? '{}');\n\t\tif (this.#idxToken === 0) return [{fn: fn0, ln: 1, col: 1, nm, ma}];\n\n\t\tconst lc0 = this.#cnvIdx2lineCol(this.#script, this.#idxToken);// -1不要\n//console.log(`fn:ScriptIterator.ts ln:${lc0.ln} col:${lc0.col_s} col2:${this.#script.aLNum[this.#idxToken -1]}`);\n\t\tconst a = [{fn: fn0, ln: lc0.ln, col: lc0.col_s +1, nm, ma}];\n\t\tconst len = this.#aCallStk.length;\n\t\tif (len === 0) return a;\n\n\t\tfor (let i=len -1; i>=0; --i) {\n\t\t\tconst cs = this.#aCallStk[i]!;\n\t\t\tconst st = this.#hScript[cs.fn];\n\t\t\tif (! st) continue;\n\t\t\tconst tkn = st.aToken[cs.idx -1];\n\t\t\tif (! tkn) continue;\n\t\t\tconst lc = this.#cnvIdx2lineCol(st, cs.idx);\t// -1不要\n\n\t\t\tconst tag_name = tagToken2Name(tkn);\n\t\t\ta.push({\n\t\t\t\tfn\t: this.#cnvSnPath4Dbg(cs.fn),\n\t\t\t\tln\t: lc.ln,\n\t\t\t\tcol\t: lc.col_s +1,\n\t\t\t\tnm\t: tag_name ?`[${tag_name}]` :tkn,\n\t\t\t\tma\t: cs.csArg[':hMp']['const.sn.macro'],\n\t\t\t});\n\t\t}\n\n\t\treturn a;\n\t}\n\n\t// result = true : waitする resume()で再開\n\t#procDebugtag\t= (_tag_name: string)=> { /* empty */ };\n\t//MARK: タグ解析\n\tasync\tタグ解析(tag_name: string, args: string): Promise<boolean> {\n\t\tconst tag_fnc = this.hTag[<keyof T_HTag>tag_name];\n\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\tif (! tag_fnc) throw `未定義のタグ【${tag_name}】です`;\n\n\t\tthis.#alzTagArg.parse(args);\n\t\tthis.#procDebugtag(tag_name);\n\n\t\tconst hPrm = this.#alzTagArg.hPrm;\n\t\tif (hPrm.cond) {\n\t\t\tconst cond = hPrm.cond.val;\n\t\t\tif (! cond || cond.startsWith('&')) throw '属性condは「&」が不要です';\n\t\t\tconst p = this.prpPrs.parse(cond);\n\t\t\tconst ps = String(p);\n\t\t\tif (ps === 'null' || ps === 'undefined') return false;\n\t\t\tif (! p) return false;\n\t\t}\n\n\t\tlet hArg: TArg = {};\n\t\tconst csa: ICallStackArg = this.#aCallStk.at(-1)?.csArg ?? creCSArg();\n\n\t\tconst len = this.#aCallStk.length;\n\t\tif (this.#alzTagArg.isKomeParam) {\n\t\t\tif (len === 0) throw '属性「*」はマクロのみ有効です';\n\t\t\thArg = {...csa};\n\t\t}\n\t\thArg[':タグ名'] = tag_name;\n\t// #region タグ位置のコールスタック情報を埋め込むコード(デバッグ用)\n\t/*\t{\n\t\t\tconst lc0 = this.#cnvIdx2lineCol(this.#script, this.#idxToken);\n\t\t\tlet now = `存在位置 fn:${this.#scriptFn} line:${lc0.ln} col:${lc0.col_s +1}`;\n\t\t\thArg[':path'] = now;\n\t\t\tconst len = this.#aCallStk.length;\n\t\t\tif (len > 0) {\n\t\t\t\tfor (let i=len -1; i>=0; --i) {\n\t\t\t\t\tconst cs = this.#aCallStk[i];\n\t\t\t\t\tconst hMp = cs.csArg[':hMp'];\n\t\t\t\t\tconst from_macro_nm = hMp ?hMp[':タグ名'] :undefined;\n\t\t\t\t\tconst call_nm = cs.csArg[':タグ名'] ?? '';\n\t\t\t\t\tconst lc = this.#cnvIdx2lineCol(this.#hScript[cs.fn], cs.idx);\n\t\t\t\t\tnow += ` <- (${len -i}) fn:${cs.fn} line:${lc.ln\n\t\t\t\t\t\t} col:${lc.col_s +1\n\t\t\t\t\t\t}`+ (from_macro_nm ?'(['+ from_macro_nm +']マクロ内)' :' ')+\n\t\t\t\t\t\t`で [${call_nm} ...]をコール`;\n\t\t\t\t}\n\t\t\t}\n\t\t}*/\n\t// #endregion\n\t// #region タグ位置情報を埋め込むコード(デバッグ用)\n//\t\thArg[':path'] = this.#scriptFn;\n//\t\thArg[':ln'] = this.#lineNum;\n\t// #endregion\n\t\t// valやdefの値について。null はありえない。'null'や'undefined' はありえる。\n\t\t// 省略時以外で undefined はない。a=undefined と書いても 'undefined' になる\n\t\tfor (const [arg_nm, {val, def}] of Object.entries(hPrm)) {\n\t\t\tlet v = val;\n\t\t\tif (val.startsWith('%')) {\n\t\t\t\tif (len === 0) throw '属性「%」はマクロ定義内でのみ使用できます(そのマクロの引数を示す簡略文法であるため)';\n\n\t\t\t\tconst mac = (<{[nm: string]: any}>csa)[v.slice(1)];\n\t\t\t\tif (mac) {(<{[nm: string]: any}>hArg)[arg_nm] = mac; continue}\n\n\t\t\t\tif (def === undefined || def === 'null') continue;\n\t\t\t\t\t// defの'null'指定。%変数が無い場合、タグやマクロに属性を渡さない\n\t\t\t\tv = def;\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\t\tv = this.prpPrs.getValAmpersand(v ?? '');\n\t\t\tif (v !== 'undefined') {(<{[nm: string]: any}>hArg)[arg_nm] = v; continue}\n\n\t\t\tif (def === undefined) continue;\n\t\t\tv = this.prpPrs.getValAmpersand(def);\n\t\t\tif (v !== 'undefined') (<{[nm: string]: any}>hArg)[arg_nm] = v;\n\t\t\t\t// 存在しない値の場合、属性を渡さない\n\t\t}\n\n\t\t// (一部タグの処理直前に)文字出現処理を終わらせる\n\t\tif (Reading.needGoTxt && this.#setTag2ChIn.has(tag_name)) {\n\t\t\tconst {promise, resolve} = Promise.withResolvers();\n\t\t\tReading.beginProc(RPN_COMP_CHIN, ()=> resolve(0), false, ()=> resolve(0));\n\t\t\tReading.goTxt();\n\t\t\tthis.val.saveKidoku();\n\t\t\tawait promise;\n\t\t}\n\t\t// (一部タグの処理直前に)画面トランジションを止める\n\t\tif (this.#setTag2FinishTrans.has(tag_name)) {\n\t\t\tthis.#evtMng.hideHint();\n\t\t\tCmnTween.stopEndTrans();\n\t\t}\n\t\t// キー押しっぱなしスキップで処理せずスルーする\n\t\tconst fncBypass = this.#hTag2SkipBypass[tag_name];\n\t\tif (fncBypass\n\t\t\t&& argChk_Boolean(hArg, 'canskip', this.#hTag2CanSkip[tag_name] ?? true)\n\t\t\t&& this.#evtMng.isSkipping) return fncBypass(hArg);\n\n\t\treturn tag_fnc(hArg);\n\t}\n\t\t// 文字出現演出を待つタグ\n\t\t//\tここで列挙せずタグ処理で文字表示を始めたい場合、goTxt()すること\n\t\treadonly\t#setTag2ChIn = new Set([\n\t\t// 変数操作\n\t\t\t// 'clearsysvar',\t// システム変数の全消去\n\t\t\t// 'clearvar',\t\t// ゲーム変数の全消去\n\t\t\t// 'let_abs',\t\t// 絶対値\n\t\t\t// 'let_char_at',\t// 文字列から一字取りだし\n\t\t\t// 'let_index_of',\t// 文字列で検索\n\t\t\t// 'let_length',\t// 文字列の長さ\n\t\t\t// 'let_ml',\t\t// インラインテキスト代入\n\n\t\t\t// 'let_replace',\t// 正規表現で置換\n\t\t\t// 'let_round',\t\t// 四捨五入\n\t\t\t// 'let_search',\t// 正規表現で検索\n\t\t\t// 'let_substr',\t// 文字列から抜きだし\n\t\t\t// 'let',\t\t\t// 変数代入・演算\n\n\t\t// レイヤ共通\n\t\t\t// 'add_lay',\t\t// レイヤを追加する\n\t\t\t// 'clear_lay',\t// レイヤ設定の消去\n\t\t\t// 'finish_trans',\t// トランス強制終了\n\t\t\t// 'lay',\t// レイヤ設定\n\t\t\t'trans',\t// ページ裏表を交換\n\t\t\t'wt',\t// トランス終了待ち\n\t\t\t// 'add_filter',\t// フィルター追加\n\t\t\t// 'clear_filter',\t// フィルター全削除\n\t\t\t// 'enable_filter',// フィルター個別切替\n\n\t\t// トゥイーンアニメ\n\t\t\t// 'pause_tsy',\t// 一時停止\n\t\t\t// 'resume_tsy',\t// 一時停止再開\n\t\t\t// 'stop_tsy',\t// トゥイーン中断\n\t\t\t// 'tsy',\t\t// トゥイーン開始\n\t\t\t'wait_tsy',\t// トゥイーン終了待ち\n\n\t\t// 文字・文字レイヤ\n\t\t\t// 'autowc',\t// 文字ごとのウェイト\n\t\t\t// 'ch',\t\t// 文字を追加する\n\t\t\t// 'ch_in_style',\t// 文字出現演出定義\n\t\t\t// 'ch_out_style',\t// 文字消去演出定義\n\t\t\t// 'clear_text',\t// 文字消去\n\t\t\t// 'current',\t// デフォルト文字レイヤ設定\n\t\t\t// 'endlet_ml',\t// インラインテキスト代入の終端\n\t\t\t// 'endlink',\t// ハイパーリンクの終了\n\t\t\t// 'er',\t\t// ページ両面の文字消去\n\t\t\t// 'graph',\t\t// インライン画像表示\n\t\t\t// 'link',\t\t// ハイパーリンク\n\t\t\t// 'r',\t\t\t// 改行\n\t\t\t// 'rec_ch',\t// 履歴書き込み\n\t\t\t// 'rec_r',\t\t// 履歴改行\n\t\t\t// 'reset_rec',\t// 履歴リセット\n\t\t\t// 'ruby2',\t\t// 文字列と複数ルビの追加\n\t\t\t// 'set_focus',\t// フォーカス移動\n\t\t\t// 'span',\t\t// インラインスタイル設定\n\t\t\t// 'tcy',\t\t// 縦中横を表示する\n\n\t\t// 画像・画像レイヤ\n\t\t\t// 'add_face',\t// 差分名称の定義\n\t\t\t'wv',\t\t// 動画再生終了待ち\n\n\t\t// HTMLフレーム\n\t\t\t// 'add_frame',\t// フレーム追加\n\t\t\t// 'frame',\t// フレームに設定\n\t\t\t// 'let_frame',\t// フレーム変数を取得\n\t\t\t// 'set_frame',\t// フレーム変数に設定\n\t\t\t// 'tsy_frame',\t// フレームをトゥイーン開始\n\n\t\t// イベント\n\t\t\t// 'clear_event',\t// イベントを全消去\n\t\t\t// 'enable_event',\t// イベント有無の切替\n\t\t\t// 'event',\t// イベントを予約\n\t\t\t'l',\t// 行末クリック待ち\n\t\t\t'p',\t// 改ページクリック待ち\n\t\t\t's',\t// 停止する\n\t\t\t// [set_cancel_skip] スキップ中断予約\n\t\t\t'wait',\t\t// ウェイトを入れる\n\t\t\t'waitclick',\t// クリックを待つ\n\n\t\t// BGM・効果音\n\t\t\t// 'fadebgm',\t// BGMのフェード\n\t\t\t// 'fadeoutbgm',// BGMのフェードアウト\n\t\t\t// 'fadeoutse',\t// 効果音のフェードアウト\n\t\t\t// 'fadese',\t// 効果音のフェード\n\t\t\t// 'playbgm',\t// BGM の演奏\n\t\t\t// 'playse',\t// 効果音の再生\n\t\t\t// 'stop_allse',// 全効果音再生の停止\n\t\t\t// 'stopbgm',\t// BGM 演奏の停止\n\t\t\t// 'stopfadese',// 音声フェードの停止\n\t\t\t// 'stopse',\t// 効果音再生の停止\n\t\t\t// 'volume',\t// BGMや効果音の音量を指定\n\t\t\t'wb',\t// BGM フェードの終了待ち\n\t\t\t'wf',\t// 効果音フェードの終了待ち\n\t\t\t'wl',\t// BGM 再生の終了待ち\n\t\t\t'ws',\t// 効果音再生の終了待ち\n\t\t\t// 'xchgbuf',\t// サウンドバッファの交換\n\n\t\t// 条件分岐\n\t\t\t// 'else',\t// その他ifブロック開始\n\t\t\t// 'elsif',\t// 別条件のifブロック開始\n\t\t\t// 'endif',\t// ifブロックの終端\n\t\t\t// 'if',\t// ifブロックの開始\n\n\t\t// ラベル・ジャンプ\n\t\t\t// 'button',\t// ボタンを表示\n\t\t\t// 'call',\t\t// サブルーチンコール\n\t\t\t// 'jump',\t\t// シナリオジャンプ\n\t\t\t// 'page',\t\t// ページ移動\n\t\t\t// 'pop_stack',\t// コールスタック破棄\n\t\t\t// 'return',\t// サブルーチンから戻る\n\n\t\t// マクロ\n\t\t\t// 'bracket2macro',\t// 括弧マクロの定義\n\t\t\t// 'char2macro',\t// 一文字マクロの定義\n\t\t\t// 'endmacro',\t// マクロ定義の終了\n\t\t\t// 'macro',\t\t// マクロ定義の開始\n\n\t\t// しおり\n\t\t\t// 'copybookmark',\t// しおりの複写\n\t\t\t// 'erasebookmark',\t// しおりの消去\n\t\t\t// 'load',\t\t\t// しおりの読込\n\t\t\t// 'record_place',\t// セーブポイント指定\n\t\t\t// 'reload_script',\t// スクリプト再読込\n\t\t\t// 'save',\t\t\t// しおりの保存\n\n\t\t// 画面揺らし\n\t\t\t'quake',\t\t// 画面を揺らす\n\t\t\t// 'stop_quake',// 画面揺らし中断\n\t\t\t'wq',\t\t// 画面揺らし終了待ち\n\n\t\t// システム\n\t\t\t// 'close',\t\t// アプリの終了\n\t\t\t// 'export',\t// プレイデータをエクスポート\n\t\t\t// 'import',\t// プレイデータをインポート\n\t\t\t// 'loadplugin',\t// プラグインの読み込み\n\t\t\t// 'navigate_to',\t// URLを開く\n\t\t\t// 'snapshot',\t\t// スナップショット\n\t\t\t// 'title',\t\t// タイトル指定\n\t\t\t// 'toggle_full_screen',\t// 全画面状態切替\n\t\t\t// 'update_check',\t// 更新チェック機能\n\t\t\t// 'window',\t// アプリウインドウ設定\n\n\t\t// デバッグ・その他\n\t\t\t// 'dump_lay',\t\t// レイヤのダンプ\n\t\t\t// 'dump_script',\t// 外部へスクリプトを表示\n\t\t\t// 'dump_stack',\t// スタックのダンプ\n\t\t\t// 'dump_val',\t\t// 変数のダンプ\n\t\t\t// 'log',\t\t// ログ出力\n\t\t\t// 'trace',\t\t// デバッグ表示へ出力\n\t\t]);\n\t\treadonly\t#setTag2FinishTrans = new Set([\n\t\t\t'finish_trans',\t// トランス強制終了\n\t\t\t'trans',\t\t// ページ裏表を交換\n\t\t\t'quake',\t\t// 画面を揺らす\n\t\t\t'stop_quake',\t// 画面揺らし中断\n\t\t\t'add_filter',\t// フィルター追加\n\t\t]);\n\t\t// キー押しっぱなしスキップで処理せずスルーするタグ\n\t\treadonly\t#hTag2SkipBypass: {[tag_name: string]: TTag} = {\n\t\t\t'wt'\t\t: ()=> {CmnTween.stopEndTrans(); return false},\n\t\t\t\t\t\t\t\t\t\t\t// トランス終了待ち\n\t\t\t'wait_tsy'\t: o=> this.hTag.stop_tsy(o),\t// トゥイーン終了待ち\n\t\t\t// 'wv',\t\t:タグ内部で処理\t// 動画再生終了待ち\n\t\t\t'wait'\t\t\t: ()=> false,\t// ウェイトを入れる\n\t\t\t// 'playbgm',\t:スルー不可\t\t// BGM の演奏\n\t\t\t// 'playse',\t:タグ内部で処理\t// 効果音の再生\n\t\t\t'wb'\t: ()=> this.hTag.stopfadese({buf: BUF_BGM}),\n\t\t\t\t\t\t\t\t\t\t\t// BGM フェードの終了待ち\n\t\t\t'wf'\t: o=> this.hTag.stopfadese(o),\t// 効果音フェードの終了待ち\n\t\t\t// 'ws'\t\t:タグ内部で処理\t// 効果音再生の終了待ち\n\t\t\t'wq'\t: ()=> this.hTag.stop_quake({}),\t// 画面揺らし終了待ち\n\t\t\t// fade系\t:タグ内部で処理\n\t\t\t// 'ch'\t\t:タグ内部で処理\t// 文字を追加する\n\t\t\t// 'tsy'\t:タグ内部で処理\t// トゥイーン開始\n\t\t\t// 'trans'\t:タグ内部で処理\t// ページ裏表を交換\n\t\t\t'quake'\t\t: ()=> false,\t\t// 画面を揺らす\n\t\t};\n\t\t// タグ処理中にクリックなどで即終わらせられるタグ(canskip 属性がある)\n\t\treadonly\t#hTag2CanSkip: {[tag_name: string]: boolean} = {\n\t\t\t\t\t\t// デフォルト値\n\t\t\t'wt'\t\t: true ,\t// [wt]トランス終了待ち\n\t\t\t'wait_tsy'\t: true ,\t// [wait_tsy]トゥイーン終了待ち\n\t\t\t'wv'\t\t: true ,\t// [wv]動画再生終了待ち\n\t\t\t'wait'\t\t: true ,\t// [wait]ウェイトを入れる\n\t\t\t'playbgm'\t: false,\t// [playbgm]BGM の演奏\n\t\t\t'playse'\t: true ,\t// [playse]効果音の再生\n\t\t\t'wb'\t\t: false,\t// [wb]BGM フェードの終了待ち\n\t\t\t'wf'\t\t: false,\t// [wf]効果音フェードの終了待ち\n\t\t\t'ws'\t\t: false,\t// [ws]効果音再生の終了待ち\n\t\t\t'wq'\t\t: true ,\t// [wq]画面揺らし終了待ち\n\t\t};\n\n\n\t#evtMng\t: EventMng;\n\t#layMng\t: LayerMng;\n\tsetOtherObj(evtMng: EventMng, layMng: LayerMng): void {\n\t\tthis.#evtMng = evtMng;\n\t\tthis.#layMng = layMng;\n\t}\n\n\n\t//MARK: インラインテキスト代入\n\t#let_ml(hArg: TArg) {\n\t\tconst {name} = hArg;\n\t\tif (! name) throw 'nameは必須です';\n\n\t\tlet ml = '';\n\t\tconst len = this.#script.len;\n\t\tfor (; this.#idxToken<len; ++this.#idxToken) {\n\t\t\tml = this.#script.aToken[this.#idxToken]!;\n\t\t\tif (ml !== '') break;\n\t\t}\n\t\thArg.text = ml;\n\t\thArg.cast = 'str';\n\t\tthis.hTag.let(hArg);\n\t\tthis.#idxToken += 2;\n\t\tthis.#lineNum += (ml.match(/\\n/g) ?? []).length;\n\n\t\treturn false;\n\t}\n\n\n\t//MARK: スタックのダンプ\n\t#dump_stack() {\n\t\tif (this.#idxToken === 0) {\n\t\t\tconsole.group(`🥟 [dump_stack] スクリプト現在地 fn:${this.#scriptFn} line:1 col:0`);\n\t\t\tconsole.groupEnd();\n\t\t\treturn false;\n\t\t}\n\n\t\tconst lc0 = this.#cnvIdx2lineCol(this.#script, this.#idxToken);\n\t\tconst now = `スクリプト現在地 fn:${this.#scriptFn} line:${String(lc0.ln)} col:${String(lc0.col_s +1)}`;\n\t\tconsole.group(`🥟 [dump_stack] ${now}`);\n\t\tconst len = this.#aCallStk.length;\n\t\tif (len > 0) {\n\t\t\tconsole.info(now);\n\t\t\tfor (let i=len -1; i>=0; --i) {\n\t\t\t\tconst cs = this.#aCallStk[i]!;\n\t\t\t\tconst hMp = cs.csArg[':hMp'];\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\t\t\tconst from_macro_nm = hMp\n\t\t\t\t\t? <string>(<{[nm: string]: any}>hMp)[':タグ名']\n\t\t\t\t\t: undefined;\n\t\t\t\tconst call_nm = cs.csArg[':タグ名'] ?? '';\n\t\t\t\tconst lc = this.#cnvIdx2lineCol(this.#hScript[cs.fn], cs.idx);\n\t\t\t\tconsole.info(\n\t\t\t\t\t`${String(len -i)}つ前のコール元 fn:${cs.fn} line:${\n\t\t\t\t\t\tString(lc.ln)} col:${String(lc.col_s +1)\n\t\t\t\t\t}${\n\t\t\t\t\t\tfrom_macro_nm ?'(['+ from_macro_nm +']マクロ内)' :' '\n\t\t\t\t\t}で [${call_nm} ...]をコール`\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tconsole.groupEnd();\n\n\t\treturn false;\n\t}\n\t#cnvIdx2lineCol(st: Script | undefined, idx: number): {ln: number, col_s: number, col_e: number} {\n\t\tconst ret = {ln: 1, col_s: 0, col_e: 0};\n\t\tif (! st) return ret;\n\n\t\tlet i = idx -1;\n\t\tconst lN = ret.ln = st.aLNum[i]!;\n\t\twhile (st.aLNum[i] === lN) {\n\t\t\tconst tkn = st.aToken[i]!;\n\t\t\tif (! tkn.startsWith('\\n')) {\n\t\t\t\tconst len = tkn.length;\n//console.log(`fn:ScriptIterator.ts line:586 cnvIdx2lineCol tkn:${st.aToken[i]} len:${len} s:${ret.col_s} e:${ret.col_e}`);\n\t\t\t\tif (ret.col_e > 0) ret.col_s += len;\n\t\t\t\tret.col_e += len;\n\t\t\t}\n\t\t\tif (--i < 0) break;\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\n\t//MARK: 外部へスクリプトを表示\n\t#dump_script(hArg: TArg) {\n\t\tconst {set_fnc, break_fnc} = hArg;\n\t\tif (! set_fnc) throw 'set_fncは必須です';\t// スクリプトを返すコールバック\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\tthis.#fncSet = (<any>globalThis)[set_fnc];\n\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\tif (! this.#fncSet) {\n\t\t\tif (argChk_Boolean(hArg, 'need_err', true)) throw `HTML内に関数${set_fnc}が見つかりません`;\n\t\t\tthis.#fncSet = ()=> { /* empty */ };\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.noticeBreak = (goto: boolean)=> {\n\t\t\tif (this.#fnLastBreak !== this.#scriptFn) {\n\t\t\t\tthis.#fnLastBreak = this.#scriptFn;\n\t\t\t\tthis.#fncSet(\n\t\t\t\t\tthis.#hScrCache4Dump[this.#scriptFn] ??= this.#script.aToken.join('')\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.#fncBreak(this.#lineNum, goto);\n\t\t};\n\t\tthis.noticeBreak(true);\t// 一度目のthis.fncBreak()はスルー(まだ読んでないし)\n\n\t\tif (! break_fnc) return false;\t// Break通知コールバック\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\tthis.#fncBreak = (<any>globalThis)[break_fnc];\n\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\tif (! this.#fncBreak) {\n\t\t\tif (argChk_Boolean(hArg, 'need_err', true)) throw `HTML内に関数${break_fnc}が見つかりません`;\n\t\t\tthis.#fncBreak = ()=> { /* empty */ };\n\t\t}\n\n\t\treturn false;\n\t}\n\t#fncSet: (txt: string)=> void = ()=> { /* empty */ };\n\t#fncBreak: (ln: number, goto: boolean)=> void = ()=> { /* empty */ };\n\t#fnLastBreak = '';\n\t#hScrCache4Dump: {[fn: string]: string;} = {};\n\tnoticeBreak = (_goto: boolean)=> { /* empty */ };\n\n\n\t#dumpErrLine = 5;\n\tdumpErrForeLine() {\n\t\tif (this.#idxToken === 0) {\n\t\t\tconsole.group(`🥟 Error line (from 0 rows before) fn:${this.#scriptFn}`);\n\t\t\tconsole.groupEnd();\n\t\t\treturn;\n\t\t}\n\n\t\tlet s = '';\n\t\tfor (let i=this.#idxToken -1; i>=0; --i) {\n\t\t\ts = String(this.#script.aToken[i]) + s;\n\t\t\tif ((s.match(/\\n/g) ?? []).length >= this.#dumpErrLine) break;\n\t\t}\n\t\tconst a = s.split('\\n').slice(-this.#dumpErrLine);\n\t\tconst len = a.length;\n\t\tconsole.group(`🥟 Error line (from ${String(len)} rows before) fn:${this.#scriptFn}`);\n\t\tconst ln_txt_width = String(this.#lineNum).length;\n\t\tconst lc = this.#cnvIdx2lineCol(this.#script, this.#idxToken);\n\t\tfor (let i=0; i<len; ++i) {\n\t\t\tconst ln = this.#lineNum -len +i +1;\n\t\t\tconst mes = `${String(ln).padStart(ln_txt_width, ' ')}: %c`;\n\t\t\tconst e = a[i]!;\n\t\t\tconst line = e.length > 75 ?e.slice(0, 75) +'…' :e;\t// 長い場合は後略\n\t\t\tif (i === len -1) console.info(\n\t\t\t\tmes + line.slice(0, lc.col_s) +'%c'+ line.slice(lc.col_s),\n\t\t\t\t'color: black; background-color: skyblue;', 'color: black; background-color: pink;'\n\t\t\t)\n\t\t\telse console.info(mes + line, 'color: black; background-color: skyblue;');\n\t\t}\n\t\tconsole.groupEnd();\n\t\t//console.log('Linkの出力 : %o', 'file:///Volumes/MacHD2/_Famibee/SKYNovel/prj/mat/main.sn');\n\t}\n\n\n\t#aIfStk\t: number[]\t= [-1];\t// 先頭に積む FIFOバッファ(unshift / shift)\n\t//MARK: ifブロックの終端\n\t#endif() {\n\t\tconst t = this.#aIfStk[0];\n\t\tif (! t) throw 'this.#aIfStk が異常です';\n\t\tif (t === -1) throw 'ifブロック内ではありません';\n\n\t\tthis.#idxToken = t;\n\t\tthis.#aIfStk.shift();\t// 最初の要素を取り除く\n\n\t\treturn false;\n\t}\n\t//MARK: ifブロックの開始\n\t#if(hArg: TArg) {\n\t\t//console.log('if idxToken:'+ this.#idxToken);\n\t\tconst {exp} = hArg;\n\t\tif (! exp) throw 'expは必須です';\n\t\tif (exp.startsWith('&')) throw '属性expは「&」が不要です';\n\n\t\tlet cntDepth = 0;\t\t// if深度カウンター\n\t\tlet\tidxGo = this.prpPrs.parse(exp) ?this.#idxToken :-1;\n\t\tconst lnIf = this.#script.aLNum[this.#idxToken];\n\t\tconst zLn = this.#lineNum -((lnIf ?? 0) || 0);\t// ??ではなく。NaN は falsy\n\t\tconst len = this.#script.len;\n\t\tfor (; this.#idxToken<len; ++this.#idxToken) {\n\t\t\tconst ln = this.#script.aLNum[this.#idxToken];\n\t\t\tthis.#script.aLNum[this.#idxToken] = ((ln ?? 0) || 0)+ zLn; // ??はNaN不可\n\t\t\tconst tkn = this.#script.aToken[this.#idxToken];\n\t\t\t//console.log(`[if]トークン ${this.#scriptFn}:${this.#lineNum} idx:${this.#idxToken} realLn:${this.#script.aLNum[this.#idxToken]} idxGo:${idxGo} cntDepth:${cntDepth} token<${tkn}>`);\n\t\t\tif (! tkn) continue;\n\n\t\t\tconst uc = tkn.charCodeAt(0);\t// TokenTopUnicode\n\t\t\tif (uc === 10) {this.#lineNum += tkn.length; continue}\t// \\n 改行\n\t\t\tif (uc !== 91) continue;\t// [ タグ開始以外\n\n\t\t\tconst [tag_name, args] = tagToken2Name_Args(tkn);\n\t\t\tif (! (tag_name in this.hTag)) throw `未定義のタグ[${tag_name}]です`;\n\t\t\tthis.#alzTagArg.parse(args);\n\n\t\t\tswitch (tag_name) {\n\t\t\tcase 'if':\t++cntDepth; break;\n\n\t\t\tcase 'elsif':{\n\t\t\t\tif (cntDepth > 0) break;\n\t\t\t\tif (idxGo > -1) break;\n\n\t\t\t\tconst e = this.#alzTagArg.hPrm.exp?.val;\n\t\t\t\tif (! e) throw 'expは必須です';\n\t\t\t\tif (e.startsWith('&')) throw '属性expは「&」が不要です';\n\t\t\t\tif (this.prpPrs.parse(e)) idxGo = this.#idxToken +1;\n\t\t\t}\tbreak;\n\n\t\t\tcase 'else':\n\t\t\t\tif (cntDepth > 0) break;\n\t\t\t\tif (idxGo === -1) idxGo = this.#idxToken +1;\n\t\t\t\tbreak;\n\n\t\t\tcase 'endif':\n\t\t\t\tif (cntDepth > 0) {--cntDepth; break}\n\t\t\t\tif (idxGo === -1) {\n\t\t\t\t\t++this.#idxToken;\n\t\t\t\t\tthis.#script.aLNum[this.#idxToken]! += zLn;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.#aIfStk.unshift(this.#idxToken +1);\t// 先頭に要素追加\n\t\t\t\t\tthis.#idxToken = idxGo;\n\t\t\t\t\tthis.#lineNum = this.#script.aLNum[this.#idxToken]!;\n\t\t\t\t\t\t// +zLn 不要\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tthrow '[endif]がないままスクリプト終端です';\n\t\t//return false;\n\t}\n\n\n\t//MARK: サブルーチンコール\n\t#call(hArg: TArg) {\n\t\tif (! argChk_Boolean(hArg, 'count', false)) this.#eraseKidoku();\n\n\t\tconst {fn} = hArg;\n\t\tif (fn) this.#cnvSnPath(fn);\t// chk only\n\t\tthis.#callSub({...hArg}, ReadingState.popLocalEvts());\n\t\t\t// ':hEvt1Time'の扱いだけは[macro]と異なる\n\n\t\tif (argChk_Boolean(hArg, 'clear_local_event', false)) this.hTag.clear_event({});\n\t\treturn this.#jumpWork(fn, hArg.label);\n\t}\n\t#callSub(hArg: TArg, hEvt1Time?: T_HEvt2Fnc) {\n\t\tconst csa: ICallStackArg = {\n\t\t\t...hArg,\n\t\t\t':hEvt1Time': hEvt1Time,\n\t\t\t':hMp'\t\t: this.val.cloneMp(),\n\t\t\t':lenIfStk'\t: this.#aIfStk.length,\n\t\t};\n\t\tthis.#script.aLNum[this.#idxToken] = this.#lineNum;\t// 戻ったときの行番号\n\t\tif (! this.#resvToken) {csa[':resvToken'] = ''; this.#clearResvToken()}\n\t\tthis.#aCallStk.push(new CallStack(this.#scriptFn, this.#idxToken, csa));\n\t\tthis.#aIfStk.unshift(-1);\t// 最初に要素を追加\n\t}\n\n\t//MARK: シナリオジャンプ\n\t#jump(hArg: TArg) {\n\t\tif (! argChk_Boolean(hArg, 'count', true)) this.#eraseKidoku();\n\n\t\tthis.#aIfStk[0] = -1;\n\t\treturn this.#jumpWork(hArg.fn, hArg.label);\n\t}\n\n\t//MARK: コールスタック破棄\n\t#pop_stack(hArg: TArg) {\n\t\tif (argChk_Boolean(hArg, 'clear', false)) this.#aCallStk = [];\n\t\telse if (! this.#aCallStk.pop()) throw 'スタックが空です';\n\t\tthis.#clearResvToken();\n\t\tthis.#aIfStk = [-1];\n\t\tthis.val.setMp(creMP());\n\n\t\treturn false;\n\t}\n\n\t//MARK: サブルーチンから戻る\n\t#return(hArg: TArg) {\n\t\tconst cs = this.#aCallStk.pop();\n\t\tif (! cs) throw 'スタックが空です';\n\t\tconst csa = cs.csArg;\n\t\tthis.#aIfStk = this.#aIfStk.slice(-csa[':lenIfStk']);\t// 最初の要素を取り除く\n\n\t\tconst hMp = csa[':hMp'];\t// マクロからの復帰の場合にmp:値も復帰\n\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\tif (hMp) this.val.setMp(hMp);\n\t\t\t// たぶん型チェック的に if (hMp) は不要だが、\n\t\t\t// あとからESLint対応なので安易に挙動を変えない方針で\n\n\t\tconst after_token = csa[':resvToken'];\n\t\tif (after_token) this.nextToken = ()=> {\n\t\t\tthis.#clearResvToken();\n\t\t\treturn after_token;\n\t\t}\n\t\telse this.#clearResvToken();\n\n\t\tif (csa[':hEvt1Time']) ReadingState.pushLocalEvts(csa[':hEvt1Time']);\n\n\t\tconst {fn, label} = hArg;\n\t\tif (fn || label) return this.#jumpWork(fn, label);\n\n\t\tif (cs.fn in this.#hScript) {this.#jump_light(cs); return false}\n\t\treturn this.#jumpWork(cs.fn, '', cs.idx);\t// 確実にスクリプトロードなので\n\t}\n\n\t#resvToken\t= '';\n\t#clearResvToken() {\n\t\tthis.#resvToken = '';\n\t\tthis.nextToken = ()=> this.#nextToken_Proc();\n\t}\n\n\n\t#skipLabel = '';\n\t#jumpWork(fn = '', label = '', idx = 0): boolean {\n\t\tif (CmnLib.debugLog) console.log(`📜 %c1:jumpWork%c fn:${fn} lbl:${label} idx:${String(idx)}`, 'color:#3B0;', '');\n\t\tif (! fn && ! label) this.main.errScript('[jump系] fnまたはlabelは必須です');\n\t\tif (label) {\n\t\t\tif (! label.startsWith('*')) this.main.errScript('[jump系] labelは*で始まります');\n\t\t\tthis.#skipLabel = label;\n\t\t\tif (! this.#skipLabel.startsWith('**')) this.#idxToken = idx;\n\t\t}\n\t\telse {\n\t\t\tthis.#skipLabel = '';\n\t\t\tthis.#idxToken = idx;\n\t\t}\n\n\t\tif (! fn) {this.analyzeInit(); return false}\n\t\tif (fn.includes('@')) throw '[jump系] fn には文字「@」は禁止です';\n\n\t\tconst full_path = this.#cnvSnPath(fn);\n\t\tif (fn === this.#scriptFn) {this.analyzeInit(); return false}\n\t\tthis.#scriptFn = fn;\n\t\tconst st = this.#hScript[fn];\n\t\tif (st) {this.#script = st; this.analyzeInit(); return false}\n\n\t\tconst RPN_JUMPWORK = `jumpWork fn:${fn}`;\n\t\tReading.beginProc(RPN_JUMPWORK);\n\t\tlet fp_diff = '';\n\t\tconst ldr = new Loader;\n\t\ttry {\n\t\t\tfp_diff = this.#cnvSnPath(fn +'@');\n\t\t\t// 派生ファイルが存在する場合\n\t\t\tldr.add({name: fn +':base', url: full_path});\n\t\t\tldr.add({name: fn, url: fp_diff});\n\t\t} catch {\n\t\t\t// 派生ファイルはない\n\t\t\tldr.add({name: fn, url: full_path});\n\t\t}\n\t\tldr.use((res, next)=> {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\t\t\tthis.sys.dec(res.extension, res.data).then(d=> {\n\t\t\t\tres.data = d;\n\t\t\t\tnext();\n\t\t\t})\n\t\t\t.catch((e: unknown)=> {\n\t\t\t\tthis.main.errScript(`[jump系]snロード失敗です fn:${res.name} ${String(e)}`, false);\n\t\t\t\tnext();\n\t\t\t});\n\t\t})\n\t\t.load((_ldr, hRes)=> {\n\t\t\tReading.endProc(RPN_JUMPWORK);\n\t\t\tif (fp_diff) {\t// 派生ファイルが存在する場合\n\t\t\t\tconst scrBase: string = hRes[fn +':base']!.data;\n\t\t\t\tconst scrDiff: string = hRes[fn]!.data;\n\t\t\t\tconst aBase: string[] = scrBase.split('\\n');\n\t\t\t\tconst aDiff: string[] = scrDiff.split('\\n');\n\t\t\t\tconst lenB = aBase.length;\n\t\t\t\tconst lenD = aDiff.length;\n\t\t\t\t// 【派生スクリプト】の空行へ、【基底スクリプト】の同じ行の内容をコピー\n\t\t\t\tfor (let i=0; i<lenD && i<lenB; ++i) aDiff[i] ||= aBase[i] ?? '';\n\n\t\t\t\t// 【接尾辞つきファイル】として扱う\n\t\t\t\thRes[fn]!.data = aDiff.join('\\n');\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\t\t\t\tdelete hRes[fn +':base'];\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line @typescript-eslint/unbound-method\n\t\t\tthis.nextToken = this.#nextToken_Proc;\n\t\t\tthis.#lineNum = 1;\n\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\t\t\tthis.#resolveScript(hRes[fn]!.data);\n\t\t\tthis.hTag.record_place({});\n\t\t\tthis.analyzeInit();\n\t\t});\n\n\t\treturn true;\n\t}\n\tprivate\tanalyzeInit(): void {\n\t\tif (CmnLib.debugLog) console.log(`📜 %c9:analyzeInit%c fn:${this.#scriptFn} lbl:${this.#skipLabel} idx:${String(this.#idxToken)}`, 'color:#3B0;', '');\n\t\tconst o = this.#seekScript(this.#script, Boolean(this.val.getVal('mp:const.sn.macro.name')), this.#lineNum, this.#skipLabel, this.#idxToken);\n\t\tthis.#idxToken\t= o.idx;\n\t\tthis.#lineNum\t= o.ln;\n\t}\n\n\t// シナリオ解析処理ループ・冒頭処理\n\tnextToken = ()=> '';\t// 初期化前に終了した場合向け\n\t#nextToken_Proc(): string {\n\t\tif (this.#errOverScr()) return '';\n\n\t\tthis.#recordKidoku();\n\n\t\t// トークンの行番号更新\n\t\tthis.#script.aLNum[this.#idxToken] ||= this.#lineNum;\t// ??はNaN不可\n\t\tconst token = this.#script.aToken[this.#idxToken]!;\n\t\tthis.#dbgToken(token);\n\t\t++this.#idxToken;\n\n\t\treturn token;\n\t}\n\t#dbgToken = (_token: string)=> { /* empty */ };\n\t#errOverScr(): boolean {\n\t\tif (this.#idxToken < this.#script.len) return false;\n\t\tthis.main.errScript('スクリプト終端です errOverScr');\n\t\treturn true;\n\t}\n\n\n\treadonly #REG_NONAME_LABEL\t\t= /(\\*{2,})([^|]*)/;\n\treadonly #REG_TOKEN_MACRO_BEGIN\t= /^\\[macro\\s/;\n\treadonly #REG_TOKEN_MACRO_END\t= /^\\[endmacro[\\s\\]]/;\n\t#seekScript(st: Script, inMacro: boolean, iln: number, iskipLabel: string, idx: number): ISeek {\n\t\t//console.log(`seekScript (from)inMacro:${inMacro} (from)ln:${ln} (to)skipLabel:${skipLabel}: (to)idx:${idx}`);\n\t\tconst len = st.aToken.length;\n\t\tlet ln = iln, skipLabel = iskipLabel;\n\t\tif (! skipLabel) {\t// ラベルジャンプ以外(先頭から開始)\n\t\t\tif (this.#errOverScr()) return {idx, ln};\n\n\t\t\tif (! st.aLNum[idx]) {\t// NaN、undefined は falsy\n\t\t\t\tln = 1;\n\t\t\t\tfor (let j=0; j<idx; ++j) {\n\t\t\t\t\t// 走査ついでにトークンの行番号も更新\n\t\t\t\t\tst.aLNum[j] ||= ln;\t// ??はNaN不可\n\n\t\t\t\t\tconst tkn = st.aToken[j]!;\n\t\t\t\t\tif (tkn.startsWith('\\n')) ln += tkn.length;\t// \\n 改行\n\t\t\t\t\telse ln += (tkn.match(/\\n/g) ?? []).length;\n\t\t\t\t}\n\t\t\t\tst.aLNum[idx] = ln;\n\t\t\t}\n\t\t\telse ln = st.aLNum[idx];\n\n\t\t\treturn {idx, ln};\n\t\t}\n\n\t\t// 無名ラベルジャンプ\n\t\tst.aLNum[0] = 1;\n\t\tconst a_skipLabel = skipLabel.match(this.#REG_NONAME_LABEL);\n\t\tif (a_skipLabel) {\n\t\t\tskipLabel = a_skipLabel[1]!;\n\t\t\tlet i = idx;\n\t\t\tswitch (a_skipLabel[2]) {\n\t\t\tcase 'before':\n\t\t\t\twhile (st.aToken[--i] !== skipLabel) {\n\t\t\t\t\tif (i === 0) DebugMng.myTrace(`[jump系 無名ラベルbefore] \n\t\t\t\t\t\t${String(ln)} 行目以前で ${inMacro ?'マクロ内に' :''} ラベル【 ${skipLabel} 】がありません`, 'ET');\n\t\t\t\t\tif (inMacro && st.aToken[i]!.search(this.#REG_TOKEN_MACRO_BEGIN) > -1) DebugMng.myTrace('[jump系 無名ラベルbefore] マクロ内にラベル【'+ skipLabel +'】がありません', 'ET');\n\t\t\t\t}\n\t\t\t\treturn {idx: i +1, ln: st.aLNum[i]!};\t//\tbreak;\n\n\t\t\tcase 'after':\n\t\t\t\twhile (st.aToken[++i] !== skipLabel) {\n\t\t\t\t\tif (i === len) DebugMng.myTrace(`[jump系 無名ラベルafter] ${String(ln)} 行目以後でマクロ内にラベル【${skipLabel}】がありません`, 'ET');\n\t\t\t\t\tif (st.aToken[i]!.search(this.#REG_TOKEN_MACRO_END) > -1) DebugMng.myTrace(`[jump系 無名ラベルafter] ${String(ln)} 行目以後でマクロ内にラベル【 ${skipLabel} 】がありません`, 'ET');\n\t\t\t\t}\n\t\t\t\treturn {idx: i +1, ln: st.aLNum[i]!};\t//\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tDebugMng.myTrace('[jump系] 無名ラベル指定【label='+ skipLabel +'】が間違っています', 'ET');\n\t\t\t}\n\t\t}\n\n\t\t// ラベルジャンプ\n\t\tln = 1;\n\t\t// (new RegExp(\"~\")) の場合は、バックスラッシュは2つ必要\n\t\tconst reLabel = new RegExp(\n\t\t\t'^'+ skipLabel.replaceAll('*', '\\\\*') +'(?=\\\\s|;|\\\\[|\\\\||$)');\n\t\tlet in_let_ml = false;\n\t\tfor (let i=0; i<len; ++i) {\n\t\t\t// 走査ついでにトークンの行番号も更新\n\t\t\tst.aLNum[i] ||= ln;\t// ??はNaN不可\n\n\t\t\tconst tkn = st.aToken[i]!;\n\t\t\tif (in_let_ml) {\n\t\t\t\tif (this.#grm.testTagEndLetml(tkn)) in_let_ml = false;\n\t\t\t\telse ln += (tkn.match(/\\n/g) ?? []).length;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst uc = tkn.charCodeAt(0);\t// TokenTopUnicode\n\t\t\tif (uc === 10) {ln += tkn.length; continue}\t// \\n 改行\n\t\t\tif (uc === 42) {\t// 42 = *\n\t\t\t\tif (tkn.search(reLabel) > -1) return {idx: i +1, ln};//\tbreak;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (uc !== 91) continue;\t// [ タグ開始\n\n\t\t\tln += (tkn.match(/\\n/g) ?? []).length;\n\t\t\tif (this.#grm.testTagLetml(tkn)) in_let_ml = true;\n\t\t}\n\t\tif (in_let_ml) throw '[let_ml]の終端・[endlet_ml]がありません';\n\n\t\tDebugMng.myTrace(`[jump系] ラベル【${skipLabel}】がありません`, 'ET');\n\t\tthrow 'Dummy';\n\t}\n\n\t#hScript\t: HScript\t= Object.create(null);\t//{} シナリオキャッシュ\n\t#resolveScript(txt: string) {\n\t\tlet mes = '';\n\t\ttry {\n\t\t\tmes = 'ScriptIterator.resolveScript';\n\t\t\tconst scr = this.#grm.resolveScript(txt);\n\t\t\tmes = 'ScriptIterator.replaceScript_Wildcard';\n\t\t\tthis.#replaceScript_Wildcard(scr);\n\t\t\tthis.#hScript[this.#scriptFn] = this.#script = scr;\n\t\t}\n\t\tcatch (e) {\n\t\t\tif (e instanceof Error) mes += `例外 mes=${e.message}(${e.name})`;\n\t\t\telse mes = String(e);\n\t\t\tthis.main.errScript(mes, false);\n\t\t}\n\t\tthis.val.touchAreaKidoku(this.#scriptFn);\n\t}\n\n\t#jump_light(cs: CallStack) {\n\t\t// jumpでは連続マクロでスタックオーバーフローになるので簡易版を\n\t\t// 主に[return]やマクロ終了でジャンプ先がチェック不要な場合用\n\t\t// analyzeInit()とかもジャンプ前にやってて不要だし\n\t\tthis.#scriptFn\t= cs.fn;\n\t\tthis.#idxToken\t= cs.idx;\n\t\tconst st = this.#hScript[this.#scriptFn];\n\t\tif (st) this.#script = st;\n\t\tthis.#lineNum = this.#script.aLNum[cs.idx]!;\n//console.log(`fn:ScriptIterator.ts %cjump_light cs ${cs.fn}:${this.#lineNum} idx:${cs.idx}`, 'background-color:#a03b79;');\n\t}\n\n\n\treadonly #REG_WILDCARD\t= /^\\[(call|loadplugin)\\s/;\n\treadonly #REG_WILDCARD2\t= /\\bfn\\s*=\\s*[^\\s\\]]+/;\n\t#replaceScript_Wildcard(scr: Script) {\n\t\tfor (let i=scr.len -1; i>=0; --i) {\n\t\t\tconst token = scr.aToken[i]!;\n\t\t\tif (! this.#REG_WILDCARD.test(token)) continue;\n\n\t\t\tconst [tag_name, args] = tagToken2Name_Args(token);\n\t\t\tthis.#alzTagArg.parse(args);\n\n\t\t\tconst p_fn = this.#alzTagArg.hPrm.fn;\n\t\t\tif (! p_fn) continue;\n\t\t\tconst {val: fn} = p_fn;\n\t\t\tif (! fn.endsWith('*')) continue;\n\n\t\t\tscr.aToken.splice(i, 1, '\\t', '; '+ token);\n\t\t\tscr.aLNum.splice(i, 1, NaN, NaN);\n\n\t\t\tconst ext = tag_name === 'loadplugin'\n\t\t\t\t? SEARCH_PATH_ARG_EXT.CSS\n\t\t\t\t: SEARCH_PATH_ARG_EXT.SN;\n\t\t\tconst a = this.cfg.matchPath('^'+ fn.slice(0, -1) +'.*', ext);\n\t\t\tfor (const v of a) {\n\t\t\t\tconst nt = token.replace(\n\t\t\t\t\tthis.#REG_WILDCARD2,\n\t\t\t\t\t'fn='+ decodeURIComponent(getFn(v[ext]!))\n\t\t\t\t);\n\t\t\t\t//console.log('\\t='+ nt +'=');\n\t\t\t\tscr.aToken.splice(i, 0, nt);\n\t\t\t\tscr.aLNum.splice(i, 0, NaN);\n\t\t\t}\n\t\t}\n\t\tscr.len = scr.aToken.length;\n\t}\n\n\n\t#recordKidoku() {\n\t\tconst ar = this.val.touchAreaKidoku(this.#scriptFn);\n\n\t\t// マクロ内やサブルーチンではisKidokuを変更させない\n\t\tif (this.#aCallStk.length > 0) {ar.record(this.#idxToken); return}\n\n\t\tthis.#isKidoku = ar.search(this.#idxToken);\n\t\tthis.val.setVal_Nochk('tmp', 'const.sn.isKidoku', this.#isKidoku);\n\t\tif (this.#isKidoku) return;\n\n\t\tar.record(this.#idxToken);\n\t\t// saveKidoku()\n\t\t\t// 厳密にはここですべきだが、パフォーマンスに問題があるので\n\t\t\t// クリック待ちを期待できるwait、waitclick、s、l、pタグで\n\t\t\t// saveKidoku()をコール。\n\t}\n\t#isKidoku\t= false;\n\tget isKidoku() {return this.#isKidoku}\n\t#eraseKidoku() {\n\t\tthis.val.getAreaKidoku(this.#scriptFn)?.erase(this.#idxToken);\n\t\tthis.#isKidoku = false;\n\t}\n\tget isNextKidoku(): boolean {\n\t\tlet fn\t= this.#scriptFn;\n\t\tlet idx\t= this.#idxToken;\n\t\tlet len\t= this.#script.len;\n\t\tif (this.#aCallStk.length > 0) {\n\t\t\tconst cs = this.#aCallStk[0]!;\n\t\t\tfn = cs.fn;\n\t\t\tidx = cs.idx;\n\t\t\tconst st = this.#hScript[fn];\n\t\t\tif (st) len = st.len;\n\t\t}\n\t\tif (idx === len) return false;\t// スクリプト終端\n\n\t\tconst areas = this.val.getAreaKidoku(fn);\n\t\treturn areas?.search(idx) ?? false;\n\t}\n\n\n\tget normalWait(): number {\n\t\treturn this.#isKidoku\n\t\t?\n\t\t\tthis.val.tagCh_doWait_Kidoku\n\t\t\t?\tthis.val.tagCh_msecWait_Kidoku\n\t\t\t:\t0\n\t\t:\n\t\t\tthis.val.tagCh_doWait\n\t\t\t?\tthis.val.tagCh_msecWait\n\t\t\t:\t0\n\t\t;\n\t}\n\n\n\t//MARK: 括弧マクロの定義\n\t#bracket2macro(hArg: TArg) {\n\t\tthis.#grm.bracket2macro(hArg, this.hTag, this.#script, this.#idxToken);\n\n\t\treturn false;\n\t}\n\n\t//MARK: 一文字マクロの定義\n\t#char2macro(hArg: TArg) {\n\t\tthis.#grm.char2macro(hArg, this.hTag, this.#script, this.#idxToken);\n\n\t\treturn false;\n\t}\n\n\t//MARK: マクロ定義の開始\n\t// eslint-disable-next-line no-irregular-whitespace\n\treadonly\t#REG_NG4MAC_NM = /[\"'#;\\\\] ]+/;\n\t#macro(hArg: TArg) {\n\t\tconst {name} = hArg;\n\t\tif (! name) throw 'nameは必須です';\n\t\tif (name in this.hTag) throw `[${name}]はタグかすでに定義済みのマクロです`;\n\t\tif (this.#REG_NG4MAC_NM.test(name)) throw `[${name}]はマクロ名として異常です`;\n\n\t\tconst ln = this.#lineNum;\n\t\tconst cs = new CallStack(this.#scriptFn, this.#idxToken);\n\t\tthis.#strStepin += '|'+ name;\n\t\t// (new RegExp(\"~\")) の場合は、バックスラッシュは2つ必要\n\t\tthis.#REGSTEPIN = new RegExp(`\\\\[(${this.#strStepin})\\\\b`);\n\t\tthis.hTag[<keyof T_HTag>name] = hArgM=> {\n\t\t\thArgM.design_unit = hArg.design_unit;\n\t\t\tthis.#callSub(hArgM);\n\n\t\t\t// AIRNovelの仕様:親マクロが子マクロコール時、*がないのに値を引き継ぐ\n\t\t\t//for (const k of Object.keys(hArg)) this.val.setVal_Nochk('mp', k, hArg[k]);\n\t\t\tthis.val.setMp({\n\t\t\t\t...hArgM,\n\t\t\t\t'const.sn.macro': JSON.stringify({name: hArg.name}),\n\t\t\t\t\t// ムダに大きいスクリプター用情報を削除、名前だけに\n\t\t\t\t'const.sn.me_call_scriptFn': this.#scriptFn,\n\t\t\t});\n\t\t\tthis.val.setVal_Nochk('mp', 'const.sn.me_call_scriptFn', this.#scriptFn);\n\n\t\t\tthis.#lineNum = ln;\n\t\t\tthis.#jump_light(cs);\n\n\t\t\treturn false;\n\t\t};\n\n\t\tfor (; this.#idxToken < this.#script.len; ++this.#idxToken) {\n\t\t\t// トークンの行番号更新\n\t\t\tthis.#script.aLNum[this.#idxToken] ||= this.#lineNum; // ??はNaN不可\n\n\t\t\tconst token = this.#script.aToken[this.#idxToken]!;\n\t\t\tif (token.search(this.#REG_TOKEN_MACRO_END) > -1) {\n\t\t\t\t++this.#idxToken;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst uc = token.charCodeAt(0);\t// TokenTopUnicode\n\t\t\tif (uc === 10) this.#lineNum += token.length;\t// \\n 改行\n\t\t\telse if (uc === 91) this.#lineNum += (token.match(/\\n/g) ?? []).length;\t// [ タグ開始\n\t\t}\n\t\tthrow `マクロ[${name}]定義の終端・[endmacro]がありません`;\n\t}\n\t#strStepin\t= 'call';\n\t#REGSTEPIN\t= /\\[(call)\\b/;\t// https://regex101.com/r/Lk9ASK/1\n\n\n\t//MARK: しおりの読込\n\t#load(hArg: TArg) {\n\t\tif ('fn' in hArg !== 'label' in hArg) throw 'fnとlabelはセットで指定して下さい';\n\n\t\tconst place = argChk_Num(hArg, 'place', 0);\n\t\tconst mark = this.val.getMark(place);\n\t\tif (! mark) throw `place=${String(place)} は存在しません`\n\n\t\treturn this.loadFromMark(hArg, mark, SndProcOnLoad.ALL_STOP_AND_PLAY);\n\t}\n\tloadFromMark(hArg: TArg, mark: T_Mark, snd: SndProcOnLoad = SndProcOnLoad.MINIMAL_STOP) {\n\t\tthis.hTag.clear_event({});\n\t\tthis.val.mark2save(mark);\n\t\tthis.val.setMp(creMP());\n\t\tthis.#layMng.recPagebreak();\n\n\t\tlet ap: Promise<void>[] = [];\n\t\tif (snd !== SndProcOnLoad.NO_TOUCH) ap = this.sndMng\n\t\t.playLoopFromSaveObj(snd === SndProcOnLoad.ALL_STOP_AND_PLAY);\n\n\t\tif (argChk_Boolean(hArg, 'do_rec', true)) this.#mark = {\n\t\t\thSave\t: this.val.cloneSave(),\n\t\t\thPages\t: {...mark.hPages},\n\t\t\taIfStk\t: [...mark.aIfStk],\n\t\t}\n\n\t\tconst o: TArg = {\n\t\t\tenabled\t: Boolean(this.val.getVal('save:const.sn.autowc.enabled')),\n\t\t\ttext\t: String(this.val.getVal('save:const.sn.autowc.text')),\n\t\t\ttime\t: Number(this.val.getVal('save:const.sn.autowc.time')),\n\t\t};\n\t\tthis.hTag.autowc(o);\n\n\t\tthis.#aIfStk = [...this.#mark.aIfStk];\n\t\tthis.#aCallStk = [];\n\t\tCmnTween.stopAllTw();\n\n\t\tconst p = Promise.allSettled([...ap, ...this.#layMng.playback(this.#mark.hPages)])\n\t\t.then(()=> this.#layMng.cover(false));\n\t\tconst {index, fn} = hArg;\n\t\tif (index) {\t// ページ移動用\n\t\t\tif (CmnLib.debugLog) console.log(`📜 %cloadFromMark index:${String(index)} move!%c fn:${fn ?? ''}`, 'color:#3B0;', '');\n\t\t\tp.then(()=> {\n\t\t\t\tif (! this.#jumpWork(fn, '', index)) this.main.resume();\n\t\t\t\t// if (ret)\t\t// 中で非同期で endProc() を呼ぶのでまかせる\n\t\t\t\t// if (! ret)\t// 同期でなにもせずすぐ返る\n\t\t\t})\n\t\t\t.catch((e: unknown)=> console.error('loadFromMark e:%o', e));\n\t\t\treturn true;\n\t\t}\n\n\t\tthis.#layMng.cover(true);\t// ページ移動では全画面黒で覆わない\n\t\tconst fn2 = String(this.val.getVal('save:const.sn.scriptFn'));\n\t\tconst idx = Number(this.val.getVal('save:const.sn.scriptIdx'));\n\t\t// eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\t\tdelete this.#hScript[fn2];\t// 必ずスクリプトを再読込。吉里吉里に動作を合わせる\n\t\tconst {label} = hArg;\n\t\tp.then(label ?()=> {\n\t\t\tthis.#scriptFn = fn2;\n\t\t\tthis.#idxToken = idx;\n\t\t\tif (! this.hTag.call({fn, label})) this.main.resume();\n\t\t}\n\t\t: ()=> {\n\t\t\tif (! this.#jumpWork(fn2, '', idx)) this.main.resume();\n\t\t})\n\t\t.catch((e: unknown)=> console.error('loadFromMark e:%o', e));\n\n\t\treturn true;\n\t}\n\n\t//MARK: スクリプト再読込\n\t#reload_script(hArg: TArg) {\t// 最後の[record_place]から再開\n\t\tconst mark = this.val.getMark(0);\n\t\tif (! mark) return false;\n\n\t\t// 起動から再読込までの間に追加・変更・削除されたファイルがあるかも、に対応\n\t\t//\tdelete this.hScript[this.#scriptFn];\t// これだと[reload_script]位置になる\n\t\t// eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\t\tdelete this.#hScript[getFn(mark.hSave['const.sn.scriptFn'])];\n\n\t\t// 派生ファイルを削除\n\t\tconst h: HScript = {};\n\t\tfor (const fn in this.#hScript) {\n\t\t\ttry {this.#cnvSnPath(fn +'@')}\n\t\t\tcatch {h[fn] = this.#hScript[fn]!}\t// 派生ファイル以外を残す\n\t\t}\n\t\tthis.#hScript = h;\n\n\t\thArg.do_rec = false;\n\t\treturn this.loadFromMark(hArg, mark, SndProcOnLoad.NO_TOUCH);\n\t}\n\n\n\t//MARK: セーブポイント指定\n\t#mark: T_Mark = {\n\t\thSave\t: creSAVEDATA(),\n\t\thPages\t: {},\n\t\taIfStk\t: [-1],\n\t};\n\t#record_place = ()=> {\n\t\tconst {fn, idx} = this.nowScrIdx();\n\t\tthis.val.setVal_Nochk('save', 'const.sn.scriptFn', fn);\n\t\tthis.val.setVal_Nochk('save', 'const.sn.scriptIdx', idx);\n\t\tthis.#mark = {\n\t\t\thSave\t: this.val.cloneSave(),\n\t\t\thPages\t: this.#layMng.record(),\n\t\t\taIfStk\t: this.#aIfStk.slice(this.#aCallStk.length),\n\t\t};\n\n\t\treturn false;\n\t}\n\tnowScrIdx(): {fn: string, idx: number} {\n\t\tconst len = this.#aCallStk.length;\n\t\tif (len === 0) return {\n\t\t\tfn\t: this.#scriptFn,\n\t\t\tidx\t: this.#idxToken,\n\t\t};\n\n\t\tconst cs = this.#aCallStk[0]!;\n\t\treturn {\n\t\t\tfn\t: cs.fn,\n\t\t\tidx\t: cs.idx,\n\t\t}\n\t}\n\tnowMark(): T_Mark {return {...this.#mark}}\t// コピーはここでする\n\n\t//MARK: スクリプト停止位置(マクロなどなら最上位の呼び元)\n\tnowScrFnLn(): {fn: string, ln: number, col_s: number, col_e: number} {\n\t\tconst {fn, idx} = this.nowScrIdx();\n\t\tconst st = this.#hScript[fn]!;\n\t\tconst o = this.#cnvIdx2lineCol(st, idx);\t// -1不要\n\t\treturn {fn, ...o};\n\t}\n\n\t//MARK: しおりの保存\n\t#save(hArg: TArg) {\n\t\tif (! ('place' in hArg)) throw 'placeは必須です';\n\t\tconst place = Number(hArg.place);\n\n\t\tdelete hArg[':タグ名'];\n\t\tdelete hArg.place;\n\t\thArg.text = hArg.text ?? '';\n\t\tthis.#mark.json = hArg;\n\t\tthis.val.setMark(place, this.#mark);\n\n\t\tconst now_sp = Number(this.val.getVal('sys:const.sn.save.place'));\n\t\tif (place === now_sp) this.val.setVal_Nochk('sys', 'const.sn.save.place', now_sp +1);\n\n\t\treturn false;\n\t}\n\n\n\trecodeDesign(hArg: TArg) {\n\t\tlet fn = '';\n\t\tlet idx = 0;\n\n\t\tconst len = this.#aCallStk.length;\n\t\tif (hArg.design_unit && len > 0) {\n\t\t\t// デザインモードでこのマクロへの引数変更とするか(内部をサーチさせない)\n\t\t\tconst cs = this.#aCallStk[0]!;\n\t\t\tfn = cs.fn;\n\t\t\tidx = cs.idx;\n\t\t}\n\t\telse {\n\t\t\tfn = this.#scriptFn;\n\t\t\tidx = this.#idxToken;\n\t\t}\n\t\thArg[':path']\t= this.#cnvSnPath4Dbg(fn);\n\t\tconst scr = this.#hScript[fn]!;\n\t\tconst lc = this.#cnvIdx2lineCol(scr, idx);\n\t\thArg[':ln']\t\t= lc.ln;\n\t\thArg[':col_s']\t= lc.col_s;\n\t\thArg[':col_e']\t= lc.col_e;\n\t\tconst idx_1 = idx -1;\n\t\thArg[':idx_tkn']= idx_1;\n\t\thArg[':token']\t= scr.aToken[idx_1];\n\n\t\tthis.sys.send2Dbg('_recodeDesign', hArg);\n\t}\n\treplace(idx: number, val: string) {this.#script.aToken[idx] = val}\n\n}\n"],"names":["ScriptIterator","cfg","hTag","main","val","prpPrs","sndMng","sys","o","#let_ml","#dump_stack","#dump_script","#endif","#if","#call","#jump","#pop_stack","#return","#bracket2macro","#char2macro","#macro","#load","#reload_script","#record_place","#save","#dbgToken","token","#scriptFn","#lineNum","#idxToken","#aCallStk","#procDebugtag","tag_name","#alzTagArg","#aIfStk","#grm","Grammar","ce","RubySpliter","CmnLib","#hHook","type","#isBreak_base","fnc","hLineBP","fn","v","#regBreakPoint","#hFuncBP","tkn","uc","#script","len","#jumpWork","AnalyzeTagArg","#hFn2hLineBP","#cnvSnPath4Dbg","#breakState","#aStack","#isIdxOverLast","#idxDx4Dbg","#go_stepover","#REGSTEPIN","#go_stepout","#cnvSnPath","SEARCH_PATH_ARG_EXT","out","#csDepth_macro_esc","_token","#subHitCondition","tagToken2Name","bp","isBreak","getFn","idx_n","tkn0","fn0","tag_name0","nm","ma","lc0","#cnvIdx2lineCol","a","i","cs","st","#hScript","lc","_tag_name","args","tag_fnc","hPrm","cond","p","ps","hArg","csa","creCSArg","arg_nm","def","mac","Reading","#setTag2ChIn","promise","resolve","RPN_COMP_CHIN","#setTag2FinishTrans","#evtMng","CmnTween","fncBypass","#hTag2SkipBypass","argChk_Boolean","#hTag2CanSkip","BUF_BGM","#layMng","evtMng","layMng","name","ml","now","hMp","from_macro_nm","call_nm","idx","ret","lN","set_fnc","break_fnc","#fncSet","goto","#fnLastBreak","#hScrCache4Dump","#fncBreak","_goto","#dumpErrLine","s","ln_txt_width","ln","mes","line","exp","cntDepth","idxGo","lnIf","zLn","tagToken2Name_Args","e","#eraseKidoku","#callSub","ReadingState","hEvt1Time","#resvToken","#clearResvToken","CallStack","creMP","after_token","label","#jump_light","#nextToken_Proc","#skipLabel","full_path","RPN_JUMPWORK","fp_diff","ldr","Loader","res","next","d","_ldr","hRes","scrBase","scrDiff","aBase","aDiff","lenB","lenD","#resolveScript","#seekScript","#errOverScr","#recordKidoku","#REG_NONAME_LABEL","#REG_TOKEN_MACRO_BEGIN","#REG_TOKEN_MACRO_END","inMacro","iln","iskipLabel","skipLabel","j","a_skipLabel","DebugMng","reLabel","in_let_ml","txt","scr","#replaceScript_Wildcard","#REG_WILDCARD","#REG_WILDCARD2","p_fn","ext","nt","ar","#isKidoku","#REG_NG4MAC_NM","#strStepin","hArgM","place","argChk_Num","mark","snd","ap","#mark","index","fn2","h","creSAVEDATA","now_sp","idx_1"],"mappings":"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"}
|