@famibee/skynovel 1.64.22 → 2.0.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/README.md +3 -3
- package/dist/Button.js +131 -163
- package/dist/Button.js.map +1 -1
- package/dist/CallStack.js +19 -22
- package/dist/CallStack.js.map +1 -1
- package/dist/CmnInterface.js +91 -0
- package/dist/CmnInterface.js.map +1 -0
- package/dist/CmnLib.js +94 -0
- package/dist/CmnLib.js.map +1 -0
- package/dist/Config.js +26 -0
- package/dist/Config.js.map +1 -0
- package/dist/ConfigBase.js +152 -0
- package/dist/ConfigBase.js.map +1 -0
- package/dist/DebugMng.js +89 -102
- package/dist/DebugMng.js.map +1 -1
- package/dist/EventListenerCtn.js +21 -0
- package/dist/EventListenerCtn.js.map +1 -0
- package/dist/EventMng.js +1435 -1577
- package/dist/EventMng.js.map +1 -1
- package/dist/Grammar.js +194 -0
- package/dist/Grammar.js.map +1 -0
- package/dist/GrpLayer.js +163 -195
- package/dist/GrpLayer.js.map +1 -1
- package/dist/Layer.js +260 -0
- package/dist/Layer.js.map +1 -0
- package/dist/LayerMng.js +810 -992
- package/dist/LayerMng.js.map +1 -1
- package/dist/Main.js +144 -393
- package/dist/Main.js.map +1 -1
- package/dist/PropParser.js +936 -834
- package/dist/PropParser.js.map +1 -1
- package/dist/Reading.js +918 -786
- package/dist/Reading.js.map +1 -1
- package/dist/RubySpliter.js +59 -89
- package/dist/RubySpliter.js.map +1 -1
- package/dist/ScriptIterator.js +805 -1035
- package/dist/ScriptIterator.js.map +1 -1
- package/dist/SndBuf.js +1097 -1326
- package/dist/SndBuf.js.map +1 -1
- package/dist/SoundMng.js +124 -135
- package/dist/SoundMng.js.map +1 -1
- package/dist/SpritesMng.js +220 -232
- package/dist/SpritesMng.js.map +1 -1
- package/dist/SysBase.js +1729 -0
- package/dist/SysBase.js.map +1 -0
- package/dist/TxtLayer.js +1212 -1398
- package/dist/TxtLayer.js.map +1 -1
- package/dist/Variable.js +398 -466
- package/dist/Variable.js.map +1 -1
- package/dist/chunk.js +18 -0
- package/dist/gamepad.js +723 -511
- package/dist/gamepad.js.map +1 -1
- package/dist/pixi.js +13422 -0
- package/dist/pixi.js.map +1 -0
- package/dist/platform.js +424 -369
- package/dist/platform.js.map +1 -1
- package/dist/sn/AnalyzeTagArg.d.ts +1 -1
- package/dist/sn/AnalyzeTagArg.d.ts.map +1 -1
- package/dist/sn/CmnInterface.d.ts +3 -1
- package/dist/sn/CmnInterface.d.ts.map +1 -1
- package/dist/sn/CmnLib.d.ts.map +1 -1
- package/dist/sn/CmnTween.d.ts +7 -7
- package/dist/sn/CmnTween.d.ts.map +1 -1
- package/dist/sn/EventMng.d.ts.map +1 -1
- package/dist/sn/FocusMng.d.ts.map +1 -1
- package/dist/sn/Grammar.d.ts +1 -1
- package/dist/sn/Grammar.d.ts.map +1 -1
- package/dist/sn/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/PropParser.d.ts +2 -2
- package/dist/sn/PropParser.d.ts.map +1 -1
- package/dist/sn/Reading.d.ts +7 -0
- package/dist/sn/Reading.d.ts.map +1 -1
- package/dist/sn/RubySpliter.d.ts.map +1 -1
- package/dist/sn/ScriptIterator.d.ts.map +1 -1
- package/dist/sn/SndBuf.d.ts +27 -16
- package/dist/sn/SndBuf.d.ts.map +1 -1
- package/dist/sn/SoundMng.d.ts +4 -1
- package/dist/sn/SoundMng.d.ts.map +1 -1
- package/dist/sn/SysBase.d.ts.map +1 -1
- package/dist/sn/TxtStage.d.ts +4 -1
- package/dist/sn/TxtStage.d.ts.map +1 -1
- package/dist/test/ValTest.d.ts +1 -1
- package/dist/test/ValTest.d.ts.map +1 -1
- package/dist/web.js +653 -8
- package/dist/web.js.map +1 -1
- package/dist_app/Button.js +131 -163
- package/dist_app/Button.js.map +1 -1
- package/dist_app/CallStack.js +19 -22
- package/dist_app/CallStack.js.map +1 -1
- package/dist_app/CmnInterface.js +91 -0
- package/dist_app/CmnInterface.js.map +1 -0
- package/dist_app/CmnLib.js +94 -0
- package/dist_app/CmnLib.js.map +1 -0
- package/dist_app/Config.js +26 -0
- package/dist_app/Config.js.map +1 -0
- package/dist_app/ConfigBase.js +152 -0
- package/dist_app/ConfigBase.js.map +1 -0
- package/dist_app/DebugMng.js +92 -0
- package/dist_app/DebugMng.js.map +1 -0
- package/dist_app/EventListenerCtn.js +21 -0
- package/dist_app/EventListenerCtn.js.map +1 -0
- package/dist_app/EventMng.js +1435 -1577
- package/dist_app/EventMng.js.map +1 -1
- package/dist_app/Grammar.js +194 -0
- package/dist_app/Grammar.js.map +1 -0
- package/dist_app/GrpLayer.js +163 -195
- package/dist_app/GrpLayer.js.map +1 -1
- package/dist_app/Layer.js +260 -0
- package/dist_app/Layer.js.map +1 -0
- package/dist_app/LayerMng.js +810 -992
- package/dist_app/LayerMng.js.map +1 -1
- package/dist_app/Main.js +144 -392
- package/dist_app/Main.js.map +1 -1
- package/dist_app/PropParser.js +936 -834
- package/dist_app/PropParser.js.map +1 -1
- package/dist_app/Reading.js +918 -786
- package/dist_app/Reading.js.map +1 -1
- package/dist_app/RubySpliter.js +59 -89
- package/dist_app/RubySpliter.js.map +1 -1
- package/dist_app/ScriptIterator.js +805 -1034
- package/dist_app/ScriptIterator.js.map +1 -1
- package/dist_app/SndBuf.js +1097 -1326
- package/dist_app/SndBuf.js.map +1 -1
- package/dist_app/SoundMng.js +124 -135
- package/dist_app/SoundMng.js.map +1 -1
- package/dist_app/SpritesMng.js +220 -231
- package/dist_app/SpritesMng.js.map +1 -1
- package/dist_app/SysBase.js +1729 -0
- package/dist_app/SysBase.js.map +1 -0
- package/dist_app/TxtLayer.js +1212 -1397
- package/dist_app/TxtLayer.js.map +1 -1
- package/dist_app/Variable.js +398 -466
- package/dist_app/Variable.js.map +1 -1
- package/dist_app/app.js +211 -8
- package/dist_app/app.js.map +1 -1
- package/dist_app/appMain.js +20 -21
- package/dist_app/appMain.js.map +1 -1
- package/dist_app/chunk.js +18 -0
- package/dist_app/gamepad.js +723 -511
- package/dist_app/gamepad.js.map +1 -1
- package/dist_app/pixi.js +11181 -0
- package/dist_app/pixi.js.map +1 -0
- package/dist_app/platform.js +424 -369
- package/dist_app/platform.js.map +1 -1
- package/dist_app/preload.js +2 -2
- package/dist_app/preload.js.map +1 -1
- package/dist_app/sn/AnalyzeTagArg.d.ts +1 -1
- package/dist_app/sn/AnalyzeTagArg.d.ts.map +1 -1
- package/dist_app/sn/CmnInterface.d.ts +3 -1
- package/dist_app/sn/CmnInterface.d.ts.map +1 -1
- package/dist_app/sn/CmnLib.d.ts.map +1 -1
- package/dist_app/sn/CmnTween.d.ts +7 -7
- package/dist_app/sn/CmnTween.d.ts.map +1 -1
- package/dist_app/sn/EventMng.d.ts.map +1 -1
- package/dist_app/sn/FocusMng.d.ts.map +1 -1
- package/dist_app/sn/Grammar.d.ts +1 -1
- package/dist_app/sn/Grammar.d.ts.map +1 -1
- package/dist_app/sn/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/PropParser.d.ts +2 -2
- package/dist_app/sn/PropParser.d.ts.map +1 -1
- package/dist_app/sn/Reading.d.ts +7 -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/ScriptIterator.d.ts.map +1 -1
- package/dist_app/sn/SndBuf.d.ts +27 -16
- package/dist_app/sn/SndBuf.d.ts.map +1 -1
- package/dist_app/sn/SoundMng.d.ts +4 -1
- package/dist_app/sn/SoundMng.d.ts.map +1 -1
- package/dist_app/sn/SysBase.d.ts.map +1 -1
- package/dist_app/sn/TxtStage.d.ts +4 -1
- package/dist_app/sn/TxtStage.d.ts.map +1 -1
- package/dist_app/test/ValTest.d.ts +1 -1
- package/dist_app/test/ValTest.d.ts.map +1 -1
- package/package.json +24 -14
- package/dist/CmnTween.js +0 -193
- package/dist/CmnTween.js.map +0 -1
- package/dist/web2.js +0 -21644
- package/dist/web2.js.map +0 -1
- package/dist_app/CmnTween.js +0 -193
- package/dist_app/CmnTween.js.map +0 -1
- package/dist_app/app2.js +0 -18547
- package/dist_app/app2.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CallStack.js","sources":["../src/sn/CallStack.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 type {T_HEvt2Fnc} from './CmnInterface';\nimport type {TArg} from './Grammar';\n\n\n// マクロ変数(mp:)\nexport type T_H_VAL_MP = {\n\t'const.sn.macro'\t\t\t: string;\t// (json)実行中マクロのスクリプター用情報\n\t'const.sn.me_call_scriptFn'\t: string;\t// マクロの呼び元スクリプト\n}\nexport function creMP(): T_H_VAL_MP {return {\n\t\t'const.sn.macro'\t\t\t: '{}',\n\t\t'const.sn.me_call_scriptFn'\t: '',\n}}\n\nexport type ICallStackArg = TArg & {\n\t':resvToken'?\t: string;\t\t// call元のtoken\n\t':hEvt1Time'?\t: T_HEvt2Fnc;\t// call元のローカル予約イベント\n\t':hMp'\t\t\t: T_H_VAL_MP;\t// call元のmp:\n\t':タグ名'?\t\t: string;\n\t':lenIfStk'\t\t: number;\n}\nexport function creCSArg(): ICallStackArg {return {\n\t':hEvt1Time': {},\n\t':hMp'\t\t: creMP(),\n\t':lenIfStk'\t: 1,\n}}\n\n\nexport class CallStack {\n\tconstructor(readonly fn = '', readonly idx = 0, readonly csArg: ICallStackArg = creCSArg()) {}\n\n\treadonly\ttoString = ()=> `[fn:${this.fn}, idx:${String(this.idx)}, csArg:${JSON.stringify(this.csArg)}]`;\n\n}\n"],"
|
|
1
|
+
{"version":3,"file":"CallStack.js","names":["csArg: ICallStackArg"],"sources":["../src/sn/CallStack.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 type {T_HEvt2Fnc} from './CmnInterface';\nimport type {TArg} from './Grammar';\n\n\n// マクロ変数(mp:)\nexport type T_H_VAL_MP = {\n\t'const.sn.macro'\t\t\t: string;\t// (json)実行中マクロのスクリプター用情報\n\t'const.sn.me_call_scriptFn'\t: string;\t// マクロの呼び元スクリプト\n}\nexport function creMP(): T_H_VAL_MP {return {\n\t\t'const.sn.macro'\t\t\t: '{}',\n\t\t'const.sn.me_call_scriptFn'\t: '',\n}}\n\nexport type ICallStackArg = TArg & {\n\t':resvToken'?\t: string;\t\t// call元のtoken\n\t':hEvt1Time'?\t: T_HEvt2Fnc;\t// call元のローカル予約イベント\n\t':hMp'\t\t\t: T_H_VAL_MP;\t// call元のmp:\n\t':タグ名'?\t\t: string;\n\t':lenIfStk'\t\t: number;\n}\nexport function creCSArg(): ICallStackArg {return {\n\t':hEvt1Time': {},\n\t':hMp'\t\t: creMP(),\n\t':lenIfStk'\t: 1,\n}}\n\n\nexport class CallStack {\n\tconstructor(readonly fn = '', readonly idx = 0, readonly csArg: ICallStackArg = creCSArg()) {}\n\n\treadonly\ttoString = ()=> `[fn:${this.fn}, idx:${String(this.idx)}, csArg:${JSON.stringify(this.csArg)}]`;\n\n}\n"],"mappings":"AAgBA,SAAgB,QAAoB;AAAC,QAAO;EAC1C,kBAAqB;EACrB,6BAA8B;EAC/B;;AASD,SAAgB,WAA0B;AAAC,QAAO;EACjD,cAAc,EAAE;EAChB,QAAU,OAAO;EACjB,aAAc;EACd;;AAGD,IAAa,YAAb,MAAuB;CACtB,YAAY,IAAc,IAAI,IAAe,GAAG,IAAgC,UAAU,EAAE;AAAnC,EAApC,KAAA,KAAA,GAAkB,KAAA,MAAA,GAAkB,KAAA,QAAA;;CAEzD,iBAAyB,OAAO,KAAK,GAAG,QAAQ,OAAO,KAAK,IAAI,CAAC,UAAU,KAAK,UAAU,KAAK,MAAM,CAAC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { t as CmnLib, u as getDateStr } from "./CmnLib.js";
|
|
2
|
+
function creSAVEDATA() {
|
|
3
|
+
return {
|
|
4
|
+
"sn.userFnTail": "",
|
|
5
|
+
"const.sn.autowc.enabled": !1,
|
|
6
|
+
"const.sn.autowc.text": "",
|
|
7
|
+
"const.sn.autowc.time": 0,
|
|
8
|
+
"const.sn.mesLayer": "",
|
|
9
|
+
"const.sn.styPaging": "color: yellow; text-shadow: 1px 1px 0 #000, -1px 1px 0 #000, 1px -1px 0 #000, -1px -1px 0 #000;",
|
|
10
|
+
"sn.doRecLog": !1,
|
|
11
|
+
"const.sn.sLog": "[]",
|
|
12
|
+
"const.sn.loopPlaying": "{}",
|
|
13
|
+
"const.sn.scriptFn": "",
|
|
14
|
+
"const.sn.scriptIdx": 0
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function creSYS_DATA() {
|
|
18
|
+
return {
|
|
19
|
+
"const.sn.cfg.ns": "",
|
|
20
|
+
"const.sn.aPageLog": "[]",
|
|
21
|
+
"const.sn.nativeWindow.x": 0,
|
|
22
|
+
"const.sn.nativeWindow.y": 0,
|
|
23
|
+
"const.sn.nativeWindow.w": CmnLib.stageW,
|
|
24
|
+
"const.sn.nativeWindow.h": CmnLib.stageH,
|
|
25
|
+
"const.sn.save.place": 1,
|
|
26
|
+
"const.sn.sound.BGM.volume": 1,
|
|
27
|
+
"const.sn.sound.SE.volume": 1,
|
|
28
|
+
"const.sn.sound.SYS.volume": 1,
|
|
29
|
+
"sn.auto.msecLineWait": 500,
|
|
30
|
+
"sn.auto.msecLineWait_Kidoku": 500,
|
|
31
|
+
"sn.auto.msecPageWait": 3500,
|
|
32
|
+
"sn.auto.msecPageWait_Kidoku": 3500,
|
|
33
|
+
"sn.skip.mode": "s",
|
|
34
|
+
"sn.sound.BGM.vol_mul_talking": 1,
|
|
35
|
+
"sn.sound.global_volume": (e, i) => 1,
|
|
36
|
+
"sn.sound.movie_volume": (e, i) => 1,
|
|
37
|
+
"sn.tagCh.canskip": !0,
|
|
38
|
+
"sn.tagCh.doWait": !0,
|
|
39
|
+
"sn.tagCh.doWait_Kidoku": !0,
|
|
40
|
+
"sn.tagCh.msecWait": 10,
|
|
41
|
+
"sn.tagCh.msecWait_Kidoku": 10,
|
|
42
|
+
"TextLayer.Back.Alpha": .5
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function creTMP_DATA() {
|
|
46
|
+
return {
|
|
47
|
+
"const.Date.getDateStr": () => getDateStr(),
|
|
48
|
+
"const.Date.getTime": () => (/* @__PURE__ */ new Date()).getTime(),
|
|
49
|
+
"const.sn.bookmark.json": "[]",
|
|
50
|
+
"const.sn.config.window.width": 0,
|
|
51
|
+
"const.sn.config.window.height": 0,
|
|
52
|
+
"const.sn.config.book.title": "",
|
|
53
|
+
"const.sn.config.book.version": "",
|
|
54
|
+
"const.sn.displayState": !1,
|
|
55
|
+
"const.sn.isApp": !1,
|
|
56
|
+
"const.sn.isDbg": !1,
|
|
57
|
+
"const.sn.isPackaged": !1,
|
|
58
|
+
"const.sn.isPaging": !1,
|
|
59
|
+
"const.sn.isDarkMode": !1,
|
|
60
|
+
"const.sn.isDebugger": !0,
|
|
61
|
+
"const.sn.isFirstBoot": !0,
|
|
62
|
+
"const.sn.isKidoku": !0,
|
|
63
|
+
"const.sn.key.alternate": !1,
|
|
64
|
+
"const.sn.key.back": !1,
|
|
65
|
+
"const.sn.key.command": !1,
|
|
66
|
+
"const.sn.key.control": !1,
|
|
67
|
+
"const.sn.key.end": !1,
|
|
68
|
+
"const.sn.key.escape": !1,
|
|
69
|
+
"const.sn.last_page_plain_text": "",
|
|
70
|
+
"const.sn.last_page_text": "",
|
|
71
|
+
"const.sn.Math.PI": Math.PI,
|
|
72
|
+
"const.sn.navigator.language": "jp",
|
|
73
|
+
"const.sn.needClick2Play": !1,
|
|
74
|
+
"const.sn.platform": CmnLib.platform,
|
|
75
|
+
"const.sn.screenResolutionX": screen.availWidth,
|
|
76
|
+
"const.sn.screenResolutionY": screen.availHeight,
|
|
77
|
+
"const.sn.sound.codecs": "",
|
|
78
|
+
"const.sn.aIfStk.length": 1,
|
|
79
|
+
"const.sn.vctCallStk.length": 0,
|
|
80
|
+
"sn.auto.enabled": !1,
|
|
81
|
+
"sn.button.fontFamily": "'Hiragino Sans', 'Hiragino Kaku Gothic ProN', '游ゴシック Medium', meiryo, sans-serif",
|
|
82
|
+
"sn.eventArg": "",
|
|
83
|
+
"sn.eventLabel": "",
|
|
84
|
+
"sn.skip.all": !1,
|
|
85
|
+
"sn.skip.enabled": !1,
|
|
86
|
+
"sn.tagL.enabled": !0
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
export { creSYS_DATA as n, creTMP_DATA as r, creSAVEDATA as t };
|
|
90
|
+
|
|
91
|
+
//# sourceMappingURL=CmnInterface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CmnInterface.js","names":[],"sources":["../src/sn/CmnInterface.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 type {T_HSysBaseArg, T_SEARCHPATH} from './ConfigBase';\nimport type {TArg, TTag} from './Grammar';\nimport type {Areas, T_H_Areas} from './Areas';\nimport type {T_H_VAL_MP} from './CallStack';\nimport type {Layer, T_RecordPlayBack_lay} from './Layer';\nimport {CmnLib, getDateStr} from './CmnLib';\n\nimport type {DisplayObject, RenderTexture} from 'pixi.js';\n\n\n// 特定のプロパティだけrequiredにする型を作ってみる #TypeScript - Qiita https://qiita.com/islandryu/items/490414a537c203b151f7\nexport type T_PRequired<T,K extends keyof T> = T & {\n\t[P in K]-?: T[P]\n}\n\n// =============== PropParser\nexport type T_PropParser = {\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tparse(s: string): any;\n\tgetValAmpersand(val: string): string;\n}\n\n\n// =============== Plugin\nexport type T_PLUGIN_DECAB_RET = {\n\text_num\t: number;\n\tab\t\t: ArrayBuffer;\n};\nexport type T_PLUGIN_INFO = {\n\twindow: {\n\t\twidth\t: number;\n\t\theight\t: number;\n\t},\n}\nexport type T_PluginInitArg = {\n\tgetInfo(): T_PLUGIN_INFO;\n\taddTag(tag_name: string, tag_fnc: TTag): void;\n\taddLayCls(cls: string, fnc: T_LayerFactory): void;\n\tsearchPath: T_SEARCHPATH;\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tgetVal(arg_name: string, def?: number | string): any;\n\tresume(fnc?: ()=> void): void;\n\trender(dsp: DisplayObject, renTx?: RenderTexture, clear?: boolean): void;\n\tsetDec(fnc: (ext: string, tx: string)=> Promise<string>): void;\n\tsetDecAB(fnc: (ab: ArrayBuffer)=> Promise<T_PLUGIN_DECAB_RET>): void;\n\tsetEnc(fnc: (tx: string)=> Promise<string>): void;\n\tgetStK(fnc: ()=> string): void;\n\tgetHash(fnc: (str: string)=> string): void;\n}\nexport type T_Plugin = {\n\tinit(pia: T_PluginInitArg): Promise<void>;\n}\nexport type T_HPlugin = {[name: string]: T_Plugin;}\n\nexport type T_LayerFactory = ()=> Layer\n\n\n// =============== SysBase\nexport type T_SysBaseParams = [\n\thPlg\t: T_HPlugin,\n\targ?\t: T_HSysBaseArg,\n];\nexport type T_SysBaseLoadedParams = [\n\thPlg\t: T_HPlugin,\n\targ\t\t: T_HSysBaseArg,\n];\n\n\nexport type SYS_DEC_RET = HTMLImageElement | HTMLVideoElement | ArrayBuffer;\nexport type T_SysBase = {\n\tinitVal(hTmp: T_H_TMP_DATA, comp: (data: T_Data4Vari)=> void): Promise<void>;\n\tflush(): void;\n\n\taddHook(fnc: T_FncHook): void;\n\tcallHook: T_FncHook;\n\tsend2Dbg: T_FncHook;\n\n\tcopyBMFolder(from: number, to: number): void;\n\teraseBMFolder(place: number): void;\n\n\tdestroy(): void;\n}\n\nexport type T_Fire = (KEY: string, e: Event)=> void;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type T_FncHook = (type: string, o: any)=> void;\n\n\n// =============== Main\nexport type T_Main = {\n\terrScript(mes: string, isThrow? :boolean): void;\n\tcvs\t\t\t: HTMLCanvasElement;\n\tresume(fnc?: ()=> void): void;\n\tresumeByJumpOrCall(hArg: TArg): void;\n\tstop(): void;\n\tsetLoop(v: boolean, mes?: string): void;\n\tdestroy(): void;\n}\n\n\n// =============== Variable\nexport type T_VAL_BSN = boolean | string | number;\nexport type T_VAL_BSNU = T_VAL_BSN | undefined;\n\n\n// 汎用的に変数\nexport type T_VAL_DATA = T_VAL_BSNU | null;\nexport type T_VAL_DATA_FNC = T_VAL_DATA | (()=> boolean) | (()=> string) | (()=> number)\nexport type T_H_VAL_DATA = {[val_name: string]: T_VAL_DATA_FNC}\n\n// セーブ変数(save:)\nexport type T_H_SAVE_DATA = {\n\t'sn.userFnTail'\t\t: string;\n\n\t'const.sn.autowc.enabled'\t: boolean;\n\t'const.sn.autowc.text'\t\t: string;\n\t'const.sn.autowc.time'\t\t: number;\n\t'const.sn.mesLayer'\t\t: string;\n\t// 'const.sn.sound.【buf】.fn'\t\t: string;\n\t// 'const.sn.sound.【buf】.volume'\t: number;\n\t'const.sn.styPaging'\t: string;\n\t'sn.doRecLog'\t\t\t: boolean;\n\t'const.sn.sLog'\t\t\t: string;\n\t'const.sn.loopPlaying'\t: string;\n\t'const.sn.scriptFn'\t\t: string;\n\t'const.sn.scriptIdx'\t: number;\n\t// 'const.sn.layer.(文字レイヤ名).enabled'\t: boolean;\n\n\t// [val_name: string]: T_VAL_DATA;\n}\nexport function creSAVEDATA(): T_H_SAVE_DATA {return {\n\t'sn.userFnTail'\t\t: '',\n\n\t'const.sn.autowc.enabled': false,// (文字ごとのウェイト)enabled属性で指定した値。\n\t'const.sn.autowc.text'\t: '',\t// (文字ごとのウェイト)同名属性で指定した値。\n\t'const.sn.autowc.time'\t: 0,\t// textとtimeは常に同数にすること\n\t'const.sn.mesLayer'\t: '',\t// デフォルト文字レイヤ\n\t// 'const.sn.sound.【buf】.fn'\t: '',\t// サウンドバッファの再生ファイル名\n\t// 'const.sn.sound.【buf】.volume'\t: 1,// サウンドバッファの目標音量\n\t'const.sn.styPaging'\t: 'color: yellow; text-shadow: 1px 1px 0 #000, -1px 1px 0 #000, 1px -1px 0 #000, -1px -1px 0 #000;',\n\t\t// ページ遷移中 CSS スタイル\n\t'sn.doRecLog'\t\t: false,\t// テキストを履歴に記録するか\n\t'const.sn.sLog'\t: '[]',\t// 履歴テキスト(JSON文字列)\n\t'const.sn.loopPlaying'\t: '{}',\t// ループ中のサウンドバッファ\n\t'const.sn.scriptFn'\t: '',\t// 最後に[record_place]したスクリプト名\n\t'const.sn.scriptIdx'\t: 0,\t// 最後に[record_place]したスクリプトインデックス(行番号ではなく内部トークン単位)\n\t// 'const.sn.layer.(文字レイヤ名).enabled'\t: true,\t// 文字レイヤのenabled値\n}}\n\n\n// システム変数(sys:)\nexport type T_H_SYS_DATA = {\n\t'const.sn.cfg.ns'\t\t\t: string;\t// [import]時のチェック用\n\n\t'const.sn.aPageLog'\t\t\t: string;\t// ページ遷移用情報(JSON文字列)\n\t'const.sn.nativeWindow.x'\t: number;\t// 実数;横座標\n\t'const.sn.nativeWindow.y'\t: number;\t// 実数;縦座標\n\t'const.sn.nativeWindow.w'\t: number;\t// 実数;横幅\n\t'const.sn.nativeWindow.h'\t: number;\t// 実数;縦幅\n\t'const.sn.save.place'\t\t: number;\t// 次のセーブplaceを示す\n\t'const.sn.sound.BGM.volume'\t: number;\t// BGMの基準音量(buf=\"BGM\"の効果音)\n\t'const.sn.sound.SE.volume'\t: number;\t// 効果音の基準音量(buf=\"SE\"の効果音)\n\t'const.sn.sound.SYS.volume'\t: number;\t// システムの基準音量(buf=\"SYS\"の効果音)\n\t// 'const.sn.sound.【buf】.volume'\t: number;\t// システムの基準音量(buf=\"【buf】\"の効果音)\n\t'sn.auto.msecLineWait'\t\t: number;\t// 未読テキストの改行待ち時間(ミリ秒)\n\t'sn.auto.msecLineWait_Kidoku': number;\t// 既読テキストの改行待ち時間(ミリ秒)\n\t'sn.auto.msecPageWait'\t\t: number;\t// 未読テキストの改ページ待ち時間(ミリ秒)\n\t'sn.auto.msecPageWait_Kidoku': number;\t// 既読テキストの改ページ待ち時間(ミリ秒)\n\t'sn.skip.mode'\t\t\t\t: string;\t// スキップモード。\n\t'sn.sound.BGM.vol_mul_talking': number;\t// ボイス(VOICEバッファの音声)再生中のBGM音量への乗数\n\t'sn.sound.global_volume'\t: T_fncSetVal;\t// 全体的な音量を設定する\n\t'sn.sound.movie_volume'\t\t: T_fncSetVal;\t// ムービー音量を設定する\n\t'sn.tagCh.canskip'\t\t\t: boolean;\t// テキストをクリックなどでスキップ可能か\n\t'sn.tagCh.doWait'\t\t\t: boolean;\t// 未読テキストにウェイトを掛けるか\n\t'sn.tagCh.doWait_Kidoku'\t: boolean;\t// 既読テキストにウェイトを掛けるか\n\t'sn.tagCh.msecWait'\t\t\t: number;\t// 未読テキスト待ち時間(ミリ秒)\n\t'sn.tagCh.msecWait_Kidoku'\t: number;\t// 既読テキスト待ち時間(ミリ秒)\n\t'TextLayer.Back.Alpha'\t\t: number;\t// バック不透明度。テキストウインドウの背景の濃\n\n\t// [val_name: string]\t\t: T_VAL_DATA;\n}\nexport function creSYS_DATA(): T_H_SYS_DATA {return {\n\t'const.sn.cfg.ns'\t\t\t: '',\t// [import]時のチェック用\n\n\t'const.sn.aPageLog'\t\t\t: '[]',\t// ページ遷移用情報(JSON文字列)\n\t'const.sn.nativeWindow.x'\t: 0,\t// 実数;横座標\n\t'const.sn.nativeWindow.y'\t: 0,\t// 実数;縦座標\n\t'const.sn.nativeWindow.w'\t: CmnLib.stageW,\t// 実数;横幅\n\t'const.sn.nativeWindow.h'\t: CmnLib.stageH,\t// 実数;縦幅\n\t'const.sn.save.place'\t\t: 1,\t// 次のセーブplaceを示す\n\t'const.sn.sound.BGM.volume'\t: 1,\t// BGMの基準音量(buf=\"BGM\"の効果音)\n\t'const.sn.sound.SE.volume'\t: 1,\t// 効果音の基準音量(buf=\"SE\"の効果音)\n\t'const.sn.sound.SYS.volume'\t: 1,\t// システムの基準音量(buf=\"SYS\"の効果音)\n\t// 'const.sn.sound.【buf】.volume': 1,\t// システムの基準音量(buf=\"【buf】\"の効果音)\n\t'sn.auto.msecLineWait'\t\t: 500,\t// 未読テキストの改行待ち時間(ミリ秒)\n\t'sn.auto.msecLineWait_Kidoku': 500,\t// 既読テキストの改行待ち時間(ミリ秒)\n\t'sn.auto.msecPageWait'\t\t: 3500,\t// 未読テキストの改ページ待ち時間(ミリ秒)\n\t'sn.auto.msecPageWait_Kidoku': 3500,// 既読テキストの改ページ待ち時間(ミリ秒)\n\t'sn.skip.mode'\t\t\t\t: 's',\t// スキップモード。\n\t'sn.sound.BGM.vol_mul_talking': 1.0,// ボイス(VOICEバッファの音声)再生中のBGM音量への乗数\n\t'sn.sound.global_volume'\t: (_, _2)=> 1,\t// 全体的な音量を設定する\n\t'sn.sound.movie_volume'\t\t: (_, _2)=> 1,\t// ムービー音量を設定する\n\t'sn.tagCh.canskip'\t\t\t: true,\t// テキストをクリックなどでスキップ可能か\n\t'sn.tagCh.doWait'\t\t\t: true,\t// 未読テキストにウェイトを掛けるか\n\t'sn.tagCh.doWait_Kidoku'\t: true,\t// 既読テキストにウェイトを掛けるか\n\t'sn.tagCh.msecWait'\t\t\t: 10,\t// 未読テキスト待ち時間(ミリ秒)\n\t'sn.tagCh.msecWait_Kidoku'\t: 10,\t// 既読テキスト待ち時間(ミリ秒)\n\t'TextLayer.Back.Alpha'\t\t: 0.5,\t// バック不透明度。テキストウインドウの背景の濃度。0.0で透明、1.0で不透明\n}}\n\n\n// 雑用変数(tmp:)\nexport type T_H_TMP_DATA = {\n\t'const.Date.getDateStr'\t\t: ()=> string;\n\t'const.Date.getTime'\t\t: ()=> number;\n\t'const.sn.bookmark.json'\t: string;\n\n\t// 'const.sn.config.(略)'\t\t: string;\n\t'const.sn.config.window.width'\t: number;\n\t'const.sn.config.window.height'\t: number;\n\t'const.sn.config.book.title'\t: string;\n\t'const.sn.config.book.version'\t: string;\n\n\t'const.sn.displayState'\t: boolean;\n\t\t\t// const.flash.display.Stage.displayState\n\n\t// 'const.sn.frm.(フレーム名)'\t\t: boolean;\n\t// 'const.sn.frm.(フレーム名).alpha'\t: number;\n\t// 'const.sn.frm.(フレーム名).x'\t\t: number;\n\t// 'const.sn.frm.(フレーム名).y'\t\t: number;\n\t// 'const.sn.frm.(フレーム名).scale_x'\t: number;\n\t// 'const.sn.frm.(フレーム名).scale_y'\t: number;\n\t// 'const.sn.frm.(フレーム名).rotate'\t\t: number;\n\t// 'const.sn.frm.(フレーム名).width'\t\t: number;\n\t// 'const.sn.frm.(フレーム名).height'\t\t: number;\n\t// 'const.sn.frm.(フレーム名).visible'\t: boolean;\n\n\t'const.sn.isApp'\t: boolean;\n\t'const.sn.isDbg'\t: boolean;\n\t'const.sn.isPackaged'\t: boolean;\n\t'const.sn.isPaging'\t\t: boolean;\n\t'const.sn.isDarkMode'\t: boolean;\n\t'const.sn.isDebugger'\t: boolean;\n\t'const.sn.isFirstBoot'\t: boolean;\n\t'const.sn.isKidoku'\t\t: boolean;\n\t'const.sn.key.alternate': boolean;\n\t'const.sn.key.back'\t\t: boolean;\n\t'const.sn.key.command'\t: boolean;\n\t'const.sn.key.control'\t: boolean;\n\t'const.sn.key.end'\t\t: boolean;\n\t'const.sn.key.escape'\t: boolean;\n\t'const.sn.last_page_plain_text'\t: string;\n\t'const.sn.last_page_text'\t\t: string;\n\t// 'const.sn.lay.(レイヤ名)'\t\t\t\t\t\t: boolean;\n\t// 'const.sn.lay.(レイヤ名).(foreかback).alpha'\t: number;\n\t// 'const.sn.lay.(レイヤ名).(foreかback).width'\t: number;\n\t// 'const.sn.lay.(レイヤ名).(foreかback).height'\t: number;\n\t// 'const.sn.lay.(レイヤ名).(foreかback).visible'\t: boolean;\n\t// 'const.sn.lay.(レイヤ名).(foreかback).x'\t\t: number;\n\t// 'const.sn.lay.(レイヤ名).(foreかback).y'\t\t: number;\n\t'const.sn.Math.PI'\t\t: number;\n\t'const.sn.navigator.language'\t: string;\n\t'const.sn.needClick2Play'\t\t: boolean;\n\t'const.sn.platform'\t\t\t\t: string;\n\t'const.sn.screenResolutionX'\t: number;\n\t'const.sn.screenResolutionY'\t: number;\n\t'const.sn.sound.codecs'\t\t\t: string;\n\t// 'const.sn.sound.【buf】.playing': boolean;\n\t'const.sn.aIfStk.length'\t\t: number;\n\t'const.sn.vctCallStk.length'\t: number;\n\t'sn.auto.enabled'\t\t: boolean;\n\t'sn.button.fontFamily'\t: string;\n\t// 'sn.event.domdata.(任意)'\t: string;\n\t'sn.eventArg'\t\t: string;\n\t'sn.eventLabel'\t\t: string;\n\t'sn.skip.all'\t\t: boolean;\n\t'sn.skip.enabled'\t: boolean;\n\t'sn.tagL.enabled'\t: boolean;\n}\nexport function creTMP_DATA(): T_H_TMP_DATA {return {\n\t'const.Date.getDateStr'\t\t: ()=> getDateStr(),\t// 変数参照時の日時を返す\n\t'const.Date.getTime'\t\t: ()=> (new Date).getTime(),\n\t'const.sn.bookmark.json'\t: '[]',\t// SKYNovel内部によるsave:の管理用\n\n\t// 'const.sn.config.(略)'\t: ,\t// prj.jsonの内容を返す\n\t'const.sn.config.window.width'\t: 0,\n\t'const.sn.config.window.height'\t: 0,\n\t'const.sn.config.book.title'\t: '',\n\t'const.sn.config.book.version'\t: '',\n\n\t'const.sn.displayState'\t\t: false,\t// ウインドウ・フルスクリーン状態。trueならフルスクリーン\n\n\t// 'const.sn.frm.(フレーム名)'\t: true,\t// [add_frame]でロードされた id属性が存在するか\n\t// 'const.sn.frm.(フレーム名).alpha'\t: 1,\t// フレームの不透明度\n\t// 'const.sn.frm.(フレーム名).x'\t\t: 0,\t// フレームの座標。画面左上を(0, 0)とする座標。leftやtopでないことに注意\n\t// 'const.sn.frm.(フレーム名).y'\t\t: 0,\t// 実数;縦座標\n\t// 'const.sn.frm.(フレーム名).scale_x': 1,\t// cssでのtransform: scaleの値\n\t// 'const.sn.frm.(フレーム名).scale_y': 1,\t// cssでのtransform: scaleの値\n\t// 'const.sn.frm.(フレーム名).rotate'\t: 0,\t// cssでのrotate、回転角度(単位:deg 度)、正の値は時計回り\n\t// 'const.sn.frm.(フレーム名).width'\t: prjのアプリ横幅画面サイズ,\t// フレームの横幅\n\t// 'const.sn.frm.(フレーム名).height'\t: prjのアプリ縦幅画面サイズ,\t// フレームの縦幅\n\t// 'const.sn.frm.(フレーム名).visible': true,\t// フレームが表示されているか。visible属性の値を返す\n\n\t'const.sn.isApp'\t\t: false,\t// アプリ版か\n\t'const.sn.isDbg'\t\t: false,\t// デバッグモードか\n\t'const.sn.isPackaged'\t: false,\t// パッケージされたアプリか(Electron API - app.isPackaged)\n\t'const.sn.isPaging'\t\t: false,\t// ページ遷移状態か\n\t'const.sn.isDarkMode'\t: false,\t// ダークモードか\n\t'const.sn.isDebugger'\t: true,\t\t// ブラウザ実行、それもVSCode・npmによる「起動:ブラウザ版」上での実行か\n\t'const.sn.isFirstBoot'\t: true,\t\t// ゲームがインストールされてから、初めての起動か(起動されるまでデータが空だったか)\n\t'const.sn.isKidoku'\t\t: true,\t\t// この変数を参照した位置は既読か。参照「後」必ず既読になる点に注意\n\t'const.sn.key.alternate': false,\t// ALTキー(MacならOptionキー)が押されているか\n\t'const.sn.key.back'\t\t: false,\t// back 〃\n\t'const.sn.key.command'\t: false,\t// command 〃\n\t'const.sn.key.control'\t: false,\t// control 〃\n\t'const.sn.key.end'\t\t: false,\t// end 〃\n\t'const.sn.key.escape'\t: false,\t// escape 〃\n\t'const.sn.last_page_plain_text'\t: '',\t// そのページの履歴テキスト(《》文法とルビを含まない)\n\t'const.sn.last_page_text'\t\t: '',\t// そのページの履歴テキスト(《》文法もそのまま)\n\t// 'const.sn.lay.(レイヤ名)'\t\t: true,\t// レイヤが[add_lay]され存在するか\n\t// 'const.sn.lay.(レイヤ名).(foreかback).alpha'\t\t: 0.0〜1.0,\t// レイヤの不透明度\n\t// 'const.sn.lay.(レイヤ名).(foreかback).width'\t\t: 1,\t// レイヤの横幅。ただし文字レイヤの場合は1、画像レイヤの場合、画像読込後でないと0\n\t// 'const.sn.lay.(レイヤ名).(foreかback).height'\t\t: 1,\t// レイヤの縦幅。ただし文字レイヤの場合は1、画像レイヤの場合、画像読込後でないと0\n\t// 'const.sn.lay.(レイヤ名).(foreかback).visible'\t\t: true,\t// レイヤが表示されているか。visible属性の値を返す\n\t// 'const.sn.lay.(レイヤ名).(foreかback).x'\t\t: 0,\t// 実数;横座標</td><td rowspan=\"2\">レイヤの座標。画面左上を(0, 0)とする座標。leftやtopでないことに注意\n\t// 'const.sn.lay.(レイヤ名).(foreかback).y'\t\t: 0,\t// 実数;縦座標\n\t'const.sn.Math.PI'\t\t: Math.PI,\t// 円周率\n\t'const.sn.navigator.language': 'jp',\t// ユーザーが最優先に設定している言語設定\n\t'const.sn.needClick2Play'\t: false,\n\t\t// ブラウザ実行で、クリックされるまで音声再生が差し止められている状態か。なにかクリックされれば falseになる\n\t'const.sn.platform'\t\t\t: CmnLib.platform,\t// 環境による\n\n\t'const.sn.screenResolutionX': screen.availWidth,\t// 画面の最大水平解像度\n\t'const.sn.screenResolutionY': screen.availHeight,\t// 画面の最大垂直解像度\n\t\t// ここでは正確な値は分からない。保存していた前回終了時の位置にウインドウを動かしてから、そのディスプレイののサイズを取得するまでは。\n\n\t'const.sn.sound.codecs'\t\t: '',\t// ゲーム実行環境がどのコーデックをサポートしているか\n\t// 'const.sn.sound.【buf】.playing'\t\t: 再生状態による,\t// サウンドバッファが再生中か<br/>\n\t'const.sn.aIfStk.length'\t: 1,\t// IFスタックの深さ([if]するたびに増)\n\t'const.sn.vctCallStk.length': 0,\t// コールスタックの深さ([call]するたびに増)\n\t'sn.auto.enabled'\t\t: false,\t// 自動読みすすみモードかどうか\n\t'sn.button.fontFamily'\t: '\\'Hiragino Sans\\', \\'Hiragino Kaku Gothic ProN\\', \\'游ゴシック Medium\\', meiryo, sans-serif',\t// 文字ボタンフォントを指定\n\t// 'sn.event.domdata.(任意)'\t\t: ''[event]でフレーム内のHTML要素に登録したイベントで、そのイベント発生時、HTML要素のdata-(任意)属性で指定された値。使い道は開発者が自由に決めていい\n\t'sn.eventArg'\t\t: '',\t// [button]等のイベント発生時、そのボタンタグのarg属性で指定された値。使い道は開発者が自由に決めていい\n\t'sn.eventLabel'\t\t: '',\t// [button]等のイベント発生時、そのボタンタグのlabel属性で指定された値。使い道は開発者が自由に決めていい\n\t'sn.skip.all'\t\t: false,\t// false(初期値)なら既読のみをスキップ\n\t'sn.skip.enabled'\t: false,\t// 次の選択肢(/未読)まで進む が有効か\n\t'sn.tagL.enabled'\t: true,\t\t// 頁末まで一気に読み進むか(l無視)\n}}\n\n\nexport type Scope = 'tmp'|'save'|'sys'|'mp';\n\nexport type T_ProcVal = ()=> T_VAL_BSN;\n\nexport type T_fncSetVal = (arg_name: string, val: T_VAL_BSN, autocast?: boolean)=> void;\n\nexport type T_Variable = {\n\tinit(): Promise<void>;\n\tflush(): void;\n\tsetDoRecProc(doRecProc: (doRec: boolean)=> void): void;\n\n\tgetVal(arg_name: string, def?: number | string, touch?: boolean): T_VAL_DATA;\n\tsetVal_Nochk(scope: Scope, nm: string, val: T_VAL_BSNU, autocast?: boolean): void;\n\n\tdefTmp(name: string, fnc: T_ProcVal): void;\n\tcloneMp(): T_H_VAL_MP;\n\tsetMp(mp: T_H_VAL_MP): void;\n\tsetMark(place: number, mark: T_Mark): void;\n\tgetMark(place: number): T_Mark | undefined;\n\tcloneSave(): T_H_SAVE_DATA;\n\tmark2save(mark: T_Mark): void;\n\n\ttouchAreaKidoku(fn: string): Areas;\n\tgetAreaKidoku(fn: string): Areas | undefined;\n\tsaveKidoku(): void;\n\tupdateData(data: T_Data4Vari): void;\n\n\tdefValTrg(name: string, fnc: T_fncSetVal): void;\n\n\tdoRecLog(): boolean;\n\n\tget tagCh_doWait(): boolean;\n\tget tagCh_doWait_Kidoku(): boolean;\n\tget tagCh_msecWait(): number;\n\tget tagCh_msecWait_Kidoku(): number;\n}\n\nexport type T_H_VAL_MARK\t= {[place: number]: T_Mark};\nexport type T_H_VAL_KIDOKU\t= {[fn: string]: T_H_Areas};\n\n\nexport type T_Data4Vari = {\n\tsys\t\t: T_H_SYS_DATA;\n\tmark\t: T_H_VAL_MARK;\n\tkidoku\t: T_H_VAL_KIDOKU;\n}\n\nexport type T_Mark = {\n\thSave\t: T_H_SAVE_DATA;\n\thPages\t: T_HPage;\n\taIfStk\t: number[];\n\tjson?\t: TArg;\n}\n\n\n// =============== EventMng\nexport type T_Evt2Fnc\t= (e: Event)=> void;\nexport type T_HEvt2Fnc\t= {[name: string]: T_Evt2Fnc;};\n\n\n// =============== FrameMng, LayerMng\nexport type T_GetFrm = {\n\tgetFrmDisabled\t: (id: string)=> boolean;\n};\n\n\n// =============== Pages\nexport type T_HPage = {[name: string]: T_Page};\nexport type T_Page = {\n\tcls\t\t: string;\n\tfore\t: T_RecordPlayBack_lay;\n\tback\t: T_RecordPlayBack_lay;\n}\n\n\n// =============== RubySpliter\nexport type T_PutCh = (ch: string, ruby: string)=> void\n\n\n// =============== Volume change event notification (GrpLayer)\nexport type T_NoticeChgVolume = (vol: number)=> void\n"],"mappings":";AAyIA,SAAgB,cAA6B;AAAC,QAAO;EACpD,iBAAmB;EAEnB,2BAA2B;EAC3B,wBAAyB;EACzB,wBAAyB;EACzB,qBAAsB;EAGtB,sBAAuB;EAEvB,eAAiB;EACjB,iBAAkB;EAClB,wBAAyB;EACzB,qBAAsB;EACtB,sBAAuB;EAEvB;;AAkCD,SAAgB,cAA4B;AAAC,QAAO;EACnD,mBAAsB;EAEtB,qBAAwB;EACxB,2BAA4B;EAC5B,2BAA4B;EAC5B,2BAA4B,OAAO;EACnC,2BAA4B,OAAO;EACnC,uBAAyB;EACzB,6BAA8B;EAC9B,4BAA6B;EAC7B,6BAA8B;EAE9B,wBAA0B;EAC1B,+BAA+B;EAC/B,wBAA0B;EAC1B,+BAA+B;EAC/B,gBAAoB;EACpB,gCAAgC;EAChC,2BAA4B,GAAG,MAAM;EACrC,0BAA4B,GAAG,MAAM;EACrC,oBAAuB;EACvB,mBAAsB;EACtB,0BAA2B;EAC3B,qBAAwB;EACxB,4BAA6B;EAC7B,wBAA0B;EAC1B;;AAuED,SAAgB,cAA4B;AAAC,QAAO;EACnD,+BAAgC,YAAY;EAC5C,6CAA8B,IAAI,MAAI,EAAE,SAAS;EACjD,0BAA2B;EAG3B,gCAAiC;EACjC,iCAAkC;EAClC,8BAA+B;EAC/B,gCAAiC;EAEjC,yBAA2B;EAa3B,kBAAoB;EACpB,kBAAoB;EACpB,uBAAwB;EACxB,qBAAuB;EACvB,uBAAwB;EACxB,uBAAwB;EACxB,wBAAyB;EACzB,qBAAuB;EACvB,0BAA0B;EAC1B,qBAAuB;EACvB,wBAAyB;EACzB,wBAAyB;EACzB,oBAAsB;EACtB,uBAAwB;EACxB,iCAAkC;EAClC,2BAA6B;EAQ7B,oBAAsB,KAAK;EAC3B,+BAA+B;EAC/B,2BAA4B;EAE5B,qBAAwB,OAAO;EAE/B,8BAA8B,OAAO;EACrC,8BAA8B,OAAO;EAGrC,yBAA2B;EAE3B,0BAA2B;EAC3B,8BAA8B;EAC9B,mBAAqB;EACrB,wBAAyB;EAEzB,eAAiB;EACjB,iBAAmB;EACnB,eAAiB;EACjB,mBAAoB;EACpB,mBAAoB;EACpB"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { r as __toDynamicImportESM } from "./chunk.js";
|
|
2
|
+
function int(e) {
|
|
3
|
+
return parseInt(String(e), 10);
|
|
4
|
+
}
|
|
5
|
+
function uint(e) {
|
|
6
|
+
let g = parseInt(String(e), 10);
|
|
7
|
+
return g < 0 ? -g : g;
|
|
8
|
+
}
|
|
9
|
+
function getDateStr(e = "/", g = " ", _ = ":", v = "") {
|
|
10
|
+
let y = /* @__PURE__ */ new Date();
|
|
11
|
+
return String(y.getFullYear()) + e + String(100 + y.getMonth() + 1).slice(1, 3) + e + String(100 + y.getDate()).slice(1, 3) + g + String(100 + y.getHours()).slice(1, 3) + _ + String(100 + y.getMinutes()).slice(1, 3) + (v === "" ? "" : v + String(y.getMilliseconds()));
|
|
12
|
+
}
|
|
13
|
+
var css_key4del = "/* SKYNovel */";
|
|
14
|
+
function initStyle() {
|
|
15
|
+
let e = document.getElementsByTagName("head")[0], g = e.children.length;
|
|
16
|
+
for (let _ = g - 1; _ >= 0; --_) {
|
|
17
|
+
let g = e.children[_];
|
|
18
|
+
g instanceof HTMLStyleElement && g.innerText.startsWith(css_key4del) && e.removeChild(g);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function addStyle(e) {
|
|
22
|
+
let g = document.createElement("style");
|
|
23
|
+
g.innerHTML = css_key4del + e, document.getElementsByTagName("head")[0].appendChild(g);
|
|
24
|
+
}
|
|
25
|
+
const EVNM_BUTTON = "pointerdown", EVNM_CLICK = "pointerdown", EVNM_KEY = "keydown", RPN_COMP_CHIN = "compChIn";
|
|
26
|
+
function argChk_Num(e, g, _) {
|
|
27
|
+
let v = e[g];
|
|
28
|
+
if (!(g in e)) {
|
|
29
|
+
if (isNaN(_)) throw `[${e[":タグ名"] ?? ""}]属性 ${g} は必須です`;
|
|
30
|
+
return e[g] = _, _;
|
|
31
|
+
}
|
|
32
|
+
let y = String(v).startsWith("0x") ? parseInt(v) : parseFloat(v);
|
|
33
|
+
if (isNaN(y)) throw `[${e[":タグ名"] ?? ""}]属性 ${g} の値【${String(v)}】が数値ではありません`;
|
|
34
|
+
return e[g] = y, y;
|
|
35
|
+
}
|
|
36
|
+
function argChk_Boolean(e, g, _) {
|
|
37
|
+
if (!(g in e)) return e[g] = _, _;
|
|
38
|
+
let v = e[g];
|
|
39
|
+
if (v === null) return !1;
|
|
40
|
+
let y = String(v);
|
|
41
|
+
return e[g] = y === "false" ? !1 : !!y;
|
|
42
|
+
}
|
|
43
|
+
function parseColor(e) {
|
|
44
|
+
if (e.startsWith("#")) return parseInt(e.slice(1), 16);
|
|
45
|
+
let g = Number(e);
|
|
46
|
+
if (!isNaN(g)) return g;
|
|
47
|
+
if (e === "black") return 0;
|
|
48
|
+
CmnLib.cc4ColorName.fillStyle = e;
|
|
49
|
+
let _ = CmnLib.cc4ColorName.fillStyle;
|
|
50
|
+
if (_ === "#000000") throw `色名前 ${e} が異常です`;
|
|
51
|
+
return parseInt(_.slice(1), 16);
|
|
52
|
+
}
|
|
53
|
+
function argChk_Color(e, g, _) {
|
|
54
|
+
let v = e[g];
|
|
55
|
+
return v ? e[g] = parseColor(String(v)) : (e[g] = _, _);
|
|
56
|
+
}
|
|
57
|
+
var REG_ERRMES_JSON = /JSON at position (\d+)$/;
|
|
58
|
+
function mesErrJSON(e, g = "", _ = "") {
|
|
59
|
+
let v = (REG_ERRMES_JSON.exec(_) ?? ["", ""])[1];
|
|
60
|
+
return `[${e[":タグ名"] ?? ""}] ${g} 属性の解析エラー : ${_}
|
|
61
|
+
${String(e[g])}${v ? `
|
|
62
|
+
${"^".padStart(Number(v))}` : ""}`;
|
|
63
|
+
}
|
|
64
|
+
var REG_FN = /^[^/.]+$|[^/]+(?=\.)/;
|
|
65
|
+
function getFn(e) {
|
|
66
|
+
return (REG_FN.exec(e) ?? [""])[0];
|
|
67
|
+
}
|
|
68
|
+
var CmnLib = class g {
|
|
69
|
+
static async init() {
|
|
70
|
+
let g = await import("./platform.js").then(__toDynamicImportESM());
|
|
71
|
+
this.platform = JSON.stringify(g), this.plat_desc = g.description ?? "", this.isSafari = g.name === "Safari", this.isFirefox = g.name === "Firefox", this.isMac = (g.os?.family ?? "").includes("OS X"), this.isMobile = !/(Windows|OS X)/.test(g.os?.family ?? "");
|
|
72
|
+
}
|
|
73
|
+
static stageW = 0;
|
|
74
|
+
static stageH = 0;
|
|
75
|
+
static debugLog = !1;
|
|
76
|
+
static platform;
|
|
77
|
+
static plat_desc;
|
|
78
|
+
static isSafari;
|
|
79
|
+
static isFirefox;
|
|
80
|
+
static isMac;
|
|
81
|
+
static isMobile;
|
|
82
|
+
static hDip = {};
|
|
83
|
+
static isDbg = !1;
|
|
84
|
+
static isPackaged = !1;
|
|
85
|
+
static needClick2Play() {
|
|
86
|
+
return "AudioContext" in globalThis ? (g.#e = new globalThis.AudioContext(), g.needClick2Play = () => g.#e.state === "suspended") : g.needClick2Play = () => !1, g.needClick2Play();
|
|
87
|
+
}
|
|
88
|
+
static #e;
|
|
89
|
+
static isDarkMode = !1;
|
|
90
|
+
static cc4ColorName;
|
|
91
|
+
};
|
|
92
|
+
export { RPN_COMP_CHIN as a, argChk_Color as c, getFn as d, initStyle as f, uint as g, parseColor as h, EVNM_KEY as i, argChk_Num as l, mesErrJSON as m, EVNM_BUTTON as n, addStyle as o, int as p, EVNM_CLICK as r, argChk_Boolean as s, CmnLib as t, getDateStr as u };
|
|
93
|
+
|
|
94
|
+
//# sourceMappingURL=CmnLib.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CmnLib.js","names":["#ac"],"sources":["../src/sn/CmnLib.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 type {TArg} from './Grammar';\n\n// =============== Global\nexport function int(o: unknown): number {return parseInt(String(o), 10)}\nexport function uint(o: unknown): number {\n\tconst v = parseInt(String(o), 10);\n\treturn v < 0 ? -v : v;\n}\n\nexport function getDateStr(spl_dd = '/', spl_dt = ' ', spl_tt = ':', spl_ms = ''): string {\n\tconst now = new Date;\n\treturn String(now.getFullYear())\n\t\t+ spl_dd+ String(100 +now.getMonth() +1).slice(1, 3)\n\t\t+ spl_dd+ String(100 +now.getDate()).slice(1, 3)\n\t\t+ spl_dt+ String(100 +now.getHours()).slice(1, 3)\n\t\t+ spl_tt+ String(100 +now.getMinutes()).slice(1, 3)\n\t\t+ (spl_ms === '' ?'' :spl_ms+ String(now.getMilliseconds()));\n}\n\n\nconst\tcss_key4del\t= '/* SKYNovel */';\nexport function initStyle() {\n\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\tconst he = document.getElementsByTagName('head')[0]!;\n\tconst len = he.children.length;\n\tfor (let i=len -1; i>=0; --i) {\n\t\tconst v = he.children[i];\n\t\tif (! (v instanceof HTMLStyleElement)) continue;\n\t\tif (! v.innerText.startsWith(css_key4del)) continue;\n\t\the.removeChild(v);\n\t}\n}\nexport function addStyle(style: string) {\n\tconst gs = document.createElement('style');\n\tgs.innerHTML = css_key4del + style;\n\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\tdocument.getElementsByTagName('head')[0]!.appendChild(gs);\n}\n\n\n\n// =============== EventMng\nexport const EVNM_BUTTON= 'pointerdown';\nexport const EVNM_CLICK\t= 'pointerdown';\nexport const EVNM_KEY\t= 'keydown';\n\nimport type {Container} from 'pixi.js';\nexport type IEvtMng = {\n\tbutton(hArg: TArg, ctnBtn: Container, normal: ()=> void, hover: ()=> boolean, clicked: ()=> void): void;\n\tunButton(em: Container): void;\n\tget\tisSkipping(): boolean;\n\thideHint(): void;\n\tcvsResize(): void;\n\n\tresvFlameEvent(body: HTMLBodyElement): void;\n}\n\n\n\n// =============== ScriptIterator\nexport\tconst\tRPN_COMP_CHIN = 'compChIn';\n\n\n\ntype T_HASH_Arg = {\n\t':タグ名'?\t: string;\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t[name: string]: any;\n};\n\nexport\tfunction argChk_Num(hash: T_HASH_Arg, name: string, def: number): number {\n\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\tconst v = hash[name];\n\tif (! (name in hash)) {\n\t\tif (isNaN(def)) throw `[${hash[':タグ名'] ?? ''}]属性 ${name} は必須です`;\n\n\t\thash[name] = def;\n\t\treturn def;\n\t}\n\n\tconst n = String(v).startsWith('0x')\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\t\t? parseInt(v)\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\t\t: parseFloat(v);\n\tif (isNaN(n)) throw `[${hash[':タグ名'] ?? ''}]属性 ${name} の値【${String(v)}】が数値ではありません`;\n\n\thash[name] = n;\n\treturn n;\n}\n\n/*\n\tそれぞれの型を Boolean 型に変換した場合の値は以下のようになります。\n\n\tUndefiend \tfalse\n\tNull \t\tfalse\n\tBoolean \t変換前のオブジェクトと同じ\n\tNumber \t\t0 または NaN は false それ以外の値は true\n\tString \t\t空文字列は false それ以外の値は true\n\tObject \t\ttrue\n*/\nexport\tfunction argChk_Boolean(hash: T_HASH_Arg, name: string, def: boolean): boolean {\n\t//\tt-r-a-c-e(Boolean(null),Boolean(\"\"),Boolean(undefined),Boolean(\"0\"),Boolean(\"1\"),Boolean(\"true\"),Boolean(\"false\"),Boolean(\"あい\"));\n\t//\t[exec] false false false true true true true true\n\t/*console.log('%o %o %o %o %o %o %o %o',\n\t\tBoolean(null), Boolean(\"\"), Boolean(undefined), Boolean(\"0\"), Boolean(\"1\"),\n\t\tBoolean(\"true\"), Boolean(\"false\"), Boolean(\"あい\"));\n\t*/\n\n\t//if (! hArg[name]) return hArg[name] = def;\n\tif (! (name in hash)) {hash[name] = def; return def;}\n\n\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\tconst v = hash[name];\n\tif (v === null) return false;\n\n\tconst v2 = String(v);\n\tconst ret = hash[name] = v2 === 'false'? false : Boolean(v2);\n\treturn ret;\n}\n\n\nexport function parseColor(v: string): number {\n\tif (v.startsWith('#')) return parseInt(v.slice(1), 16);\n\tconst n = Number(v);\n\tif (! isNaN(n)) return n;\t// 0, 0xffffff\n\n\tif (v === 'black') return 0;\n\tCmnLib.cc4ColorName.fillStyle = v;\n\tconst cc = CmnLib.cc4ColorName.fillStyle;\n\tif (cc === '#000000') throw `色名前 ${v} が異常です`;\n\n\treturn parseInt(cc.slice(1), 16);\n}\nexport\tfunction argChk_Color(hash: T_HASH_Arg, name: string, def: number): number {\n\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\tconst v = hash[name];\n\tif (! v) {hash[name] = def; return def;}\n\n\tconst ret = hash[name] = parseColor(String(v));\n\treturn ret;\n}\n\n\nconst REG_ERRMES_JSON = /JSON at position (\\d+)$/;\n\t// Unexpected number in JSON at position\nexport\tfunction mesErrJSON(hArg: TArg, nm = '', mes = ''): string {\n\tconst col = (REG_ERRMES_JSON.exec(mes) ?? ['',''])[1];\n\treturn `[${hArg[':タグ名'] ?? ''}] ${nm} 属性の解析エラー : ${mes}\n${\n\t// eslint-disable-next-line @typescript-eslint/no-base-to-string\n\tString(hArg[<keyof TArg>nm])\n}${col ?`\n${'^'.padStart(Number(col))}` :''}`;\n}\n\n\nconst REG_FN\t= /^[^/.]+$|[^/]+(?=\\.)/;\n\t// https://regex101.com/r/8sltIm/1\nexport\tfunction getFn(p: string) {return (REG_FN.exec(p) ?? [''])[0]}\n\nexport type T_DIP = {[name: string]: string};\n\n//import {isMobile} from 'pixi.js';\t\t// 使い物にならないことを確認済み\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nexport class CmnLib {\n\tstatic\tasync\tinit() {\n\t\tconst p = await import('platform');\n\t\tthis.platform\t= JSON.stringify(p);\n\t\tthis.plat_desc\t= p.description ?? '';\n\t\tthis.isSafari\t= p.name === 'Safari';\n\t\tthis.isFirefox\t= p.name === 'Firefox';\n\t\tthis.isMac\t\t= (p.os?.family ?? '').includes('OS X');\n\t\tthis.isMobile\t= ! /(Windows|OS X)/.test(p.os?.family ?? '');\n\t}\n\n\tstatic\tstageW\t\t= 0;\n\tstatic\tstageH\t\t= 0;\n\tstatic\tdebugLog\t= false;\n\tstatic\tplatform\t: string;\n\tstatic\tplat_desc\t: string;\n\tstatic\tisSafari\t: boolean;\n\tstatic\tisFirefox\t: boolean;\n\tstatic\tisMac\t\t: boolean;\n\tstatic\tisMobile\t: boolean;\n\tstatic\thDip\t\t: T_DIP\t= {};\n\tstatic\tisDbg\t\t= false;\n\tstatic\tisPackaged\t= false;\n\n\tstatic\tneedClick2Play(): boolean {\n\t\tif ('AudioContext' in globalThis) {\n\t\t\tCmnLib.#ac = new globalThis.AudioContext;\n\t\t\tCmnLib.needClick2Play = ()=> CmnLib.#ac.state === 'suspended';\n\t\t}\n\t\telse CmnLib.needClick2Play = ()=> false;\n\n\t\treturn CmnLib.needClick2Play();\n\t}\n\tstatic\t#ac: AudioContext;\n\n\tstatic\tisDarkMode\t= false;\n\n\tstatic\tcc4ColorName: CanvasRenderingContext2D;\n\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { t as CmnLib } from "./CmnLib.js";
|
|
2
|
+
import { n as SEARCH_PATH_ARG_EXT, t as ConfigBase } from "./ConfigBase.js";
|
|
3
|
+
const PROTOCOL_USERDATA = "userdata:/", PROTOCOL_DL = "downloads:/";
|
|
4
|
+
var Config = class r extends ConfigBase {
|
|
5
|
+
static async generate(e) {
|
|
6
|
+
let t = new r(e), n = e.arg.cur + "prj.json", i = await e.fetch(n);
|
|
7
|
+
if (!i.ok) throw Error(i.statusText);
|
|
8
|
+
let a = await e.dec(n, await i.text());
|
|
9
|
+
return await t.load(JSON.parse(a)), t;
|
|
10
|
+
}
|
|
11
|
+
constructor(e) {
|
|
12
|
+
super(e), this.sys = e;
|
|
13
|
+
}
|
|
14
|
+
async load(t) {
|
|
15
|
+
return t.window ??= {
|
|
16
|
+
width: 300,
|
|
17
|
+
height: 300
|
|
18
|
+
}, CmnLib.stageW = t.window.width, CmnLib.stageH = t.window.height, CmnLib.debugLog = t.debug.debugLog, await CmnLib.init(), super.load(t);
|
|
19
|
+
}
|
|
20
|
+
searchPath(e, n = SEARCH_PATH_ARG_EXT.DEFAULT) {
|
|
21
|
+
return e.startsWith("downloads:/") ? this.sys.path_downloads + e.slice(11) : e.startsWith("userdata:/") ? this.sys.path_userdata + "storage/" + e.slice(10) : super.searchPath(e, n);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
export { PROTOCOL_DL as n, PROTOCOL_USERDATA as r, Config as t };
|
|
25
|
+
|
|
26
|
+
//# sourceMappingURL=Config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Config.js","names":["sys: SysBase"],"sources":["../src/sn/Config.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"],"mappings":";;AAWA,MAAa,oBAAoB,cACpB,cAAe;AAG5B,IAAa,SAAb,MAAa,UAAe,WAAW;CACtC,aAAa,SAAS,GAAc;EACnC,IAAM,IAAI,IAAI,EAAO,EAAI,EACnB,IAAK,EAAI,IAAI,MAAK,YAClB,IAAM,MAAM,EAAI,MAAM,EAAG;AAC/B,MAAI,CAAE,EAAI,GAAI,OAAM,MAAM,EAAI,WAAW;EAEzC,IAAM,IAAM,MAAM,EAAI,IAAI,GAAI,MAAM,EAAI,MAAM,CAAC;AAE/C,SADA,MAAM,EAAE,KAAgB,KAAK,MAAM,EAAI,CAAC,EACjC;;CAGR,YAAsB,GAAgC;AAAd,EAAe,MAAM,EAAI,EAAzB,KAAA,MAAA;;CAExC,MAAyB,KAAK,GAAiB;AAO9C,SANA,EAAK,WAAW;GAAC,OAAO;GAAK,QAAQ;GAAI,EACzC,OAAO,SAAS,EAAK,OAAO,OAC5B,OAAO,SAAS,EAAK,OAAO,QAC5B,OAAO,WAAW,EAAK,MAAM,UAC7B,MAAM,OAAO,MAAM,EAEZ,MAAM,KAAK,EAAK;;CAGxB,WAAoB,GAAY,IAA8B,oBAAoB,SAAiB;AAQlG,SAPI,EAAG,WAAA,cAAuB,GACtB,KAAK,IAAI,iBAAiB,EAAG,MAAM,GAAG,GAE1C,EAAG,WAAA,aAA6B,GAC5B,KAAK,IAAI,gBAAgB,aAAY,EAAG,MAAM,GAAG,GAGlD,MAAM,WAAW,GAAI,EAAO"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { p as int } from "./CmnLib.js";
|
|
2
|
+
let SEARCH_PATH_ARG_EXT = /* @__PURE__ */ function(e) {
|
|
3
|
+
return e.DEFAULT = "", e.SP_GSM = "png|jpg|jpeg|json|svg|webp|mp4|webm", e.SCRIPT = "sn|ssn", e.FONT = "woff2|woff|otf|ttf", e.SOUND = "mp3|m4a|ogg|aac|flac|wav", e.HTML = "htm|html", e.CSS = "css", e.SN = "sn", e.TST_PNGPNG_ = "png|png_", e.TST_HH = "hh", e.TST_EEE = "eee", e.TST_GGG = "ggg", e.TST_PNGXML = "png|xml", e;
|
|
4
|
+
}({});
|
|
5
|
+
function creCFG() {
|
|
6
|
+
return {
|
|
7
|
+
save_ns: "",
|
|
8
|
+
window: {
|
|
9
|
+
width: 300,
|
|
10
|
+
height: 300
|
|
11
|
+
},
|
|
12
|
+
book: {
|
|
13
|
+
title: "",
|
|
14
|
+
creator: "",
|
|
15
|
+
cre_url: "",
|
|
16
|
+
publisher: "",
|
|
17
|
+
pub_url: "",
|
|
18
|
+
detail: "",
|
|
19
|
+
version: "1.0"
|
|
20
|
+
},
|
|
21
|
+
log: { max_len: 64 },
|
|
22
|
+
init: {
|
|
23
|
+
bg_color: "#000000",
|
|
24
|
+
tagch_msecwait: 10,
|
|
25
|
+
auto_msecpagewait: 3500,
|
|
26
|
+
escape: ""
|
|
27
|
+
},
|
|
28
|
+
debug: {
|
|
29
|
+
devtool: !1,
|
|
30
|
+
dumpHtm: !1,
|
|
31
|
+
token: !1,
|
|
32
|
+
tag: !1,
|
|
33
|
+
putCh: !1,
|
|
34
|
+
debugLog: !1,
|
|
35
|
+
baseTx: !1,
|
|
36
|
+
masume: !1,
|
|
37
|
+
variable: !1
|
|
38
|
+
},
|
|
39
|
+
code: {},
|
|
40
|
+
debuger_token: ""
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
var ConfigBase = class {
|
|
44
|
+
oCfg = creCFG();
|
|
45
|
+
userFnTail = "";
|
|
46
|
+
hPathFn2Exts = {};
|
|
47
|
+
constructor(e) {
|
|
48
|
+
this.sys = e;
|
|
49
|
+
}
|
|
50
|
+
async load(e) {
|
|
51
|
+
this.oCfg.save_ns = e.save_ns ?? this.oCfg.save_ns, e.window ??= {
|
|
52
|
+
width: 300,
|
|
53
|
+
height: 300
|
|
54
|
+
}, this.oCfg.window.width = e.window.width, this.oCfg.window.height = e.window.height, this.oCfg.book = {
|
|
55
|
+
...this.oCfg.book,
|
|
56
|
+
...e.book
|
|
57
|
+
}, this.oCfg.log.max_len = e.log?.max_len ?? this.oCfg.log.max_len, this.oCfg.init = {
|
|
58
|
+
...this.oCfg.init,
|
|
59
|
+
...e.init
|
|
60
|
+
}, this.oCfg.debug = {
|
|
61
|
+
...this.oCfg.debug,
|
|
62
|
+
...e.debug
|
|
63
|
+
}, this.oCfg.debuger_token = e.debuger_token;
|
|
64
|
+
let n = this.sys.arg.cur + "path.json", r = await this.sys.fetch(n);
|
|
65
|
+
if (!r.ok) throw Error(r.statusText);
|
|
66
|
+
let i = await r.text(), a = JSON.parse(await this.sys.dec(n, i));
|
|
67
|
+
for (let [e, t] of Object.entries(a)) {
|
|
68
|
+
let n = this.hPathFn2Exts[e] = t;
|
|
69
|
+
for (let [e, t] of Object.entries(n)) e !== ":cnt" && (n[e] = this.sys.arg.cur + t);
|
|
70
|
+
}
|
|
71
|
+
this.#e = this.matchPath("^breakline$", SEARCH_PATH_ARG_EXT.SP_GSM).length > 0, this.#t = this.matchPath("^breakpage$", SEARCH_PATH_ARG_EXT.SP_GSM).length > 0;
|
|
72
|
+
let o = {};
|
|
73
|
+
if (this.sys.arg.crypto) for (let [e, t] of Object.entries(this.hPathFn2Exts)) for (let [n, r] of Object.entries(t)) {
|
|
74
|
+
if (!n.startsWith(":")) {
|
|
75
|
+
o[e] = n;
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
if (!n.endsWith(":id")) continue;
|
|
79
|
+
let i = r.slice(r.lastIndexOf("/") + 1), a = t[n.slice(0, -10)] ?? "", s = await (await this.sys.fetch(a)).text();
|
|
80
|
+
if (i !== this.sys.hash(s)) throw `ファイル改竄エラーです fn:${a}`;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
#e = !1;
|
|
84
|
+
get existsBreakline() {
|
|
85
|
+
return this.#e;
|
|
86
|
+
}
|
|
87
|
+
#t = !1;
|
|
88
|
+
get existsBreakpage() {
|
|
89
|
+
return this.#t;
|
|
90
|
+
}
|
|
91
|
+
get headNs() {
|
|
92
|
+
return `skynovel.${this.oCfg.save_ns} - `;
|
|
93
|
+
}
|
|
94
|
+
#n = /([^/\s]+)\.([^\d]\w+)/;
|
|
95
|
+
searchPath(n, r = SEARCH_PATH_ARG_EXT.DEFAULT) {
|
|
96
|
+
if (!n) throw "[searchPath] fnが空です";
|
|
97
|
+
if (n.startsWith("http://")) return n;
|
|
98
|
+
let i = n.match(this.#n), a = i ? i[1] ?? "" : n, o = i ? i[2] : "";
|
|
99
|
+
if (this.userFnTail) {
|
|
100
|
+
let e = a + "@@" + this.userFnTail;
|
|
101
|
+
if (e in this.hPathFn2Exts) {
|
|
102
|
+
if (r === SEARCH_PATH_ARG_EXT.DEFAULT) a = e;
|
|
103
|
+
else for (let t of Object.keys(this.hPathFn2Exts[e] ?? {})) if (`|${r}|`.includes(`|${t}|`)) {
|
|
104
|
+
a = e;
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
let s = this.hPathFn2Exts[a];
|
|
110
|
+
if (!s) throw `サーチパスに存在しないファイル【${n}】です`;
|
|
111
|
+
if (!o) {
|
|
112
|
+
let i = int(s[":cnt"]);
|
|
113
|
+
if (r === SEARCH_PATH_ARG_EXT.DEFAULT) {
|
|
114
|
+
if (i > 1) throw `指定ファイル【${n}】が複数マッチします。サーチ対象拡張子群【${r}】で絞り込むか、ファイル名を個別にして下さい。`;
|
|
115
|
+
return n;
|
|
116
|
+
}
|
|
117
|
+
let a = `|${r}|`;
|
|
118
|
+
if (i > 1) {
|
|
119
|
+
let e = 0;
|
|
120
|
+
for (let t of Object.keys(s)) if (a.includes(`|${t}|`) && ++e > 1) throw `指定ファイル【${n}】が複数マッチします。サーチ対象拡張子群【${r}】で絞り込むか、ファイル名を個別にして下さい。`;
|
|
121
|
+
}
|
|
122
|
+
for (let [e, t] of Object.entries(s)) if (a.includes(`|${e}|`)) return t;
|
|
123
|
+
throw `サーチ対象拡張子群【${r}】にマッチするファイルがサーチパスに存在しません。探索ファイル名=【${n}】`;
|
|
124
|
+
}
|
|
125
|
+
if (r !== SEARCH_PATH_ARG_EXT.DEFAULT && !`|${r}|`.includes(`|${o}|`)) throw `指定ファイルの拡張子【${o}】は、サーチ対象拡張子群【${r}】にマッチしません。探索ファイル名=【${n}】`;
|
|
126
|
+
let c = s[o];
|
|
127
|
+
if (!c) throw `サーチパスに存在しない拡張子【${o}】です。探索ファイル名=【${n}】、サーチ対象拡張子群【${r}】`;
|
|
128
|
+
return c;
|
|
129
|
+
}
|
|
130
|
+
matchPath(e, n = SEARCH_PATH_ARG_EXT.DEFAULT) {
|
|
131
|
+
let r = [], i = new RegExp(e), a = new RegExp(n);
|
|
132
|
+
for (let [e, o] of Object.entries(this.hPathFn2Exts)) {
|
|
133
|
+
if (e.search(i) === -1) continue;
|
|
134
|
+
if (n === SEARCH_PATH_ARG_EXT.DEFAULT) {
|
|
135
|
+
r.push(o);
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
let s = {}, c = !1;
|
|
139
|
+
for (let t of Object.keys(o)) t.search(a) !== -1 && (s[t] = e, c = !0);
|
|
140
|
+
c && r.push(s);
|
|
141
|
+
}
|
|
142
|
+
return r;
|
|
143
|
+
}
|
|
144
|
+
addPath(e, t) {
|
|
145
|
+
let n = {};
|
|
146
|
+
for (let [e, r] of Object.entries(t)) n[e] = (e.startsWith(":") ? "" : this.sys.arg.cur) + String(r);
|
|
147
|
+
this.hPathFn2Exts[e] = n;
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
export { SEARCH_PATH_ARG_EXT as n, ConfigBase as t };
|
|
151
|
+
|
|
152
|
+
//# sourceMappingURL=ConfigBase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigBase.js","names":["sys: T_SysRoots","#existsBreakline","#existsBreakpage","hFn2Ext: {[fn: string]: string}","#REG_PATH","aRet :T_Exts[]","o :T_Exts","o: T_Exts"],"sources":["../src/sn/ConfigBase.ts"],"sourcesContent":["/* ***** BEGIN LICENSE BLOCK *****\n\tCopyright (c) 2022-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 {int} from './CmnLib';\n\nexport const enum SEARCH_PATH_ARG_EXT {\t// #searchPath 使用時、第二引数用\n\tDEFAULT\t= '',\n\tSP_GSM\t= 'png|jpg|jpeg|json|svg|webp|mp4|webm',\n\tSCRIPT\t= 'sn|ssn',\n\tFONT\t= 'woff2|woff|otf|ttf',\n\tSOUND\t= 'mp3|m4a|ogg|aac|flac|wav',\n\tHTML\t= 'htm|html',\n\tCSS\t\t=\t'css',\n\tSN\t\t=\t'sn',\n\n\tTST_PNGPNG_\t= 'png|png_',\n\tTST_HH\t\t= 'hh',\n\tTST_EEE\t\t= 'eee',\n\tTST_GGG\t\t= 'ggg',\n\tTST_PNGXML\t= 'png|xml',\n}\n\n\nexport type T_CFG_RAW = {\n\tbook\t: {\n\t\ttitle\t\t: string,\t// 作品タイトル\n\t\tcreator\t\t: string,\t// 著作者\n\t\tcre_url\t\t: string,\t// 連絡先URL\n\t\tpublisher\t: string,\t// 出版者\n\t\tpub_url\t\t: string,\t// 出版社URL\n\t\tdetail\t\t: string,\t// 内容紹介\n\t\tversion\t\t: string,\t// version\n\t},\n\tsave_ns?\t: string,\n\twindow?\t: {\t\t// アプリケーションウインドウサイズ\n\t\twidth\t: number,\n\t\theight\t: number,\n\t},\n\tlog?\t: {max_len: number},\t// プレイヤーが読んだ文章を読み返せる履歴の長さ\n\tinit\t: {\n\t\tbg_color\t\t\t: string | number,\t// 背景色\n\t\ttagch_msecwait\t\t: number,\t// 通常文字表示待ち時間(未読/既読)\n\t\tauto_msecpagewait\t: number,\t// 自動文字表示、行待ち時間(未読/既読)\n\t\tescape\t\t\t\t: string,\t// エスケープ文字\n\t},\n\tdebug\t: {\t// デバッグ情報\n\t\tdevtool\t\t: boolean,\n\t\tdumpHtm\t\t: boolean,\t// テキストレイヤ:HTML部分をファイル出力するか\n\t\ttoken\t\t: boolean,\n\t\ttag\t\t\t: boolean,\n\t\tputCh\t\t: boolean,\n\t\tdebugLog\t: boolean,\n\t\tbaseTx\t\t: boolean,\n\t\tmasume\t\t: boolean,\t// テキストレイヤ:ガイドマス目を表示するか\n\t\tvariable\t: boolean,\n\t},\n\tcode\t: {[fold_nm: string]: boolean,},\t// 暗号化しないフォルダ\n\tdebuger_token\t: string,\t// デバッガとの接続トークン\n}\nexport type T_CFG = T_CFG_RAW & {\n\tsave_ns\t\t: string,\n\twindow\t: {\t\t// アプリケーションウインドウサイズ\n\t\twidth\t: number,\n\t\theight\t: number,\n\t},\n\tlog\t\t: {max_len: number},\t// プレイヤーが読んだ文章を読み返せる履歴の長さ\n}\n\nexport function creCFG(): T_CFG {return {\n\tsave_ns\t\t: '',\t\t// 扱うセーブデータを一意に識別するキーワード文字列\n\twindow\t: {\t\t// アプリケーションウインドウサイズ\n\t\twidth\t: 300,\n\t\theight\t: 300,\n\t},\n\tbook\t: {\t\t// プロジェクトの詳細情報です\n\t\ttitle\t\t: '',\t//作品タイトル\n\t\tcreator\t\t: '',\t//著作者。同人ならペンネーム\n\t\tcre_url\t\t: '',\t//著作者URL。ツイッターやメール、サイトなど\n\t\tpublisher\t: '',\t//出版社。同人ならサークル名\n\t\tpub_url\t\t: '',\t//出版社URL。無ければ省略します\n\t\tdetail\t\t: '',\t// 内容紹介。端的に記入\n\t\tversion\t\t: '1.0',\n\t},\n\tlog\t\t: {max_len: 64},\t// プレイヤーが読んだ文章を読み返せる履歴のページ数\n\tinit\t: {\n\t\tbg_color\t\t\t: '#000000',\t// 背景色\n\t\ttagch_msecwait\t\t: 10,\t// 通常文字表示待ち時間(未読/既読)\n\t\tauto_msecpagewait\t: 3500,\t// 自動文字表示、行クリック待ち時間(未読/既読)\n\t\tescape\t\t\t\t: '',\t// エスケープ文字\n\t},\n\tdebug\t: {\n\t\tdevtool\t\t: false,\n\t\tdumpHtm\t\t: false,\n\t\ttoken\t\t: false,\n\t\ttag\t\t\t: false,\n\t\tputCh\t\t: false,\n\t\tdebugLog\t: false,\n\t\tbaseTx\t\t: false,\n\t\tmasume\t\t: false,\t// テキストレイヤ:ガイドマス目を表示するか\n\t\tvariable\t: false,\n\t},\n\tcode\t: {},\t// 暗号化しないフォルダ\n\tdebuger_token\t: '',\t\t// デバッガとの接続トークン\n}}\n\n\nexport type T_Exts = {\n\t':cnt'?\t\t\t: number;\n} & {\n\t[ext: string]\t: string;\t// pp\n};\nexport type T_Fn2Path = { [fn: string]: T_Exts; };\n\nexport type T_SEARCHPATH = (fn: string, extptn?: SEARCH_PATH_ARG_EXT)=> string;\nexport type T_Config = {\n\toCfg\t\t: T_CFG;\n\theadNs\t\t: string;\n\tsearchPath\t: T_SEARCHPATH;\n\tmatchPath\t: (fnptn: string, extptn?: SEARCH_PATH_ARG_EXT)=> readonly T_Exts[];\n\taddPath\t\t: (fn: string, h_exts: T_Exts)=> void;\n}\n\nexport type T_SysRoots = {\n\tdec(ext: string, tx: string): Promise<string>;\n\tdecAB(ab: ArrayBuffer): Promise<HTMLImageElement | HTMLVideoElement | ArrayBuffer>;\n\n\targ: T_HSysBaseArg;\n\tfetch(url: string): Promise<Response>;\t// ハッシュ値作成ロード用\n\thash(str: string): string;\n}\nexport type T_HSysBaseArg = {\n\tcur\t\t: string;\n\tcrypto\t: boolean;\n\tdip?\t: string;\n}\n\n\nexport class ConfigBase implements T_Config {\n\toCfg\t= creCFG();\n\n\t\t\t\tuserFnTail\t\t= '';\t// 4tst public\n\tprotected\thPathFn2Exts\t: T_Fn2Path\t= {};\n\n\tprotected\tconstructor(readonly sys: T_SysRoots) {}\n\n\t//\tMain.generate() -> Config.generate() -> Config.load() ->\n\tprotected\tasync load(oCfg: T_CFG_RAW) {\n\t\t// this.oCfg = {...this.oCfg, ...oCfg};\t// 一階層目でコピーしてしまう\n\t\tthis.oCfg.save_ns = oCfg.save_ns ?? this.oCfg.save_ns;\n\n\t\toCfg.window ??= {width: 300, height: 300};\n\t\tthis.oCfg.window.width = oCfg.window.width;\n\t\tthis.oCfg.window.height = oCfg.window.height;\n\n\t\tthis.oCfg.book = {...this.oCfg.book, ...oCfg.book};\n\n\t\tthis.oCfg.log.max_len = oCfg.log?.max_len ?? this.oCfg.log.max_len;\n\n\t\tthis.oCfg.init = {...this.oCfg.init, ...oCfg.init};\n\n\t\tthis.oCfg.debug = {...this.oCfg.debug, ...oCfg.debug};\n\n\t\tthis.oCfg.debuger_token = oCfg.debuger_token;\n\n\n\t\t// path.json ロード\n\t\tconst fn = this.sys.arg.cur +'path.json';\n\t\tconst res = await this.sys.fetch(fn);\n\t\tif (! res.ok) throw Error(res.statusText);\n\n\t\tconst src = await res.text();\n\t\tconst oJs = <T_Fn2Path>JSON.parse(await this.sys.dec(fn, src));\n\t\tfor (const [nm, v] of Object.entries(oJs)) {\n\t\t\tconst h = this.hPathFn2Exts[nm] = v;\n\t\t\tfor (const [ext, w] of Object.entries(h)) {\n\t\t\t\tif (ext !== ':cnt') h[ext] = this.sys.arg.cur + <string>w;\n\t\t\t}\n\t\t}\n\n\t\tthis.#existsBreakline = this.matchPath('^breakline$', SEARCH_PATH_ARG_EXT.SP_GSM).length > 0;\n\t\tthis.#existsBreakpage = this.matchPath('^breakpage$', SEARCH_PATH_ARG_EXT.SP_GSM).length > 0;\n\n\t\t// ファイル改竄チェック\n\t\tconst hFn2Ext: {[fn: string]: string}\t= {};\n\t\tif (this.sys.arg.crypto)\n\t\tfor (const [fn0, hExts] of Object.entries(this.hPathFn2Exts)) {\n\t\t\tfor (const [ext, pp] of Object.entries(hExts)) {\n\t\t\t\tif (! ext.startsWith(':')) {hFn2Ext[fn0] = ext; continue}\n\t\t\t\tif (! ext.endsWith(':id')) continue;\n\n\t\t\t\tconst hp = (<string>pp).slice((<string>pp).lastIndexOf('/') +1);\n\t\t\t\tconst fn = hExts[ext.slice(0, -10)] ?? '';\n\t\t\t\tconst res = await this.sys.fetch(fn);\n\t\t\t\tconst src = await res.text();\n\t\t\t\tconst hf = this.sys.hash(src);\n\t\t\t\tif (hp !== hf) throw `ファイル改竄エラーです fn:${fn}`;\n\t\t\t}\n\t\t}\n\t\t// 出力・副作用なしなのでコメントアウト\n\t\t// else for (const [fn0, hExts] of Object.entries(this.hPathFn2Exts)) {\n\t\t// \tfor (const ext of Object.keys(hExts)) {\n\t\t// \t\tif (! ext.startsWith(':')) hFn2Ext[fn0] = ext;\n\t\t// \t}\n\t\t// }\n\t}\n\t#existsBreakline = false;\n\tget existsBreakline(): boolean {return this.#existsBreakline}\n\t#existsBreakpage = false;\n\tget existsBreakpage(): boolean {return this.#existsBreakpage}\n\n\tget headNs() {return `skynovel.${this.oCfg.save_ns} - `}\n\n\treadonly\t#REG_PATH = /([^/\\s]+)\\.([^\\d]\\w+)/;\n\t\t// 4 match 498 step(~1ms) https://regex101.com/r/tpVgmI/1\n\tsearchPath(fn: string, extptn: SEARCH_PATH_ARG_EXT = SEARCH_PATH_ARG_EXT.DEFAULT): string {\n\t\tif (! fn) throw '[searchPath] fnが空です';\n\t\tif (fn.startsWith('http://')) return fn;\n\n\t\tconst a = fn.match(this.#REG_PATH);\n\t\tlet fn0 = a ?a[1] ?? '' :fn;\n\t\tconst ext = a ?a[2] :'';\n\t\tif (this.userFnTail) {\n\t\t\tconst utn = fn0 +'@@'+ this.userFnTail;\n\t\t\tif (utn in this.hPathFn2Exts) {\n\t\t\t\tif (extptn === SEARCH_PATH_ARG_EXT.DEFAULT) fn0 = utn;\n\t\t\t\telse for (const e3 of Object.keys(this.hPathFn2Exts[utn] ?? {})) {\n\t\t\t\t\tif (`|${extptn}|`.includes(`|${e3}|`)) {fn0 = utn; break}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst h_exts = this.hPathFn2Exts[fn0];\n\t\tif (! h_exts) throw `サーチパスに存在しないファイル【${fn}】です`;\n\n\t\tif (! ext) {\t// fnに拡張子が含まれていない\n\t\t\t//\textのどれかでサーチ(ファイル名サーチ→拡張子群にextが含まれるか)\n\t\t\tconst hcnt = int(h_exts[':cnt']);\n\t\t\tif (extptn === SEARCH_PATH_ARG_EXT.DEFAULT) {\n\t\t\t\tif (hcnt > 1) throw `指定ファイル【${fn}】が複数マッチします。サーチ対象拡張子群【${extptn}】で絞り込むか、ファイル名を個別にして下さい。`;\n\n\t\t\t\treturn fn;\n\t\t\t}\n\n\t\t\tconst search_exts = `|${extptn}|`;\n\t\t\tif (hcnt > 1) {\n\t\t\t\tlet cnt = 0;\n\t\t\t\tfor (const e2 of Object.keys(h_exts)) {\n\t\t\t\t\tif (! search_exts.includes(`|${e2}|`)) continue;\n\t\t\t\t\tif (++cnt > 1) throw `指定ファイル【${fn}】が複数マッチします。サーチ対象拡張子群【${extptn}】で絞り込むか、ファイル名を個別にして下さい。`;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const [ext, pp] of Object.entries(h_exts)) {\n\t\t\t\tif (search_exts.includes(`|${ext}|`)) return <string>pp;\n\t\t\t}\n\t\t\tthrow `サーチ対象拡張子群【${extptn}】にマッチするファイルがサーチパスに存在しません。探索ファイル名=【${fn}】`;\n\t\t}\n\n\t\t// fnに拡張子xが含まれている\n\t\t//\tファイル名サーチ→拡張子群にxが含まれるか\n\t\tif (extptn !== SEARCH_PATH_ARG_EXT.DEFAULT && ! `|${extptn}|`.includes(`|${ext}|`)) {\n\t\t\tthrow `指定ファイルの拡張子【${ext}】は、サーチ対象拡張子群【${extptn}】にマッチしません。探索ファイル名=【${fn}】`;\n\t\t}\n\n\t\tconst ret = h_exts[ext];\n\t\tif (! ret) throw `サーチパスに存在しない拡張子【${ext}】です。探索ファイル名=【${fn}】、サーチ対象拡張子群【${extptn}】`;\n\n\t\treturn ret;\n\t}\n\n\tmatchPath(fnptn: string, extptn: SEARCH_PATH_ARG_EXT = SEARCH_PATH_ARG_EXT.DEFAULT): readonly T_Exts[] {\n\t\tconst aRet :T_Exts[] = [];\n\t\tconst regPtn = new RegExp(fnptn);\n\t\tconst regExt = new RegExp(extptn);\n\t\tfor (const [fn, h_exts] of Object.entries(this.hPathFn2Exts)) {\n\t\t\tif (fn.search(regPtn) === -1) continue;\n\t\t\tif (extptn === SEARCH_PATH_ARG_EXT.DEFAULT) {aRet.push(h_exts); continue}\n\n\t\t\tconst o :T_Exts = {};\n\t\t\tlet isa = false;\n\t\t\tfor (const ext of Object.keys(h_exts)) {\n\t\t\t\tif (ext.search(regExt) === -1) continue;\n\n\t\t\t\to[ext] = fn;\n\t\t\t\tisa = true;\n\t\t\t}\n\t\t\tif (isa) aRet.push(o);\n\t\t}\n\t\treturn aRet;\n\t}\n\n\taddPath(fn: string, h_exts: T_Exts) {\n\t\tconst o: T_Exts = {};\n\t\tfor (const [ext, v] of Object.entries(h_exts)) {\n\t\t\to[ext] = (ext.startsWith(':') ?'' :this.sys.arg.cur) + String(v);\n\t\t}\n\t\tthis.hPathFn2Exts[fn] = o;\n\t}\n\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { t as CmnLib, u as getDateStr } from "./CmnLib.js";
|
|
2
|
+
var DebugMng = class n {
|
|
3
|
+
static #e;
|
|
4
|
+
static #t;
|
|
5
|
+
static #n;
|
|
6
|
+
static #r;
|
|
7
|
+
constructor(e, t, r) {
|
|
8
|
+
this.sys = e, n.#e = r, n.#t = t, n.#n = t.title, n.myTrace = n.#s, t.log = (e) => this.#a(e), t.trace = (e) => this.#o(e), n.#r = document.createElement("span"), n.#r.hidden = !0, n.#r.textContent = "", n.#r.style.cssText = ` z-index: ${String(2 ** 53 - 1)};
|
|
9
|
+
position: absolute; left: 0; top: 0;
|
|
10
|
+
color: black;
|
|
11
|
+
background-color: rgba(255, 255, 255, 0.7);`, document.body.appendChild(n.#r);
|
|
12
|
+
}
|
|
13
|
+
destroy() {
|
|
14
|
+
n.#n = () => !1, document.body.removeChild(n.#r), n.myTrace = n.trace_beforeNew;
|
|
15
|
+
}
|
|
16
|
+
#i = !0;
|
|
17
|
+
#a(r) {
|
|
18
|
+
let i = "";
|
|
19
|
+
return this.#i && (this.#i = !1, i = `== ${CmnLib.plat_desc} ==\n`), this.sys.appendFile(this.sys.path_downloads + "log.txt", `${i}--- ${getDateStr("-", "_", "")} [fn:${n.#e.scriptFn} line:${String(n.#e.lineNum)}] prj:${this.sys.arg.cur}\n${r.text || `(text is ${String(r.text)})`}\n`), !1;
|
|
20
|
+
}
|
|
21
|
+
#o(e) {
|
|
22
|
+
return n.myTrace(e.text || `(text is ${String(e.text)})`, "I"), !1;
|
|
23
|
+
}
|
|
24
|
+
static trace_beforeNew = (t, n = "E") => {
|
|
25
|
+
let r = `{${n}} ` + t, i = "";
|
|
26
|
+
switch (n) {
|
|
27
|
+
case "D":
|
|
28
|
+
i = `color:#${CmnLib.isDarkMode ? "49F" : "05A"};`;
|
|
29
|
+
break;
|
|
30
|
+
case "W":
|
|
31
|
+
i = "color:#FF8800;";
|
|
32
|
+
break;
|
|
33
|
+
case "F":
|
|
34
|
+
i = "color:#BB0000;";
|
|
35
|
+
break;
|
|
36
|
+
case "ET": throw r;
|
|
37
|
+
case "E":
|
|
38
|
+
console.error("%c" + r, "color:#FF3300;");
|
|
39
|
+
return;
|
|
40
|
+
default: i = "color:black;", r = " " + r;
|
|
41
|
+
}
|
|
42
|
+
console.info("%c" + r, i);
|
|
43
|
+
};
|
|
44
|
+
static myTrace = n.trace_beforeNew;
|
|
45
|
+
static strPos = () => n.#e.lineNum > 0 ? `(fn:${n.#e.scriptFn} line:${String(n.#e.lineNum)}) ` : "";
|
|
46
|
+
static #s = (t, r = "E") => {
|
|
47
|
+
let i = `{${r}} ` + n.strPos() + t;
|
|
48
|
+
n.#c(i, r);
|
|
49
|
+
let a = "";
|
|
50
|
+
switch (r) {
|
|
51
|
+
case "D":
|
|
52
|
+
a = `color:#${CmnLib.isDarkMode ? "49F" : "05A"};`;
|
|
53
|
+
break;
|
|
54
|
+
case "W":
|
|
55
|
+
a = "color:#F80;";
|
|
56
|
+
break;
|
|
57
|
+
case "F":
|
|
58
|
+
a = "color:#B00;";
|
|
59
|
+
break;
|
|
60
|
+
case "ET":
|
|
61
|
+
case "E":
|
|
62
|
+
if (n.#n({ text: t }), this.#t.dump_lay({}), this.#t.dump_val({}), n.#e.dumpErrForeLine(), this.#t.dump_stack({}), r === "ET") throw i;
|
|
63
|
+
console.error("%c" + i, "color:#F30;");
|
|
64
|
+
return;
|
|
65
|
+
default: a = "", i = " " + i;
|
|
66
|
+
}
|
|
67
|
+
console.info("%c" + i, a);
|
|
68
|
+
};
|
|
69
|
+
static #c = (e, t) => {
|
|
70
|
+
let r = "";
|
|
71
|
+
switch (t) {
|
|
72
|
+
case "D":
|
|
73
|
+
r = "color:#05A;";
|
|
74
|
+
break;
|
|
75
|
+
case "W":
|
|
76
|
+
r = "color:#F80;";
|
|
77
|
+
break;
|
|
78
|
+
case "F":
|
|
79
|
+
r = "color:#B00;";
|
|
80
|
+
break;
|
|
81
|
+
case "ET":
|
|
82
|
+
case "E":
|
|
83
|
+
r = "color:#F30;";
|
|
84
|
+
break;
|
|
85
|
+
default: r = "";
|
|
86
|
+
}
|
|
87
|
+
n.#r.innerHTML += `<span style='${r}'>${e}</span><br/>`, n.#r.hidden = !1;
|
|
88
|
+
};
|
|
89
|
+
};
|
|
90
|
+
export { DebugMng as t };
|
|
91
|
+
|
|
92
|
+
//# sourceMappingURL=DebugMng.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DebugMng.js","names":["#scrItr","#hTag","#title","#spnDbg","sys: SysBase","#st_trace","#log","#trace","#first","#dspDbg"],"sources":["../src/sn/DebugMng.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, getDateStr} from './CmnLib';\nimport type {TArg, TTag, T_HTag} from './Grammar';\nimport type {SysBase} from './SysBase';\nimport type {ScriptIterator} from './ScriptIterator';\n\nexport type T_TRACE = (txt: string, lvl?: 'D'|'W'|'F'|'E'|'I'|'ET')=> void;\n\n\nexport class DebugMng {\n\tstatic\t#scrItr\t: ScriptIterator;\n\tstatic\t#hTag\t: T_HTag;\n\tstatic\t#title\t: TTag;\n\tstatic\t#spnDbg\t: HTMLSpanElement;\n\n\tconstructor(private readonly sys: SysBase, hTag: T_HTag, scrItr: ScriptIterator) {\n\t\tDebugMng.#scrItr = scrItr;\n\t\tDebugMng.#hTag = hTag;\n\t\tDebugMng.#title = hTag.title;\n\t\tDebugMng.myTrace = DebugMng.#st_trace;\n\n\t\t//\tデバッグ・その他\n\t\t//hTag.clearsysvar\t// Variableで定義\t\t\t\t// システム変数の全消去\n\t\t//hTag.clearvar\t\t// Variableで定義\t\t\t\t// ゲーム変数の全消去\n\t\t//hTag.dump_lay\t\t// LayerMngで定義\t\t\t\t// レイヤのダンプ\n\t\t//hTag.dump_val\t\t// Variableで定義\t\t\t\t// 変数のダンプ\n\t\t//hTag.dump_stack\t// ScriptIteratorで定義\t\t\t// スタックのダンプ\n\t\thTag.log\t\t\t= o=> this.#log(o);\t\t\t\t// ログ出力\n\t\t//hTag.reload_script// ScriptIterator.ts内で定義\t// スクリプト再読込\n\t\thTag.trace\t\t\t= o=> this.#trace(o);\t\t\t// デバッグ表示へ出力\n\n\t\tDebugMng.#spnDbg = document.createElement('span');\n\t\tDebugMng.#spnDbg.hidden = true;\n\t\tDebugMng.#spnDbg.textContent = '';\n\t\tDebugMng.#spnDbg.style.cssText =\n\t\t`\tz-index: ${String(Number.MAX_SAFE_INTEGER)};\n\t\t\tposition: absolute; left: 0; top: 0;\n\t\t\tcolor: black;\n\t\t\tbackground-color: rgba(255, 255, 255, 0.7);`\n\t\tdocument.body.appendChild(DebugMng.#spnDbg);\n\t}\n\tdestroy() {\n\t\tDebugMng.#title = ()=> false;\n\t\tdocument.body.removeChild(DebugMng.#spnDbg);\n\n\t\tDebugMng.myTrace = DebugMng.trace_beforeNew;\n\t}\n\n\t// ログ出力\n\t#first = true;\n\t#log(hArg: TArg) {\n\t\tlet dat = '';\n\t\tif (this.#first) {\n\t\t\tthis.#first = false;\n\t\t\tdat = `== ${CmnLib.plat_desc} ==\\n`;\n\t\t}\n\t\tvoid this.sys.appendFile(\n\t\t\tthis.sys.path_downloads +'log.txt',\n\t\t\t`${dat}--- ${getDateStr('-', '_', '')\n\t\t\t} [fn:${DebugMng.#scrItr.scriptFn} line:${String(DebugMng.#scrItr.lineNum)\n\t\t\t}] prj:${this.sys.arg.cur\n\t\t\t// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n\t\t\t}\\n${hArg.text || `(text is ${String(hArg.text)})`}\\n`,\n\t\t);\n\n\t\treturn false;\n\t}\n\n\t#trace(hArg: TArg) {\n\t\t// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n\t\tDebugMng.myTrace(hArg.text || `(text is ${String(hArg.text)})`, 'I');\n\n\t\treturn false;\n\t}\n\n\t// private禁止、galleryでエラーになる\n\tstatic readonly trace_beforeNew: T_TRACE = (txt, lvl = 'E')=> {\n\t\tlet mes = `{${lvl}} `+ txt;\n\t\tlet sty = '';\n\t\tswitch (lvl) {\n\t\t\tcase 'D':\tsty = `color:#${CmnLib.isDarkMode ?'49F' :'05A'};`;\tbreak;\n\t\t\tcase 'W':\tsty = 'color:#FF8800;';\tbreak;\n\t\t\tcase 'F':\tsty = 'color:#BB0000;';\tbreak;\n\t\t\tcase 'ET':\tthrow mes;\n\t\t\tcase 'E':\tconsole.error('%c'+ mes, 'color:#FF3300;');\treturn;\n\t\t\tdefault:\tsty = 'color:black;';\tmes = ' '+ mes;\n\t\t}\n\t\tconsole.info('%c'+ mes, sty);\n\t}\n\tstatic myTrace = DebugMng.trace_beforeNew;\n\tstatic strPos = ()=> DebugMng.#scrItr.lineNum > 0\n\t\t? `(fn:${DebugMng.#scrItr.scriptFn} line:${String(DebugMng.#scrItr.lineNum)}) `\n\t\t: '';\n\tstatic readonly\t#st_trace: T_TRACE = (txt, lvl = 'E')=> {\n\t\tlet mes = `{${lvl}} `+ DebugMng.strPos() + txt;\n\t\tDebugMng.#dspDbg(mes, lvl);\n\n\t\tlet sty = '';\n\t\tswitch (lvl) {\n\t\t\tcase 'D':\tsty = `color:#${CmnLib.isDarkMode ?'49F' :'05A'};`;\tbreak;\n\t\t\tcase 'W':\tsty = 'color:#F80;';\tbreak;\n\t\t\tcase 'F':\tsty = 'color:#B00;';\tbreak;\n\t\t\tcase 'ET':\n\t\t\tcase 'E':\tDebugMng.#title({text: txt});\n\t\t\t\t/*if (CmnLib.osName === \"AND\") {\n\t\t\t\t\tconst buf = \"mailto:foo@hoge.co.jp\"\n\t\t\t\t\t\t+ \"?subject=AIRNovel_ERR&body=\"\n\t\t\t\t\t\t+ CmnLib.escapeZenkaku(mes) + \"\\n\"\n\t\t\t\t\t\t+ \"※一部記号は全角表示しています。\";\n\t\t\t\t\tflash.net.navigateToURL(new URLRequest(buf));\n\t\t\t\t}*/\n\t\t\t\tthis.#hTag.dump_lay({});\n\t\t\t\tthis.#hTag.dump_val({});\n\t\t\t\tDebugMng.#scrItr.dumpErrForeLine();\n\t\t\t\tthis.#hTag.dump_stack({});\n\n\t\t\t\tif (lvl === 'ET') throw mes;\n\t\t\t\tconsole.error('%c'+ mes, 'color:#F30;');\treturn;\n\t\t\tdefault:\tsty = '';\tmes = ' '+ mes;\n\t\t}\n\t\tconsole.info('%c'+ mes, sty);\n\t}\n\n\tstatic readonly\t#dspDbg: T_TRACE = (mes, lvl)=> {\n\t\tlet sty = '';\n\t\tswitch (lvl) {\n\t\t\tcase 'D':\tsty = 'color:#05A;';\tbreak;\n\t\t\tcase 'W':\tsty = 'color:#F80;';\tbreak;\n\t\t\tcase 'F':\tsty = 'color:#B00;';\tbreak;\n\t\t\tcase 'ET':\n\t\t\tcase 'E':\tsty = 'color:#F30;';\tbreak;\n\t\t\tdefault:\tsty = '';\n\t\t}\n\t\tDebugMng.#spnDbg.innerHTML += `<span style='${sty}'>${mes}</span><br/>`;\n\t\tDebugMng.#spnDbg.hidden = false;\n\t};\n\n}\n"],"mappings":"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"}
|