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