@famibee/skynovel 2.0.1 → 2.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Button.js +36 -34
- package/dist/Button.js.map +1 -1
- package/dist/CallStack.js +11 -6
- package/dist/CallStack.js.map +1 -1
- package/dist/CmnInterface.js +13 -11
- package/dist/CmnInterface.js.map +1 -1
- package/dist/CmnLib.js +58 -56
- package/dist/CmnLib.js.map +1 -1
- package/dist/Config.js +9 -7
- package/dist/Config.js.map +1 -1
- package/dist/ConfigBase.js +52 -49
- package/dist/ConfigBase.js.map +1 -1
- package/dist/DebugMng.js +9 -6
- package/dist/DebugMng.js.map +1 -1
- package/dist/EventListenerCtn.js +6 -4
- package/dist/EventListenerCtn.js.map +1 -1
- package/dist/EventMng.js +522 -417
- package/dist/EventMng.js.map +1 -1
- package/dist/Grammar.js +22 -20
- package/dist/Grammar.js.map +1 -1
- package/dist/GrpLayer.js +58 -57
- package/dist/GrpLayer.js.map +1 -1
- package/dist/Layer.js +66 -64
- package/dist/Layer.js.map +1 -1
- package/dist/LayerMng.js +461 -441
- package/dist/LayerMng.js.map +1 -1
- package/dist/Main.js +69 -67
- package/dist/Main.js.map +1 -1
- package/dist/PropParser.js +23 -19
- package/dist/PropParser.js.map +1 -1
- package/dist/Reading.js +422 -418
- package/dist/Reading.js.map +1 -1
- package/dist/RubySpliter.js +6 -4
- package/dist/RubySpliter.js.map +1 -1
- package/dist/ScriptIterator.js +374 -370
- package/dist/ScriptIterator.js.map +1 -1
- package/dist/SndBuf.js +643 -622
- package/dist/SndBuf.js.map +1 -1
- package/dist/SoundMng.js +59 -60
- package/dist/SoundMng.js.map +1 -1
- package/dist/SpritesMng.js +135 -129
- package/dist/SpritesMng.js.map +1 -1
- package/dist/SysBase.js +985 -950
- package/dist/SysBase.js.map +1 -1
- package/dist/TxtLayer.js +558 -551
- package/dist/TxtLayer.js.map +1 -1
- package/dist/Variable.js +47 -45
- package/dist/Variable.js.map +1 -1
- package/dist/chunk.js +11 -9
- package/dist/gamepad.js +396 -660
- package/dist/gamepad.js.map +1 -1
- package/dist/pixi.js +2631 -2593
- package/dist/pixi.js.map +1 -1
- package/dist/platform.js +6 -4
- package/dist/platform.js.map +1 -1
- package/dist/rolldown-runtime.js +20 -0
- package/dist/sn/RubySpliter.d.ts.map +1 -1
- package/dist/web.js +418 -418
- package/dist/web.js.map +1 -1
- package/dist_app/Button.js +36 -34
- package/dist_app/Button.js.map +1 -1
- package/dist_app/CallStack.js +11 -6
- package/dist_app/CallStack.js.map +1 -1
- package/dist_app/CmnInterface.js +13 -11
- package/dist_app/CmnInterface.js.map +1 -1
- package/dist_app/CmnLib.js +58 -56
- package/dist_app/CmnLib.js.map +1 -1
- package/dist_app/Config.js +9 -7
- package/dist_app/Config.js.map +1 -1
- package/dist_app/ConfigBase.js +52 -49
- package/dist_app/ConfigBase.js.map +1 -1
- package/dist_app/DebugMng.js +9 -6
- package/dist_app/DebugMng.js.map +1 -1
- package/dist_app/EventListenerCtn.js +6 -4
- package/dist_app/EventListenerCtn.js.map +1 -1
- package/dist_app/EventMng.js +522 -417
- package/dist_app/EventMng.js.map +1 -1
- package/dist_app/Grammar.js +22 -20
- package/dist_app/Grammar.js.map +1 -1
- package/dist_app/GrpLayer.js +58 -57
- package/dist_app/GrpLayer.js.map +1 -1
- package/dist_app/Layer.js +66 -64
- package/dist_app/Layer.js.map +1 -1
- package/dist_app/LayerMng.js +461 -441
- package/dist_app/LayerMng.js.map +1 -1
- package/dist_app/Main.js +69 -67
- package/dist_app/Main.js.map +1 -1
- package/dist_app/PropParser.js +23 -19
- package/dist_app/PropParser.js.map +1 -1
- package/dist_app/Reading.js +422 -418
- package/dist_app/Reading.js.map +1 -1
- package/dist_app/RubySpliter.js +6 -4
- package/dist_app/RubySpliter.js.map +1 -1
- package/dist_app/ScriptIterator.js +374 -370
- package/dist_app/ScriptIterator.js.map +1 -1
- package/dist_app/SndBuf.js +643 -622
- package/dist_app/SndBuf.js.map +1 -1
- package/dist_app/SoundMng.js +59 -60
- package/dist_app/SoundMng.js.map +1 -1
- package/dist_app/SpritesMng.js +135 -129
- package/dist_app/SpritesMng.js.map +1 -1
- package/dist_app/SysBase.js +985 -950
- package/dist_app/SysBase.js.map +1 -1
- package/dist_app/TxtLayer.js +558 -551
- package/dist_app/TxtLayer.js.map +1 -1
- package/dist_app/Variable.js +47 -45
- package/dist_app/Variable.js.map +1 -1
- package/dist_app/app.js +62 -63
- package/dist_app/app.js.map +1 -1
- package/dist_app/appMain.js +11 -11
- package/dist_app/appMain.js.map +1 -1
- package/dist_app/chunk.js +11 -9
- package/dist_app/gamepad.js +396 -660
- package/dist_app/gamepad.js.map +1 -1
- package/dist_app/pixi.js +2028 -1990
- package/dist_app/pixi.js.map +1 -1
- package/dist_app/platform.js +6 -4
- package/dist_app/platform.js.map +1 -1
- package/dist_app/preload.js +1 -1
- package/dist_app/preload.js.map +1 -1
- package/dist_app/rolldown-runtime.js +20 -0
- package/dist_app/sn/RubySpliter.d.ts.map +1 -1
- package/package.json +20 -21
package/dist/Grammar.js
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import { d as
|
|
2
|
-
import { n as
|
|
3
|
-
|
|
1
|
+
import { d as e } from "./CmnLib.js";
|
|
2
|
+
import { n as t } from "./ConfigBase.js";
|
|
3
|
+
//#region src/sn/AnalyzeTagArg.ts
|
|
4
|
+
function n(e, t, n = 0, r = 0, i = 0) {
|
|
4
5
|
let a = e.slice(0, t).split("\n"), o = a.length;
|
|
5
6
|
return {
|
|
6
7
|
ln: r + o - 1,
|
|
7
8
|
ch: o < 2 ? i + 1 + n + t : a.at(-1)?.length ?? 0
|
|
8
9
|
};
|
|
9
10
|
}
|
|
10
|
-
var
|
|
11
|
+
var r = class {
|
|
11
12
|
#e = /;[^\n]*|(?<key>[^\s="'#|;]+)(?:\s|;[^\n]*\n)*=(?:\s|;[^\n]*\n)*(?:(?<val>[^\s"'#|;]+)|(["'#])(?<val2>.*?)\3)(?:\|(?:(?<def>[^\s"'#;]+)|(["'#])(?<def2>.*?)\6))?|(?<literal>[^\s;]+)/g;
|
|
12
13
|
parse(e) {
|
|
13
14
|
this.#t = {}, this.#n = !1;
|
|
@@ -29,7 +30,7 @@ var AnalyzeTagArg = class {
|
|
|
29
30
|
let { key: l, val: u, val2: d = "", literal: f } = e;
|
|
30
31
|
if (f) {
|
|
31
32
|
if (f.endsWith("=")) {
|
|
32
|
-
let e = f.length - 1, { ch: c } =
|
|
33
|
+
let e = f.length - 1, { ch: c } = n(o, s + e, t, r, i);
|
|
33
34
|
a[f.slice(0, -1)] = {
|
|
34
35
|
k_ln: r,
|
|
35
36
|
k_ch: c - e,
|
|
@@ -41,7 +42,7 @@ var AnalyzeTagArg = class {
|
|
|
41
42
|
continue;
|
|
42
43
|
}
|
|
43
44
|
if (!l) continue;
|
|
44
|
-
let { ln: p, ch: m } =
|
|
45
|
+
let { ln: p, ch: m } = n(o, s, t, r, i), { ln: h, ch: g } = n(o, s + c.lastIndexOf(u ?? d) - +!u, t, r, i);
|
|
45
46
|
a[l] = {
|
|
46
47
|
k_ln: p,
|
|
47
48
|
k_ch: m,
|
|
@@ -60,20 +61,19 @@ var AnalyzeTagArg = class {
|
|
|
60
61
|
get isKomeParam() {
|
|
61
62
|
return this.#n;
|
|
62
63
|
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
let t = REG_TAG.exec(e.slice(1, -1))?.groups;
|
|
64
|
+
}, i = /(?<name>[^\s;\]]+)/;
|
|
65
|
+
function a(e) {
|
|
66
|
+
let t = i.exec(e.slice(1, -1))?.groups;
|
|
67
67
|
if (!t) throw `タグ記述【${e}】異常です(タグ解析)`;
|
|
68
68
|
let n = t.name;
|
|
69
69
|
return [n, e.slice(1 + n.length, -1)];
|
|
70
70
|
}
|
|
71
|
-
function
|
|
72
|
-
let t =
|
|
71
|
+
function o(e) {
|
|
72
|
+
let t = i.exec(e.slice(1))?.groups;
|
|
73
73
|
if (!t) throw `タグ記述【${e}】異常です(タグ解析)`;
|
|
74
74
|
return t.name;
|
|
75
75
|
}
|
|
76
|
-
function
|
|
76
|
+
function s(e) {
|
|
77
77
|
let t = e.replaceAll("==", "=").replaceAll("!=", "≠").split("="), n = t.length;
|
|
78
78
|
if (n < 2 || n > 3) throw "「&計算」書式では「=」指定が一つか二つ必要です";
|
|
79
79
|
let [r, i, a] = t;
|
|
@@ -84,14 +84,15 @@ function splitAmpersand(e) {
|
|
|
84
84
|
...n === 3 ? { cast: a.trim() } : {}
|
|
85
85
|
};
|
|
86
86
|
}
|
|
87
|
-
var
|
|
87
|
+
var c = class {
|
|
88
|
+
cfg;
|
|
88
89
|
constructor(e) {
|
|
89
90
|
this.cfg = e, this.setEscape("");
|
|
90
91
|
}
|
|
91
92
|
#e;
|
|
92
93
|
setEscape(e) {
|
|
93
94
|
if (this.#l && e in this.#l) throw "[エスケープ文字] char【" + e + "】が登録済みの括弧マクロまたは一文字マクロです";
|
|
94
|
-
this.#e = RegExp((e ? `\\${e}\\S|` : "") + `\\n+|\\t+|\\[let_ml\\s+[^\\]]+\\].+?(?=\\[endlet_ml[\\]\\s])|\\[(?:[^"'#;\\]]+|(["'#]).*?\\1|;[^\\n]*)*?]|;[^\\n]*|&[^&\\n]+&|&&?(?:[^"'#;\\n&]+|(["'#]).*?\\2)+|^\\*[^\\s\\[&;\\\\]+|[^\\n\\t\\[;${e ? `\\${e}` : ""}]+`, "gs"), this.#t =
|
|
95
|
+
this.#e = RegExp((e ? `\\${e}\\S|` : "") + `\\n+|\\t+|\\[let_ml\\s+[^\\]]+\\].+?(?=\\[endlet_ml[\\]\\s])|\\[(?:[^"'#;\\]]+|(["'#]).*?\\1|;[^\\n]*)*?]|;[^\\n]*|&[^&\\n]+&|&&?(?:[^"'#;\\n&]+|(["'#]).*?\\2)+|^\\*[^\\s\\[&;\\\\]+|[^\\n\\t\\[;${e ? `\\${e}` : ""}]+`, "gs"), this.#t = RegExp(`[\\w\\s;[\\]*=&|《》${e ? `\\${e}` : ""}]`), this.#u = RegExp(`[\\n\\t;\\[*&${e ? `\\${e}` : ""}]`);
|
|
95
96
|
}
|
|
96
97
|
bracket2macro(e, t, n, r) {
|
|
97
98
|
let { name: i, text: a } = e;
|
|
@@ -145,22 +146,22 @@ var Grammar = class {
|
|
|
145
146
|
for (let r = n.len - 1; r >= 0; --r) {
|
|
146
147
|
let i = n.aToken[r];
|
|
147
148
|
if (!this.#a.test(i)) continue;
|
|
148
|
-
let [o, s] =
|
|
149
|
+
let [o, s] = a(i);
|
|
149
150
|
this.#c.parse(s);
|
|
150
151
|
let c = this.#c.hPrm.fn;
|
|
151
152
|
if (!c) continue;
|
|
152
153
|
let { val: l } = c;
|
|
153
154
|
if (!l.endsWith("*")) continue;
|
|
154
155
|
n.aToken.splice(r, 1, " ", "; " + i), n.aLNum.splice(r, 1, NaN, NaN);
|
|
155
|
-
let u = o === "loadplugin" ?
|
|
156
|
+
let u = o === "loadplugin" ? t.CSS : t.SN, d = this.cfg.matchPath("^" + l.slice(0, -1) + ".*", u);
|
|
156
157
|
for (let t of d) {
|
|
157
|
-
let a = i.replace(this.#o, "fn=" + decodeURIComponent(
|
|
158
|
+
let a = i.replace(this.#o, "fn=" + decodeURIComponent(e(t[u])));
|
|
158
159
|
n.aToken.splice(r, 0, a), n.aLNum.splice(r, 0, NaN);
|
|
159
160
|
}
|
|
160
161
|
}
|
|
161
162
|
n.len = n.aToken.length;
|
|
162
163
|
}
|
|
163
|
-
#c = new
|
|
164
|
+
#c = new r();
|
|
164
165
|
testTagLetml(e) {
|
|
165
166
|
return /^\[let_ml\s/.test(e);
|
|
166
167
|
}
|
|
@@ -189,6 +190,7 @@ var Grammar = class {
|
|
|
189
190
|
return this.#u.test(e);
|
|
190
191
|
}
|
|
191
192
|
};
|
|
192
|
-
|
|
193
|
+
//#endregion
|
|
194
|
+
export { r as a, a as i, s as n, o as r, c as t };
|
|
193
195
|
|
|
194
196
|
//# sourceMappingURL=Grammar.js.map
|
package/dist/Grammar.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Grammar.js","names":["#REG_TAGARG","#hPrm","#isKomeParam","hRng: {[key: string]: PRM_RANGE}","cfg: T_Config","#hC2M","#REG_TOKEN","#REG_CANTC2M","#REG_TOKEN_NOTXT","#replaceScr_C2M","#regStrC2M","#regStrC2M4not","#REGC2M","a: string[]","#replaceScript_Wildcard","#REG_WILDCARD","#REG_WILDCARD2","#alzTagArg"],"sources":["../src/sn/AnalyzeTagArg.ts","../src/sn/Grammar.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\nexport type PRM = {\n\tval\t\t: string;\n\tdef\t\t: string | undefined;\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', def: undefined};\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;\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\t...cnt_equa === 3 ?{cast: e2!.trim()} :{},\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"],"mappings":";;AAuBA,SAAgB,UAAU,GAAa,GAAa,IAAQ,GAAG,IAAK,GAAG,IAAK,GAA8B;CAEzG,IAAM,IADU,EAAI,MAAM,GAAG,EAAI,CACf,MAAM,KAAK,EACvB,IAAM,EAAE;AACd,QAAO;EACN,IAAK,IAAI,IAAK;EACd,IAAK,IAAM,IAAG,IAAI,IAAE,IAAO,IAAK,EAAE,GAAG,GAAG,EAAE,UAAU;EACpD;;AAIF,IAAa,gBAAb,MAA2B;CAe1B,KAAuB;CAGvB,MAAM,GAAoB;AAEzB,EADA,MAAA,IAAa,EAAE,EACf,MAAA,IAAoB;AACpB,OAAK,IAAM,EAAC,eAAW,EAAK,SAAS,MAAA,EAAiB,EAAE;GAEvD,IAAM,EAAC,QAAK,QAAK,SAAM,QAAK,SAAM,eAAW;AAC7C,GAAI,IAAK,MAAA,EAAW,KAAO;IAC1B,KAAK,KAAO,KAAQ;IACpB,KAAK,KAAO;IACZ,GACQ,MACJ,MAAY,MAAK,MAAA,IAAoB,KACpC,MAAA,EAAW,KAAW;IAAC,KAAK;IAAK,KAAK,KAAA;IAAU;;;CAMxD,cAAc,GAAe,GAAe,GAAY,GAAwC;EAC/F,IAAMG,IAAmC,EAAE,EAErC,IAAM,EAAM,MAAM,IAAE,GAAO,GAAG;AACpC,OAAK,IAAM,EAAC,WAAQ,UAAO,GAAG,OAAM,EAAI,SAAS,MAAA,EAAiB,EAAE;AACnE,OAAI,CAAE,EAAO;GAEb,IAAM,EAAC,QAAK,QAAK,UAAK,IAAI,eAAW;AACrC,OAAI,GAAS;AACZ,QAAI,EAAQ,SAAS,IAAI,EAAE;KAC1B,IAAM,IAAS,EAAQ,SAAQ,GACzB,EAAC,IAAI,MAAQ,UAAU,GAAK,IAAO,GAAQ,GAAO,GAAI,EAAG;AAC/D,OAAK,EAAQ,MAAM,GAAG,GAAG,IAAI;MAC5B,MAAM;MACN,MAAM,IAAM;MACZ,MAAM;MACN,MAAM,IAAM;MAEZ,OAAO;MACP;;AAEF;;AAED,OAAI,CAAE,EAAK;GAEX,IAAM,EAAC,IAAI,GAAM,IAAI,MAAQ,UAAU,GAAK,GAAO,GAAO,GAAI,EAAG,EAC3D,EAAC,IAAI,GAAM,IAAI,MAAQ,UAAU,GAAK,IAAO,EAAE,YAAY,KAAO,EAAK,IAAG,IAAK,IAAG,IAAI,GAAO,GAAI,EAAG;AAC1G,KAAK,KAAO;IAAC;IAAM;IAAM;IAAM;IAAM,OAAO,IAAK,EAAI,SAAQ,EAAK,SAAQ;IAAE;;AAG7E,SAAO;;CAGR,KAAc,EAAE;CAChB,IAAI,OAAO;AAAC,SAAO,MAAA;;CAEnB,KAAe;CACf,IAAI,cAAc;AAAC,SAAO,MAAA;;;ACwO3B,MAAa,UAAU;AACvB,SAAgB,mBAAmB,GAA6C;CAE/E,IAAM,IADI,QAAQ,KAAK,EAAM,MAAM,GAAG,GAAG,CAAC,EAC7B;AACb,KAAI,CAAE,EAAG,OAAM,QAAQ,EAAM;CAE7B,IAAM,IAAK,EAAE;AACb,QAAO,CAAC,GAAI,EAAM,MAAM,IAAG,EAAG,QAAQ,GAAG,CAAC;;AAE3C,SAAgB,cAAc,GAAuB;CAEpD,IAAM,IADI,QAAQ,KAAK,EAAM,MAAM,EAAE,CAAC,EACzB;AACb,KAAI,CAAE,EAAG,OAAM,QAAQ,EAAM;AAE7B,QAAO,EAAE;;AAGV,SAAgB,eAAe,GAI7B;CACD,IAAM,IAAO,EAAM,WAAW,MAAM,IAAI,CAAC,WAAW,MAAM,IAAI,CAAC,MAAM,IAAI,EAEnE,IAAW,EAAK;AACtB,KAAI,IAAW,KAAK,IAAW,EAAG,OAAM;CAExC,IAAM,CAAC,GAAI,GAAI,KAAM;AACrB,KAAI,EAAI,WAAW,IAAI,CAAE,OAAM;AAC/B,QAAO;EACN,MAAM,EAAI,WAAW,KAAK,KAAK,CAAC,WAAW,KAAK,KAAK;EACrD,MAAM,EAAI,WAAW,KAAK,KAAK,CAAC,WAAW,KAAK,KAAK;EACrD,GAAG,MAAa,IAAG,EAAC,MAAM,EAAI,MAAM,EAAC,GAAE,EAAE;EACzC;;AAIF,IAAa,UAAb,MAAqB;CACpB,YAAY,GAAgC;AAAC,EAAhB,KAAA,MAAA,GAAgB,KAAK,UAAU,GAAG;;CAE/D;CACA,UAAU,GAAY;AACrB,MAAI,MAAA,KAAc,KAAM,MAAA,EAAY,OAAM,oBAAmB,IAAI;AA4CjE,EAnBA,MAAA,IAAsB,QACrB,IAAI,KAAK,EAAG,QAAO,MACpB,qMAcgB,IAAI,KAAK,MAAM,GAAG,KAClC,KAAK,EACL,MAAA,IAAoB,gBAAI,OAAO,qBAAqB,IAAI,KAAK,MAAM,GAAG,GAAG,EACzE,MAAA,IAAwB,gBAAI,OAAO,gBAAgB,IAAI,KAAK,MAAM,GAAG,GAAG;;CAKzE,cAAc,GAAY,GAAc,GAAa,GAAmB;EACvE,IAAM,EAAC,SAAM,YAAQ;AACrB,MAAI,CAAE,EAAM,OAAM;AAClB,MAAI,CAAE,EAAM,OAAM;EAClB,IAAM,IAAK,EAAK,GAAG,EAAE;AACrB,MAAI,CAAE,EAAI,OAAM;AAChB,MAAI,EAAK,WAAW,EAAG,OAAM;AAC7B,MAAI,EAAG,KAAQ,GAAO,OAAM,+BAA+B,EAAK;AAEhE,QAAA,MAAe,EAAE;EACjB,IAAM,IAAK,EAAK,OAAO,EAAE;AACzB,MAAI,KAAM,MAAA,EAAY,OAAM,0BAAyB,IAAI;AACzD,MAAI,KAAM,MAAA,EAAY,OAAM,0BAAyB,IAAI;AACzD,MAAI,MAAA,EAAkB,KAAK,EAAG,CAAE,OAAM,0BAAyB,IAAI;AACnE,MAAI,MAAA,EAAkB,KAAK,EAAG,CAAE,OAAM,0BAAyB,IAAI;AAOnE,EALA,MAAA,EAAW,KAAM,KACjB,MAAA,EAAW,KAAM,IAAI,EAAK,SAE1B,KAAK,OAAO,KAAK,EAAG,MAAM,EAAG,MAAM,KAAM,KAAK,EAAG,IAAI,IAAK,EAE1D,MAAA,EAAqB,GAAK,EAAU;;CAGrC,WAAW,GAAY,GAAc,GAAa,GAAmB;EACpE,IAAM,EAAC,SAAM,YAAQ;AACrB,MAAI,CAAE,EAAM,OAAM;AAElB,MADA,MAAA,MAAe,EAAE,EACb,KAAQ,MAAA,EAAY,OAAM,uBAAsB,IAAM;AAC1D,MAAI,MAAA,EAAkB,KAAK,EAAK,CAAE,OAAM,uBAAsB,IAAM;AAEpE,MAAI,CAAE,EAAM,OAAM;AAClB,MAAI,EAAG,KAAQ,GAAO,OAAM,4BAA4B,EAAK;AAM7D,EAJA,MAAA,EAAW,KAAQ,IAAI,EAAK,IAE5B,KAAK,OAAO,KAAK,KAAQ,KAAK,IAAO,EAErC,MAAA,EAAqB,GAAK,EAAU;;CAErC;CACA,KAAY,gBAAI,OAAO,GAAG;CAC1B,KAAc;CACd,KAAiB;CACjB,OAAO,GAAW,GAAW;AAG5B,EAFA,MAAA,KAAmB,GAAG,EAAE,IACxB,MAAA,KAAuB,GACvB,MAAA,IAAmB,OAClB,IAAI,MAAA,EAAgB,IAAI,MAAA,EAAoB,MAAM,IAAI;;CAIxD,cAAc,GAAqB;EAClC,IAAMU,IAAc,EACnB,WAAW,UAAU,KAAK,CAC1B,MAAM,MAAA,EAAgB,EACrB,SAAQ,MAAM;AACf,OAAI,CAAE,KAAK,aAAa,EAAI,CAAE,QAAO;GAErC,IAAM,IAAI,oBAAoB,KAAK,EAAI;AACvC,OAAI,CAAE,EAAG,QAAO;GAChB,IAAM,GAAG,GAAG,KAAK;AACjB,UAAO,CAAC,GAAI,EAAG;IACd,IAAI,EAAE,EAEF,IAAM;GAAC,QAAQ;GAAG,KAAK,EAAE;GAAQ,OAAO,EAAE;GAAC;AAKjD,SAJA,MAAA,EAAqB,EAAI,EAEzB,MAAA,EAA6B,EAAI,EAE1B;;CAIR,KAAyB;CACzB,KAA0B;CAC1B,GAAwB,GAAa;AACpC,OAAK,IAAI,IAAE,EAAI,MAAK,GAAG,KAAG,GAAG,EAAE,GAAG;GACjC,IAAM,IAAQ,EAAI,OAAO;AACzB,OAAI,CAAE,MAAA,EAAmB,KAAK,EAAM,CAAE;GAEtC,IAAM,CAAC,GAAU,KAAQ,mBAAmB,EAAM;AAClD,SAAA,EAAgB,MAAM,EAAK;GAE3B,IAAM,IAAO,MAAA,EAAgB,KAAK;AAClC,OAAI,CAAE,EAAM;GACZ,IAAM,EAAC,KAAK,MAAM;AAClB,OAAI,CAAE,EAAG,SAAS,IAAI,CAAE;AAGxB,GADA,EAAI,OAAO,OAAO,GAAG,GAAG,KAAM,OAAM,EAAM,EAC1C,EAAI,MAAM,OAAO,GAAG,GAAG,KAAK,IAAI;GAEhC,IAAM,IAAM,MAAa,eACtB,oBAAoB,MACpB,oBAAoB,IACjB,IAAI,KAAK,IAAI,UAAU,MAAK,EAAG,MAAM,GAAG,GAAG,GAAE,MAAM,EAAI;AAC7D,QAAK,IAAM,KAAK,GAAG;IAClB,IAAM,IAAK,EAAM,QAChB,MAAA,GACA,QAAO,mBAAmB,MAAM,EAAE,GAAM,CAAC,CACzC;AAGD,IADA,EAAI,OAAO,OAAO,GAAG,GAAG,EAAG,EAC3B,EAAI,MAAM,OAAO,GAAG,GAAG,IAAI;;;AAG7B,IAAI,MAAM,EAAI,OAAO;;CAErB,KAAsB,IAAI,eAAa;CAGxC,aAAa,GAAsB;AAAC,SAAO,cAAc,KAAK,EAAI;;CAClE,gBAAgB,GAAsB;AAAC,SAAO,mBAAmB,KAAK,EAAI;;CAG1E,KAA+C,KAAA;CAC/C;CACA,GAAgB,GAAa,IAAY,GAAS;AAC3C,YAAA,GAEN;QAAK,IAAI,IAAE,EAAI,MAAK,GAAG,KAAK,GAAW,EAAE,GAAG;IAC3C,IAAM,IAAQ,EAAI,OAAO;AACzB,QAAI,KAAK,UAAU,EAAM,GAAG,EAAE,IAAI,KAAK,CAAE;IAGzC,IAAM,IAAO,EAAI,MAAM,IACjB,IAAI,EAAM,MAAM,MAAA,EAAa;AACnC,QAAI,CAAE,EAAG;IACT,IAAI,IAAM;AACV,SAAK,IAAI,IAAE,EAAE,SAAQ,GAAG,KAAG,GAAG,EAAE,GAAG;KAClC,IAAI,IAAK,EAAE,IACL,IAAQ,MAAA,EAAW,EAAG,GAAG,EAAE,IAAI;AAWrC,KATI,MACH,IAAK,KAAQ,EAAM,SAAS,IAAI,GAC7B,KACA,IAAI,EAAG,MAAM,GAAG,GAAG,CAAC,OAGxB,EAAI,OAAO,OAAO,GAAG,GAAK,EAAG,EAE7B,EAAI,MAAM,OAAO,GAAG,GAAK,EAAK,EAC9B,IAAM;;;AAGR,KAAI,MAAM,EAAI,OAAO;;;CAEtB,UAAU,GAAqB;AAAC,SAAO,MAAA,EAAsB,KAAK,EAAG"}
|
|
1
|
+
{"version":3,"file":"Grammar.js","names":["#REG_TAGARG","#hPrm","#isKomeParam","#hC2M","#REG_TOKEN","#REG_CANTC2M","#REG_TOKEN_NOTXT","#replaceScr_C2M","#regStrC2M","#regStrC2M4not","#REGC2M","#replaceScript_Wildcard","#REG_WILDCARD","#REG_WILDCARD2","#alzTagArg"],"sources":["../src/sn/AnalyzeTagArg.ts","../src/sn/Grammar.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\nexport type PRM = {\n\tval\t\t: string;\n\tdef\t\t: string | undefined;\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', def: undefined};\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;\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\t...cnt_equa === 3 ?{cast: e2!.trim()} :{},\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"],"mappings":"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"}
|
package/dist/GrpLayer.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { l as
|
|
2
|
-
import { d as
|
|
3
|
-
import "./
|
|
4
|
-
import "./
|
|
5
|
-
import { t as
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
static init(e,
|
|
1
|
+
import { l as e, s as t, t as n } from "./CmnLib.js";
|
|
2
|
+
import { d as r, n as i, o as a } from "./pixi.js";
|
|
3
|
+
import { t as o } from "./Layer.js";
|
|
4
|
+
import { t as s } from "./Reading.js";
|
|
5
|
+
import { t as c } from "./SpritesMng.js";
|
|
6
|
+
//#region src/sn/DesignCast.ts
|
|
7
|
+
var l = class {
|
|
8
|
+
bg_col;
|
|
9
|
+
isLay;
|
|
10
|
+
static init(e, t, n, r, i, a) {}
|
|
11
11
|
static cvsResizeDesign() {}
|
|
12
|
-
constructor(e,
|
|
13
|
-
this.bg_col = e, this.isLay =
|
|
12
|
+
constructor(e, t = !1) {
|
|
13
|
+
this.bg_col = e, this.isLay = t;
|
|
14
14
|
}
|
|
15
15
|
destroy() {}
|
|
16
16
|
gethArg() {
|
|
@@ -29,22 +29,22 @@ var DesignCast = class {
|
|
|
29
29
|
cvsResize() {}
|
|
30
30
|
make() {}
|
|
31
31
|
static replaceToken(e) {}
|
|
32
|
-
},
|
|
33
|
-
constructor(e,
|
|
32
|
+
}, u = class extends l {
|
|
33
|
+
constructor(e, t) {
|
|
34
34
|
super("#29e", !0);
|
|
35
35
|
}
|
|
36
36
|
setSp(e) {}
|
|
37
|
-
},
|
|
37
|
+
}, d = class l extends o {
|
|
38
38
|
static #e;
|
|
39
|
-
static init(e,
|
|
40
|
-
|
|
39
|
+
static init(e, t, n, r, i, a) {
|
|
40
|
+
l.#e = n, c.init(t, a, r, e, i);
|
|
41
41
|
}
|
|
42
42
|
static destroy() {
|
|
43
|
-
|
|
43
|
+
c.destroy();
|
|
44
44
|
}
|
|
45
|
-
#t = new
|
|
45
|
+
#t = new u(this.ctn, this);
|
|
46
46
|
constructor() {
|
|
47
|
-
super(),
|
|
47
|
+
super(), n.isDbg && (this.#n = (e) => this.#t.setSp(e), this.cvsResize = () => {
|
|
48
48
|
super.cvsResize(), this.#t.cvsResize();
|
|
49
49
|
});
|
|
50
50
|
}
|
|
@@ -53,20 +53,20 @@ var DesignCast = class {
|
|
|
53
53
|
#i = "";
|
|
54
54
|
#a = "";
|
|
55
55
|
lay = (e) => {
|
|
56
|
-
let
|
|
57
|
-
e &&
|
|
56
|
+
let t = s.procID + `GrpLayer lay name:${this.name_}`, n = this.#o(e, (e) => {
|
|
57
|
+
e && s.endProc(t);
|
|
58
58
|
});
|
|
59
|
-
return
|
|
59
|
+
return n && s.beginProc(t), n;
|
|
60
60
|
};
|
|
61
|
-
#o(
|
|
62
|
-
let { fn:
|
|
63
|
-
if (this.#t.sethArg(
|
|
64
|
-
let
|
|
65
|
-
return this.clearLay({ clear_filter:
|
|
66
|
-
("width" in
|
|
67
|
-
}, (e) =>
|
|
68
|
-
}
|
|
69
|
-
#s = new
|
|
61
|
+
#o(n, r) {
|
|
62
|
+
let { fn: i, face: a = "" } = n;
|
|
63
|
+
if (this.#t.sethArg(n), !i) return super.lay(n), this.ctn.children.length > 0 && this.setPos(n), this.#i = "", this.#r = this.#a = a, r(!1), !1;
|
|
64
|
+
let s = "fn" in n, l = "face" in n;
|
|
65
|
+
return this.clearLay({ clear_filter: t(n, "clear_filter", !0) }), s && (this.#i = i), l && (this.#a = a), super.lay(n), n.dx = 0, n.dy = 0, this.#s.destroy(), this.#s = new c(this.#r = i + (a ? "," + a : ""), this.ctn, (t) => {
|
|
66
|
+
("width" in n || "height" in n) && (t.width = e(n, "width", 0), t.height = e(n, "height", 0)), this.#c = t.width, this.#l = t.height, o.setXY(t, n, this.ctn, !0), o.setBlendmode(this.ctn, n), this.#n(t);
|
|
67
|
+
}, (e) => r(e)), this.#s.ret;
|
|
68
|
+
}
|
|
69
|
+
#s = new c();
|
|
70
70
|
#c = 0;
|
|
71
71
|
#l = 0;
|
|
72
72
|
get width() {
|
|
@@ -81,45 +81,45 @@ var DesignCast = class {
|
|
|
81
81
|
this.ctn.alpha = 1, this.ctn.alpha = e;
|
|
82
82
|
return;
|
|
83
83
|
}
|
|
84
|
-
this.#d = new
|
|
85
|
-
let
|
|
84
|
+
this.#d = new a(this.#u), this.#d.visible = !1, this.ctn.addChildAt(this.#d, 0), this.#d.position.set(-this.ctn.x, -this.ctn.y);
|
|
85
|
+
let t = () => {
|
|
86
86
|
let e = this.ctn.alpha;
|
|
87
87
|
this.ctn.alpha = 1;
|
|
88
88
|
for (let e of this.ctn.children) e.visible = !0;
|
|
89
|
-
this.#d.visible = !1,
|
|
89
|
+
this.#d.visible = !1, l.#e.renderer.render(this.ctn, { renderTexture: this.#u }), this.ctn.alpha = e;
|
|
90
90
|
for (let e of this.ctn.children) e.visible = !1;
|
|
91
91
|
};
|
|
92
92
|
if (!this.containMovement) {
|
|
93
|
-
let e =
|
|
94
|
-
|
|
95
|
-
|
|
93
|
+
let e = t;
|
|
94
|
+
t = () => {
|
|
95
|
+
t = () => {}, e();
|
|
96
96
|
};
|
|
97
97
|
}
|
|
98
98
|
this.#f = () => {
|
|
99
|
-
|
|
100
|
-
},
|
|
99
|
+
t(), this.#d.visible = !0;
|
|
100
|
+
}, l.#e.ticker.add(this.#f);
|
|
101
101
|
}
|
|
102
|
-
#u =
|
|
103
|
-
width:
|
|
104
|
-
height:
|
|
102
|
+
#u = r.create({
|
|
103
|
+
width: n.stageW,
|
|
104
|
+
height: n.stageH
|
|
105
105
|
});
|
|
106
|
-
#d = new
|
|
106
|
+
#d = new a();
|
|
107
107
|
#f = () => {};
|
|
108
108
|
renderEnd() {
|
|
109
|
-
|
|
109
|
+
l.#e.ticker.remove(this.#f), this.ctn.removeChild(this.#d);
|
|
110
110
|
for (let e of this.ctn.children) e.visible = !0;
|
|
111
|
-
this.#d.destroy(!0), this.#u =
|
|
112
|
-
width:
|
|
113
|
-
height:
|
|
111
|
+
this.#d.destroy(!0), this.#u = r.create({
|
|
112
|
+
width: n.stageW,
|
|
113
|
+
height: n.stageH
|
|
114
114
|
});
|
|
115
115
|
}
|
|
116
116
|
setPos(e) {
|
|
117
|
-
|
|
117
|
+
o.setXY(this.ctn.children[0] ?? this.ctn, e, this.ctn, !0);
|
|
118
118
|
}
|
|
119
119
|
get containMovement() {
|
|
120
120
|
if (this.#r === "") return !1;
|
|
121
121
|
let e = this.ctn.children;
|
|
122
|
-
return this.#r.split(",").some((
|
|
122
|
+
return this.#r.split(",").some((t, n) => e[n] instanceof i || c.getHFn2VElm(t));
|
|
123
123
|
}
|
|
124
124
|
clearLay(e) {
|
|
125
125
|
super.clearLay(e), this.#s.destroy(), this.#i = "", this.#a = "", this.#r = "";
|
|
@@ -129,23 +129,23 @@ var DesignCast = class {
|
|
|
129
129
|
sBkFn: this.#i,
|
|
130
130
|
sBkFace: this.#a
|
|
131
131
|
});
|
|
132
|
-
playback(e,
|
|
133
|
-
if (super.playback(e,
|
|
132
|
+
playback(e, t) {
|
|
133
|
+
if (super.playback(e, t), e.sBkFn === "" && e.sBkFace === "") {
|
|
134
134
|
this.#i = "", this.#a = "";
|
|
135
135
|
return;
|
|
136
136
|
}
|
|
137
|
-
|
|
137
|
+
t.push(new Promise((t) => this.#o({
|
|
138
138
|
fn: e.sBkFn,
|
|
139
139
|
face: e.sBkFace,
|
|
140
140
|
left: e.x,
|
|
141
141
|
top: e.y,
|
|
142
142
|
alpha: e.alpha,
|
|
143
|
-
blendmode:
|
|
143
|
+
blendmode: o.getNum2Blendmode(e.blendMode),
|
|
144
144
|
rotation: e.rotation,
|
|
145
145
|
scale_x: e.scale_x,
|
|
146
146
|
scale_y: e.scale_y
|
|
147
|
-
}, (
|
|
148
|
-
this.ctn.position.set(e.x, e.y),
|
|
147
|
+
}, (n) => {
|
|
148
|
+
this.ctn.position.set(e.x, e.y), t();
|
|
149
149
|
})));
|
|
150
150
|
}
|
|
151
151
|
makeDesignCast(e) {
|
|
@@ -159,6 +159,7 @@ var DesignCast = class {
|
|
|
159
159
|
}
|
|
160
160
|
dump = () => super.dump() + `, "pic":"${this.#r}"`;
|
|
161
161
|
};
|
|
162
|
-
|
|
162
|
+
//#endregion
|
|
163
|
+
export { d as GrpLayer, l as t };
|
|
163
164
|
|
|
164
165
|
//# sourceMappingURL=GrpLayer.js.map
|
package/dist/GrpLayer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GrpLayer.js","names":["bg_col: string","btn: Button","hArg: TArg","#appPixi","#idc","#setIdcSp","#laySub","#sBkFn","#csvFn","#sBkFace","#sps","#width","#height","#spTsy","#rtTsy","#fncRender"],"sources":["../src/sn/DesignCast.ts","../src/sn/GrpLayer.ts"],"sourcesContent":["/* ***** BEGIN LICENSE BLOCK *****\n\tCopyright (c) 2021-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_PropParser} from './CmnInterface';\nimport type {SysBase} from './SysBase';\nimport type {ScriptIterator} from './ScriptIterator';\nimport type {HPage} from './LayerMng';\nimport type {HPRM} from './AnalyzeTagArg';\nimport type {TxtStage} from './TxtStage';\nimport type {Button} from './Button';\nimport type {GrpLayer} from './GrpLayer';\nimport type {Config} from './Config';\n\nimport type {Application, Text, Sprite} from 'pixi.js';\n\n\nexport class DesignCast {\n\tstatic\tinit(_appPixi: Application, _sys: SysBase, _scrItr: ScriptIterator, _prpPrs: T_PropParser, _cfg: Config, _hPages: HPage) { /* empty */ }\n\tstatic\tcvsResizeDesign() { /* empty */ }\n//\tstatic\treadonly\t#alzTagArg\t= new AnalyzeTagArg;\n\n\n\tconstructor(readonly bg_col: string, readonly isLay = false) {}\n\tdestroy() { /* empty */ }\n\n\tgethArg(): TArg {return this.hArg}\n\tprotected\thArg\t: TArg\t= {};\n\tsethArg(hArg: TArg): void {\n\t\tthis.hArg = hArg;\n\t}\n\n\tsetOther(_hPrm: HPRM) { /* empty */ }\n\n\tadopt(_idcCh: DesignCast) {\t// 養子縁組\n\t}\n\n\tstatic\tenterMode() { /* empty */ }\n\tstatic\tallHide() { /* empty */ }\n\tset visible(_v: boolean) { /* empty */ }\n\tstatic\tleaveMode() { /* empty */ }\n\n\n\tcvsResize() { /* empty */ }\n\tmake() { /* empty */ }\n\tstatic replaceToken(_o: unknown) { /* empty */ }\n\n}\n\n\n// 画像レイヤ\nexport class GrpLayDesignCast extends DesignCast {\n\tconstructor(_ctn: Sprite, _gl: GrpLayer) {super('#29e', true)}\n\tsetSp(_sp: Sprite) { /* empty */ }\n}\n\n// 文字レイヤ\nexport class TxtLayDesignCast extends DesignCast {\n\tconstructor(_ctn: Sprite, _ts: TxtStage) {\n\t\tsuper('#29e', true);\n\t}\n}\n// 文字レイヤ・パディング\nexport class TxtLayPadDesignCast extends DesignCast {\n\tconstructor(_ts: TxtStage) {super('#9e2')}\n}\n\n// 文字レイヤ・ボタン基本\nexport class BtnDesignCast extends DesignCast {\n\tconstructor(protected readonly btn: Button, override readonly hArg: TArg) {\n\t\tsuper('#e92');\n\t}\n}\n// 文字レイヤ・文字ボタン\nexport class TxtBtnDesignCast extends BtnDesignCast {\n\tconstructor(btn: Button, hArg: TArg, _txt: Text) {\n\t\tsuper(btn, hArg);\n\t}\n}\n\n// 文字レイヤ・画像ボタン\nexport class PicBtnDesignCast extends BtnDesignCast {\n\tsetSp(_sp: Sprite) { /* empty */ }\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 {Layer, type T_RecordPlayBack_lay} from './Layer';\n\nimport {CmnLib, argChk_Boolean, argChk_Num} from './CmnLib';\nimport type {TArg} from './Grammar';\nimport type {T_Main, T_Variable} from './CmnInterface';\nimport type {Config} from './Config';\nimport type {SysBase} from './SysBase';\nimport type {SoundMng} from './SoundMng';\nimport type {IMakeDesignCast} from './LayerMng';\nimport {GrpLayDesignCast} from './DesignCast';\nimport {SpritesMng} from './SpritesMng';\nimport {Reading} from './Reading';\n\nimport {Sprite, AnimatedSprite, RenderTexture, type Application} from 'pixi.js';\n\n\nexport type T_RP_layGrp = T_RecordPlayBack_lay & {\n\tsBkFn\t: string;\n\tsBkFace\t: string;\n}\n\n\nexport class GrpLayer extends Layer {\n\tstatic\t#appPixi: Application;\n\tstatic\tinit(main: T_Main, cfg: Config, appPixi: Application, sys: SysBase, sndMng: SoundMng, val: T_Variable): void {\n\t\tGrpLayer.#appPixi = appPixi;\n\t\tSpritesMng.init(cfg, val, sys, main, sndMng);\n\t}\n\tstatic\tdestroy() {SpritesMng.destroy()}\n\n\treadonly\t#idc\t= new GrpLayDesignCast(this.ctn, this);\n\tconstructor() {\n\t\tsuper();\n\t\tif (CmnLib.isDbg) {\n\t\t\tthis.#setIdcSp = sp=> this.#idc.setSp(sp);\n\t\t\tthis.cvsResize = ()=> {super.cvsResize(); this.#idc.cvsResize()}\n\t\t}\n\t}\n\t#setIdcSp\t: (sp: Sprite)=> void\t= ()=> { /* empty */ };\n\n\t#csvFn\t\t= '';\n\t#sBkFn\t\t= '';\n\t#sBkFace\t= '';\n\toverride readonly\tlay = (hArg: TArg)=> {\n\t\tconst RPN_GRP_LAY = Reading.procID +`GrpLayer lay name:${this.name_}`;\n\t\tconst ret = this.#laySub(hArg, isStop=> {\n\t\t\tif (isStop) Reading.endProc(RPN_GRP_LAY);\n\t\t});\n\t\tif (ret) Reading.beginProc(RPN_GRP_LAY);\n\t\treturn ret;\n\t}\n\t#laySub(hArg: TArg, resolve: (isStop: boolean)=> void): boolean {\n\t\tconst {fn, face = ''} = hArg;\n\t\tthis.#idc.sethArg(hArg);\n\t\tif (! fn) {\n\t\t\tsuper.lay(hArg);\n\n\t\t\tif (this.ctn.children.length > 0) this.setPos(hArg);\n\t\t\tthis.#sBkFn = '';\n\t\t\tthis.#csvFn = this.#sBkFace = face;\n\t\t\tresolve(false);\n\t\t\treturn false;\n\t\t}\n\n\t\tconst inFn = 'fn' in hArg;\n\t\tconst inFace = 'face' in hArg;\n\n\t\tthis.clearLay({clear_filter: argChk_Boolean(hArg, 'clear_filter', true)});\n\t\tif (inFn) this.#sBkFn = fn;\t// clearLay()後に置く事\n\t\tif (inFace) this.#sBkFace = face;\n\t\tsuper.lay(hArg);\t// filter設定してる場合も\n\n\t\thArg.dx = 0;\n\t\thArg.dy = 0;\n\n\t\tthis.#sps.destroy();\n\t\tthis.#sps = new SpritesMng(\n\t\t\tthis.#csvFn = fn + (face ?','+ face :''),\n\t\t\tthis.ctn,\n\t\t\tsp=> {\n\t\t\t\tif ('width' in hArg || 'height' in hArg) {\n\t\t\t\t\tsp.width = argChk_Num(hArg, 'width', 0);\n\t\t\t\t\tsp.height = argChk_Num(hArg, 'height', 0);\n\t\t\t\t}\n\t\t\t\tthis.#width = sp.width;\n\t\t\t\tthis.#height = sp.height;\n\t\t\t\tLayer.setXY(sp, hArg, this.ctn, true);\n\t\t\t\tLayer.setBlendmode(this.ctn, hArg);\n\t\t\t//\tif (hArg.page === 'fore') this.rsvEvent(sp);\t// ======\n\t\t\t\t\t// [lay page=fore]のみswfアニメ終了イベント発生\n\t\t\t\tthis.#setIdcSp(sp);\n\t\t\t},\n\t\t\tisStop=> resolve(isStop),\n\t\t);\n\t\treturn this.#sps.ret;\n\t}\n\t#sps\t= new SpritesMng;\n\t#width\t= 0;\n\t#height\t= 0;\n\toverride\tget\twidth() {return this.#width}\n\toverride\tget\theight() {return this.#height}\n\n\n\toverride\trenderStart(isSkipping: boolean) {\n\t\tif (isSkipping) {\n\t\t\tconst a = this.ctn.alpha;\n\t\t\tthis.ctn.alpha = 1;\t// 無意味に思えるが、pixi部の挙動が変わるので一度やる\n\t\t\tthis.ctn.alpha = a;\n\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#spTsy = new Sprite(this.#rtTsy);\n\t\tthis.#spTsy.visible = false;\n\t\tthis.ctn.addChildAt(this.#spTsy, 0);\n\t\tthis.#spTsy.position.set(-this.ctn.x, -this.ctn.y);\n\n\t\tlet fncRenderFore = ()=> {\n\t\t\tconst a = this.ctn.alpha;\n\t\t\tthis.ctn.alpha = 1;\n\t\t\tfor (const s of this.ctn.children) s.visible = true;\n\t\t\tthis.#spTsy.visible = false;\n\t\t\tGrpLayer.#appPixi.renderer.render(this.ctn, {renderTexture: this.#rtTsy});\t// clear: true\n\t\t\tthis.ctn.alpha = a;\n\t\t\tfor (const s of this.ctn.children) s.visible = false;\n\t\t}\n\t\tif (! this.containMovement) {\n\t\t\tconst oldFnc = fncRenderFore;\t// 動きがないなら最初に一度\n\t\t\tfncRenderFore = ()=> {fncRenderFore = ()=> { /* empty */ }; oldFnc()};\n\t\t}\n\t\tthis.#fncRender = ()=> {\n\t\t\tfncRenderFore();\n\t\t\tthis.#spTsy.visible = true;\n\t\t};\n\t\tGrpLayer.#appPixi.ticker.add(this.#fncRender);\n\t}\n\t#rtTsy\t= RenderTexture.create({\n\t\twidth\t: CmnLib.stageW,\n\t\theight\t: CmnLib.stageH,\n\t});\n\t#spTsy\t= new Sprite;\n\t#fncRender = ()=> { /* empty */ };\n\toverride\trenderEnd() {\n\t\tGrpLayer.#appPixi.ticker.remove(this.#fncRender);\n\t\tthis.ctn.removeChild(this.#spTsy);\n\t\tfor (const s of this.ctn.children) s.visible = true;\n\t\tthis.#spTsy.destroy(true);\n\n\t\tthis.#rtTsy = RenderTexture.create({\n\t\t\twidth\t: CmnLib.stageW,\n\t\t\theight\t: CmnLib.stageH,\n\t\t});\n\t}\n\n\n\tsetPos(hArg: TArg): void {\n\t\tLayer.setXY(\n\t\t\tthis.ctn.children[0] ?? this.ctn,\n\t\t\thArg,\n\t\t\tthis.ctn,\n\t\t\ttrue\n\t\t);\n\t}\n\n\t// アニメ・動画を含むか\n\toverride get containMovement() {\n\t\tif (this.#csvFn === '') return false;\n\n\t\tconst c = this.ctn.children;\n\t\treturn this.#csvFn.split(',').some(\n\t\t\t(fn, i)=> c[i] instanceof AnimatedSprite || SpritesMng.getHFn2VElm(fn)\n\t\t);\n\t}\n\n\toverride clearLay(hArg: TArg): void {\n\t\tsuper.clearLay(hArg);\n\t\tthis.#sps.destroy();\n\t\tthis.#sBkFn\t\t= '';\n\t\tthis.#sBkFace\t= '';\n\t\tthis.#csvFn\t\t= '';\n\t}\n\toverride readonly record = ()=> ({...super.record(),\n\t\tsBkFn\t\t: this.#sBkFn,\n\t\tsBkFace\t\t: this.#sBkFace,\n//\t\tidc_hArg\t: this.#idc.gethArg(),\n\t});\n\toverride playback(hLay: T_RP_layGrp, aPrm: Promise<void>[]): void {\n\t\tsuper.playback(hLay, aPrm);\n\t\tif (hLay.sBkFn === '' && hLay.sBkFace === '') {\n\t\t\tthis.#sBkFn\t\t= '';\n\t\t\tthis.#sBkFace\t= '';\n//\t\t\tthis.#idc.sethArg(hLay.idc_hArg);\n\t\t\treturn;\n\t\t}\n\n\t\taPrm.push(new Promise(re=> this.#laySub(\n\t\t\t{fn: hLay.sBkFn, face: hLay.sBkFace, left: hLay.x, top: hLay.y, alpha: hLay.alpha, blendmode: Layer.getNum2Blendmode(hLay.blendMode), rotation: hLay.rotation, scale_x: hLay.scale_x, scale_y: hLay.scale_y},\n\t\t\t_isStop=> {this.ctn.position.set(hLay.x, hLay.y); re()},\n\t\t\t\t// Layer.setXY()の後に再度移動\n\t\t)));\n\t}\n\n\toverride makeDesignCast(gdc: IMakeDesignCast) {\n\t\tif (! this.ctn.visible) return;\n\t\tgdc(this.#idc);\n\t}\n\t//makeDesignCastChildren(_gdc: IMakeDesignCast) {}\n\n\toverride cvsResize() {super.cvsResize()}\n\n\toverride showDesignCast() {this.#idc.visible = true}\n\t//showDesignCastChildren() {}\n\n\toverride readonly dump = ()=> super.dump() +`, \"pic\":\"${this.#csvFn}\"`;\n\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"GrpLayer.js","names":["#appPixi","#idc","#setIdcSp","#laySub","#sBkFn","#csvFn","#sBkFace","#sps","#width","#height","#spTsy","#rtTsy","#fncRender"],"sources":["../src/sn/DesignCast.ts","../src/sn/GrpLayer.ts"],"sourcesContent":["/* ***** BEGIN LICENSE BLOCK *****\n\tCopyright (c) 2021-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_PropParser} from './CmnInterface';\nimport type {SysBase} from './SysBase';\nimport type {ScriptIterator} from './ScriptIterator';\nimport type {HPage} from './LayerMng';\nimport type {HPRM} from './AnalyzeTagArg';\nimport type {TxtStage} from './TxtStage';\nimport type {Button} from './Button';\nimport type {GrpLayer} from './GrpLayer';\nimport type {Config} from './Config';\n\nimport type {Application, Text, Sprite} from 'pixi.js';\n\n\nexport class DesignCast {\n\tstatic\tinit(_appPixi: Application, _sys: SysBase, _scrItr: ScriptIterator, _prpPrs: T_PropParser, _cfg: Config, _hPages: HPage) { /* empty */ }\n\tstatic\tcvsResizeDesign() { /* empty */ }\n//\tstatic\treadonly\t#alzTagArg\t= new AnalyzeTagArg;\n\n\n\tconstructor(readonly bg_col: string, readonly isLay = false) {}\n\tdestroy() { /* empty */ }\n\n\tgethArg(): TArg {return this.hArg}\n\tprotected\thArg\t: TArg\t= {};\n\tsethArg(hArg: TArg): void {\n\t\tthis.hArg = hArg;\n\t}\n\n\tsetOther(_hPrm: HPRM) { /* empty */ }\n\n\tadopt(_idcCh: DesignCast) {\t// 養子縁組\n\t}\n\n\tstatic\tenterMode() { /* empty */ }\n\tstatic\tallHide() { /* empty */ }\n\tset visible(_v: boolean) { /* empty */ }\n\tstatic\tleaveMode() { /* empty */ }\n\n\n\tcvsResize() { /* empty */ }\n\tmake() { /* empty */ }\n\tstatic replaceToken(_o: unknown) { /* empty */ }\n\n}\n\n\n// 画像レイヤ\nexport class GrpLayDesignCast extends DesignCast {\n\tconstructor(_ctn: Sprite, _gl: GrpLayer) {super('#29e', true)}\n\tsetSp(_sp: Sprite) { /* empty */ }\n}\n\n// 文字レイヤ\nexport class TxtLayDesignCast extends DesignCast {\n\tconstructor(_ctn: Sprite, _ts: TxtStage) {\n\t\tsuper('#29e', true);\n\t}\n}\n// 文字レイヤ・パディング\nexport class TxtLayPadDesignCast extends DesignCast {\n\tconstructor(_ts: TxtStage) {super('#9e2')}\n}\n\n// 文字レイヤ・ボタン基本\nexport class BtnDesignCast extends DesignCast {\n\tconstructor(protected readonly btn: Button, override readonly hArg: TArg) {\n\t\tsuper('#e92');\n\t}\n}\n// 文字レイヤ・文字ボタン\nexport class TxtBtnDesignCast extends BtnDesignCast {\n\tconstructor(btn: Button, hArg: TArg, _txt: Text) {\n\t\tsuper(btn, hArg);\n\t}\n}\n\n// 文字レイヤ・画像ボタン\nexport class PicBtnDesignCast extends BtnDesignCast {\n\tsetSp(_sp: Sprite) { /* empty */ }\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 {Layer, type T_RecordPlayBack_lay} from './Layer';\n\nimport {CmnLib, argChk_Boolean, argChk_Num} from './CmnLib';\nimport type {TArg} from './Grammar';\nimport type {T_Main, T_Variable} from './CmnInterface';\nimport type {Config} from './Config';\nimport type {SysBase} from './SysBase';\nimport type {SoundMng} from './SoundMng';\nimport type {IMakeDesignCast} from './LayerMng';\nimport {GrpLayDesignCast} from './DesignCast';\nimport {SpritesMng} from './SpritesMng';\nimport {Reading} from './Reading';\n\nimport {Sprite, AnimatedSprite, RenderTexture, type Application} from 'pixi.js';\n\n\nexport type T_RP_layGrp = T_RecordPlayBack_lay & {\n\tsBkFn\t: string;\n\tsBkFace\t: string;\n}\n\n\nexport class GrpLayer extends Layer {\n\tstatic\t#appPixi: Application;\n\tstatic\tinit(main: T_Main, cfg: Config, appPixi: Application, sys: SysBase, sndMng: SoundMng, val: T_Variable): void {\n\t\tGrpLayer.#appPixi = appPixi;\n\t\tSpritesMng.init(cfg, val, sys, main, sndMng);\n\t}\n\tstatic\tdestroy() {SpritesMng.destroy()}\n\n\treadonly\t#idc\t= new GrpLayDesignCast(this.ctn, this);\n\tconstructor() {\n\t\tsuper();\n\t\tif (CmnLib.isDbg) {\n\t\t\tthis.#setIdcSp = sp=> this.#idc.setSp(sp);\n\t\t\tthis.cvsResize = ()=> {super.cvsResize(); this.#idc.cvsResize()}\n\t\t}\n\t}\n\t#setIdcSp\t: (sp: Sprite)=> void\t= ()=> { /* empty */ };\n\n\t#csvFn\t\t= '';\n\t#sBkFn\t\t= '';\n\t#sBkFace\t= '';\n\toverride readonly\tlay = (hArg: TArg)=> {\n\t\tconst RPN_GRP_LAY = Reading.procID +`GrpLayer lay name:${this.name_}`;\n\t\tconst ret = this.#laySub(hArg, isStop=> {\n\t\t\tif (isStop) Reading.endProc(RPN_GRP_LAY);\n\t\t});\n\t\tif (ret) Reading.beginProc(RPN_GRP_LAY);\n\t\treturn ret;\n\t}\n\t#laySub(hArg: TArg, resolve: (isStop: boolean)=> void): boolean {\n\t\tconst {fn, face = ''} = hArg;\n\t\tthis.#idc.sethArg(hArg);\n\t\tif (! fn) {\n\t\t\tsuper.lay(hArg);\n\n\t\t\tif (this.ctn.children.length > 0) this.setPos(hArg);\n\t\t\tthis.#sBkFn = '';\n\t\t\tthis.#csvFn = this.#sBkFace = face;\n\t\t\tresolve(false);\n\t\t\treturn false;\n\t\t}\n\n\t\tconst inFn = 'fn' in hArg;\n\t\tconst inFace = 'face' in hArg;\n\n\t\tthis.clearLay({clear_filter: argChk_Boolean(hArg, 'clear_filter', true)});\n\t\tif (inFn) this.#sBkFn = fn;\t// clearLay()後に置く事\n\t\tif (inFace) this.#sBkFace = face;\n\t\tsuper.lay(hArg);\t// filter設定してる場合も\n\n\t\thArg.dx = 0;\n\t\thArg.dy = 0;\n\n\t\tthis.#sps.destroy();\n\t\tthis.#sps = new SpritesMng(\n\t\t\tthis.#csvFn = fn + (face ?','+ face :''),\n\t\t\tthis.ctn,\n\t\t\tsp=> {\n\t\t\t\tif ('width' in hArg || 'height' in hArg) {\n\t\t\t\t\tsp.width = argChk_Num(hArg, 'width', 0);\n\t\t\t\t\tsp.height = argChk_Num(hArg, 'height', 0);\n\t\t\t\t}\n\t\t\t\tthis.#width = sp.width;\n\t\t\t\tthis.#height = sp.height;\n\t\t\t\tLayer.setXY(sp, hArg, this.ctn, true);\n\t\t\t\tLayer.setBlendmode(this.ctn, hArg);\n\t\t\t//\tif (hArg.page === 'fore') this.rsvEvent(sp);\t// ======\n\t\t\t\t\t// [lay page=fore]のみswfアニメ終了イベント発生\n\t\t\t\tthis.#setIdcSp(sp);\n\t\t\t},\n\t\t\tisStop=> resolve(isStop),\n\t\t);\n\t\treturn this.#sps.ret;\n\t}\n\t#sps\t= new SpritesMng;\n\t#width\t= 0;\n\t#height\t= 0;\n\toverride\tget\twidth() {return this.#width}\n\toverride\tget\theight() {return this.#height}\n\n\n\toverride\trenderStart(isSkipping: boolean) {\n\t\tif (isSkipping) {\n\t\t\tconst a = this.ctn.alpha;\n\t\t\tthis.ctn.alpha = 1;\t// 無意味に思えるが、pixi部の挙動が変わるので一度やる\n\t\t\tthis.ctn.alpha = a;\n\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#spTsy = new Sprite(this.#rtTsy);\n\t\tthis.#spTsy.visible = false;\n\t\tthis.ctn.addChildAt(this.#spTsy, 0);\n\t\tthis.#spTsy.position.set(-this.ctn.x, -this.ctn.y);\n\n\t\tlet fncRenderFore = ()=> {\n\t\t\tconst a = this.ctn.alpha;\n\t\t\tthis.ctn.alpha = 1;\n\t\t\tfor (const s of this.ctn.children) s.visible = true;\n\t\t\tthis.#spTsy.visible = false;\n\t\t\tGrpLayer.#appPixi.renderer.render(this.ctn, {renderTexture: this.#rtTsy});\t// clear: true\n\t\t\tthis.ctn.alpha = a;\n\t\t\tfor (const s of this.ctn.children) s.visible = false;\n\t\t}\n\t\tif (! this.containMovement) {\n\t\t\tconst oldFnc = fncRenderFore;\t// 動きがないなら最初に一度\n\t\t\tfncRenderFore = ()=> {fncRenderFore = ()=> { /* empty */ }; oldFnc()};\n\t\t}\n\t\tthis.#fncRender = ()=> {\n\t\t\tfncRenderFore();\n\t\t\tthis.#spTsy.visible = true;\n\t\t};\n\t\tGrpLayer.#appPixi.ticker.add(this.#fncRender);\n\t}\n\t#rtTsy\t= RenderTexture.create({\n\t\twidth\t: CmnLib.stageW,\n\t\theight\t: CmnLib.stageH,\n\t});\n\t#spTsy\t= new Sprite;\n\t#fncRender = ()=> { /* empty */ };\n\toverride\trenderEnd() {\n\t\tGrpLayer.#appPixi.ticker.remove(this.#fncRender);\n\t\tthis.ctn.removeChild(this.#spTsy);\n\t\tfor (const s of this.ctn.children) s.visible = true;\n\t\tthis.#spTsy.destroy(true);\n\n\t\tthis.#rtTsy = RenderTexture.create({\n\t\t\twidth\t: CmnLib.stageW,\n\t\t\theight\t: CmnLib.stageH,\n\t\t});\n\t}\n\n\n\tsetPos(hArg: TArg): void {\n\t\tLayer.setXY(\n\t\t\tthis.ctn.children[0] ?? this.ctn,\n\t\t\thArg,\n\t\t\tthis.ctn,\n\t\t\ttrue\n\t\t);\n\t}\n\n\t// アニメ・動画を含むか\n\toverride get containMovement() {\n\t\tif (this.#csvFn === '') return false;\n\n\t\tconst c = this.ctn.children;\n\t\treturn this.#csvFn.split(',').some(\n\t\t\t(fn, i)=> c[i] instanceof AnimatedSprite || SpritesMng.getHFn2VElm(fn)\n\t\t);\n\t}\n\n\toverride clearLay(hArg: TArg): void {\n\t\tsuper.clearLay(hArg);\n\t\tthis.#sps.destroy();\n\t\tthis.#sBkFn\t\t= '';\n\t\tthis.#sBkFace\t= '';\n\t\tthis.#csvFn\t\t= '';\n\t}\n\toverride readonly record = ()=> ({...super.record(),\n\t\tsBkFn\t\t: this.#sBkFn,\n\t\tsBkFace\t\t: this.#sBkFace,\n//\t\tidc_hArg\t: this.#idc.gethArg(),\n\t});\n\toverride playback(hLay: T_RP_layGrp, aPrm: Promise<void>[]): void {\n\t\tsuper.playback(hLay, aPrm);\n\t\tif (hLay.sBkFn === '' && hLay.sBkFace === '') {\n\t\t\tthis.#sBkFn\t\t= '';\n\t\t\tthis.#sBkFace\t= '';\n//\t\t\tthis.#idc.sethArg(hLay.idc_hArg);\n\t\t\treturn;\n\t\t}\n\n\t\taPrm.push(new Promise(re=> this.#laySub(\n\t\t\t{fn: hLay.sBkFn, face: hLay.sBkFace, left: hLay.x, top: hLay.y, alpha: hLay.alpha, blendmode: Layer.getNum2Blendmode(hLay.blendMode), rotation: hLay.rotation, scale_x: hLay.scale_x, scale_y: hLay.scale_y},\n\t\t\t_isStop=> {this.ctn.position.set(hLay.x, hLay.y); re()},\n\t\t\t\t// Layer.setXY()の後に再度移動\n\t\t)));\n\t}\n\n\toverride makeDesignCast(gdc: IMakeDesignCast) {\n\t\tif (! this.ctn.visible) return;\n\t\tgdc(this.#idc);\n\t}\n\t//makeDesignCastChildren(_gdc: IMakeDesignCast) {}\n\n\toverride cvsResize() {super.cvsResize()}\n\n\toverride showDesignCast() {this.#idc.visible = true}\n\t//showDesignCastChildren() {}\n\n\toverride readonly dump = ()=> super.dump() +`, \"pic\":\"${this.#csvFn}\"`;\n\n}\n"],"mappings":"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"}
|