@famibee/skynovel 2.0.2 → 2.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Button.js +36 -34
- package/dist/Button.js.map +1 -1
- package/dist/CallStack.js +11 -6
- package/dist/CallStack.js.map +1 -1
- package/dist/CmnInterface.js +13 -11
- package/dist/CmnInterface.js.map +1 -1
- package/dist/CmnLib.js +58 -56
- package/dist/CmnLib.js.map +1 -1
- package/dist/Config.js +9 -7
- package/dist/Config.js.map +1 -1
- package/dist/ConfigBase.js +52 -49
- package/dist/ConfigBase.js.map +1 -1
- package/dist/DebugMng.js +9 -6
- package/dist/DebugMng.js.map +1 -1
- package/dist/EventListenerCtn.js +6 -4
- package/dist/EventListenerCtn.js.map +1 -1
- package/dist/EventMng.js +522 -417
- package/dist/EventMng.js.map +1 -1
- package/dist/Grammar.js +22 -20
- package/dist/Grammar.js.map +1 -1
- package/dist/GrpLayer.js +58 -57
- package/dist/GrpLayer.js.map +1 -1
- package/dist/Layer.js +66 -64
- package/dist/Layer.js.map +1 -1
- package/dist/LayerMng.js +461 -441
- package/dist/LayerMng.js.map +1 -1
- package/dist/Main.js +69 -67
- package/dist/Main.js.map +1 -1
- package/dist/PropParser.js +23 -19
- package/dist/PropParser.js.map +1 -1
- package/dist/Reading.js +422 -418
- package/dist/Reading.js.map +1 -1
- package/dist/RubySpliter.js +4 -2
- package/dist/RubySpliter.js.map +1 -1
- package/dist/ScriptIterator.js +374 -370
- package/dist/ScriptIterator.js.map +1 -1
- package/dist/SndBuf.js +643 -622
- package/dist/SndBuf.js.map +1 -1
- package/dist/SoundMng.js +59 -60
- package/dist/SoundMng.js.map +1 -1
- package/dist/SpritesMng.js +135 -129
- package/dist/SpritesMng.js.map +1 -1
- package/dist/SysBase.js +985 -950
- package/dist/SysBase.js.map +1 -1
- package/dist/TxtLayer.js +558 -551
- package/dist/TxtLayer.js.map +1 -1
- package/dist/Variable.js +47 -45
- package/dist/Variable.js.map +1 -1
- package/dist/chunk.js +11 -9
- package/dist/gamepad.js +396 -660
- package/dist/gamepad.js.map +1 -1
- package/dist/pixi.js +2631 -2593
- package/dist/pixi.js.map +1 -1
- package/dist/platform.js +6 -4
- package/dist/platform.js.map +1 -1
- package/dist/rolldown-runtime.js +20 -0
- package/dist/web.js +418 -418
- package/dist/web.js.map +1 -1
- package/dist_app/Button.js +36 -34
- package/dist_app/Button.js.map +1 -1
- package/dist_app/CallStack.js +11 -6
- package/dist_app/CallStack.js.map +1 -1
- package/dist_app/CmnInterface.js +13 -11
- package/dist_app/CmnInterface.js.map +1 -1
- package/dist_app/CmnLib.js +58 -56
- package/dist_app/CmnLib.js.map +1 -1
- package/dist_app/Config.js +9 -7
- package/dist_app/Config.js.map +1 -1
- package/dist_app/ConfigBase.js +52 -49
- package/dist_app/ConfigBase.js.map +1 -1
- package/dist_app/DebugMng.js +9 -6
- package/dist_app/DebugMng.js.map +1 -1
- package/dist_app/EventListenerCtn.js +6 -4
- package/dist_app/EventListenerCtn.js.map +1 -1
- package/dist_app/EventMng.js +522 -417
- package/dist_app/EventMng.js.map +1 -1
- package/dist_app/Grammar.js +22 -20
- package/dist_app/Grammar.js.map +1 -1
- package/dist_app/GrpLayer.js +58 -57
- package/dist_app/GrpLayer.js.map +1 -1
- package/dist_app/Layer.js +66 -64
- package/dist_app/Layer.js.map +1 -1
- package/dist_app/LayerMng.js +461 -441
- package/dist_app/LayerMng.js.map +1 -1
- package/dist_app/Main.js +69 -67
- package/dist_app/Main.js.map +1 -1
- package/dist_app/PropParser.js +23 -19
- package/dist_app/PropParser.js.map +1 -1
- package/dist_app/Reading.js +422 -418
- package/dist_app/Reading.js.map +1 -1
- package/dist_app/RubySpliter.js +4 -2
- package/dist_app/RubySpliter.js.map +1 -1
- package/dist_app/ScriptIterator.js +374 -370
- package/dist_app/ScriptIterator.js.map +1 -1
- package/dist_app/SndBuf.js +643 -622
- package/dist_app/SndBuf.js.map +1 -1
- package/dist_app/SoundMng.js +59 -60
- package/dist_app/SoundMng.js.map +1 -1
- package/dist_app/SpritesMng.js +135 -129
- package/dist_app/SpritesMng.js.map +1 -1
- package/dist_app/SysBase.js +985 -950
- package/dist_app/SysBase.js.map +1 -1
- package/dist_app/TxtLayer.js +558 -551
- package/dist_app/TxtLayer.js.map +1 -1
- package/dist_app/Variable.js +47 -45
- package/dist_app/Variable.js.map +1 -1
- package/dist_app/app.js +62 -63
- package/dist_app/app.js.map +1 -1
- package/dist_app/appMain.js +11 -11
- package/dist_app/appMain.js.map +1 -1
- package/dist_app/chunk.js +11 -9
- package/dist_app/gamepad.js +396 -660
- package/dist_app/gamepad.js.map +1 -1
- package/dist_app/pixi.js +2028 -1990
- package/dist_app/pixi.js.map +1 -1
- package/dist_app/platform.js +6 -4
- package/dist_app/platform.js.map +1 -1
- package/dist_app/preload.js +1 -1
- package/dist_app/preload.js.map +1 -1
- package/dist_app/rolldown-runtime.js +20 -0
- package/package.json +20 -21
package/dist_app/TxtLayer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TxtLayer.js","names":["#s行頭禁則","#s行末禁則","#s分割禁止","#sぶら下げ","#reg行頭禁則","#chk禁則の競合_ぶら行末","#reg行末禁則","#chk禁則の競合_ぶら分禁","#reg分割禁止","#regぶら下げ","#genKinsoku","o: T_RP_Hyphenation","a: IChRect[]","#getChRects","#i2pi","ret: IChRect[]","a: StyleSheet[]","result: string[]","match: RegExpExecArray | null","cssRules: any","#cfg","#appPixi","#evtMng","#scrItr","#hChInStyle","#hChOutStyle","#cntTxt","#grpDbgMasume","#hWarnStyle","ctn: Sprite","canFocus: ()=> boolean","sys: SysBase","#htmTxt","#fncMasume","key: any","#hyph","#lay_sub","#left","#lenHtmTxt","#clearText","#infTL","#isTategaki","#padTx4x","#padTx4y","#lh_half","#goTxt_Proc","#aGoTxt","#SPAN_LAST","#cntBreak","#aRect","cnvRect :(rng: Range, ch: string)=> Rectangle","#fi_easing","#spWork","#fncEndChIn","lastElm: HTMLElement | undefined","#ac","st: T_SpTw","#aSpTw","#REG_NG_CHSTYLE_NAME_CHR","#spsBreak","#ch_filter","#fo_easing","#sss","aStyle: string[]","#cfg","#val","#isPageFore","#log","#autowc","#ch_in_style","#ch_out_style","#msecChWait","#evtMng","#sys","#doAutoWc","#hAutoWc","#rbSpl","#htmRb","#hWarnR_Style","#cntBtn","#txs","#putCh","#b_do","#rec","#setFfs","#r_align","#ruby_pd","#mkStyle_r_align","#mkStyle_r_align4ff","#set_ch_in","#set_ch_out","#drawBack","#$ch_in_style","#ch_in_join","#$ch_out_style","#b_color","#b_alpha","#b_alpha_isfixed","#b_pic","#sps","#strNoFFS","#regNoFFS","#ffs","#fncFFSStyle","#needGoTxt","#firstCh","#tagCh_sub","#popSpan","#aSpan","#cumDelay","#o2domArg","#pushSpan","#stkASpan","#page_text","#page_plain_text","#mergePushSpan","h: TArg"],"sources":["../src/sn/Hyphenation.ts","../src/sn/htm2tx.ts","../src/sn/TxtStage.ts","../src/sn/TxtLayer.ts"],"sourcesContent":["/* eslint-disable no-irregular-whitespace */\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/* ***** BEGIN LICENSE BLOCK *****\n\tCopyright (c) 2024-2025 Famibee (famibee.blog38.fc2.com)\n\n\tThis software is released under the MIT License.\n\thttp://opensource.org/licenses/mit-license.php\n** ***** END LICENSE BLOCK ***** */\n\nimport {argChk_Boolean, argChk_Num} from './CmnLib';\nimport type {TArg} from './Grammar';\n\nimport type {Rectangle} from 'pixi.js';\n\n\nexport type IChRect = {\n\tch\t\t: string;\n\trect\t: Rectangle;\n\telm\t\t: HTMLElement;\n}\n\nexport type T_RP_Hyphenation = {\n\t行頭禁則?\t\t: string;\n\t行末禁則?\t\t: string;\n\t分割禁止?\t\t: string;\n\tぶら下げ?\t\t: string;\n\tbreak_fixed\t\t: boolean;\n\tbreak_fixed_left: number;\n\tbreak_fixed_top\t: number;\n\tbura\t\t\t: boolean;\n}\n\n\nconst def行頭禁則\t= '、。,.)]}〉」』】〕”〟ぁぃぅぇぉっゃゅょゎァィゥェォッャュョヮヵヶ!?!?‼⁉・ーゝゞヽヾ々';\nconst def行末禁則\t= '[({〈「『【〔“〝';\nconst def分割禁止\t= '─‥…';\nconst defぶら下げ\t= def行頭禁則;\n\nconst defReg行頭禁則\t= new RegExp(`[${def行頭禁則}]`);\nconst defReg行末禁則\t= new RegExp(`[${def行末禁則}]`);\nconst defReg分割禁止\t= new RegExp(`[${def分割禁止}]`);\nconst defRegぶら下げ\t= defReg行頭禁則;\n\n\nexport class Hyphenation {\n\t#s行頭禁則\t\t= def行頭禁則;\n\t#s行末禁則\t\t= def行末禁則;\n\t#s分割禁止\t\t= def分割禁止;\n\t#sぶら下げ\t\t= defぶら下げ;\n\tget 行頭禁則() {return this.#s行頭禁則}\n\tget 行末禁則() {return this.#s行末禁則}\n\tget 分割禁止() {return this.#s分割禁止}\n\tget ぶら下げ() {return this.#sぶら下げ}\n\n\t#reg行頭禁則\t= defReg行頭禁則;\n\t#reg行末禁則\t= defReg行末禁則;\n\t#reg分割禁止\t= defReg分割禁止;\n\t#regぶら下げ\t= defRegぶら下げ;\n\n\tbreak_fixed\t\t= false;\n\tbreak_fixed_left= 0;\n\tbreak_fixed_top\t= 0;\n\tbura\t\t\t= false;\n\tlay(hArg: TArg) {\n\t\tif (hArg.kinsoku_sol) {\n\t\t\tthis.#s行頭禁則 = hArg.kinsoku_sol;\n\t\t\tthis.#reg行頭禁則 = new RegExp(`[${this.#s行頭禁則}]`);\n\t\t}\n\t\tif (hArg.kinsoku_eol) {\n\t\t\tthis.#s行末禁則 = hArg.kinsoku_eol;\n\t\t\tthis.#chk禁則の競合_ぶら行末();\n\t\t\tthis.#reg行末禁則 = new RegExp(`[${this.#s行末禁則}]`);\n\t\t}\n\t\tif (hArg.kinsoku_dns) {\n\t\t\tthis.#s分割禁止 = hArg.kinsoku_dns;\n\t\t\tthis.#chk禁則の競合_ぶら分禁();\n\t\t\tthis.#reg分割禁止 = new RegExp(`[${this.#s分割禁止}]`);\n\t\t}\n\t\tif (hArg.kinsoku_bura) {\n\t\t\tthis.#sぶら下げ = hArg.kinsoku_bura;\n\t\t\tthis.#chk禁則の競合_ぶら行末();\n\t\t\tthis.#chk禁則の競合_ぶら分禁();\n\t\t\tthis.#regぶら下げ = new RegExp(`[${this.#sぶら下げ}]`);\n\t\t}\n\t\tif ('bura' in hArg) this.bura = argChk_Boolean(hArg, 'bura', false);\n\n\t\tthis.break_fixed\t\t= argChk_Boolean(hArg, 'break_fixed', this.break_fixed);\n\t\tthis.break_fixed_left\t= argChk_Num(hArg, 'break_fixed_left', this.break_fixed_left);\n\t\tthis.break_fixed_top\t= argChk_Num(hArg, 'break_fixed_top', this.break_fixed_top);\n\t}\n\t\t// 禁則の競合(ぶら下げ と 行末禁則 の両方に含まれる文字があってはならない)\n\t\t#chk禁則の競合_ぶら行末() {\n\t\t\t// 処理速度最適化で主従を変える。長い方をネイティブにやらせる\n\t\t\tconst len行末禁則 = this.#s行末禁則.length;\n\t\t\tconst lenぶら下げ = this.#sぶら下げ.length;\n\t\t\tif (len行末禁則 < lenぶら下げ) {\n\t\t\t\tfor (let i=0; i<len行末禁則; ++i) {\n\t\t\t\t\tconst c = this.#s行末禁則[i];\n\t\t\t\t\tif (this.#sぶら下げ.includes(c!)) throw `禁則の競合があります。文字 ${String(c)} がぶら下げ と 行末禁則 の両方に含まれます`;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tfor (let i=0; i<lenぶら下げ; ++i) {\n\t\t\t\t\tconst c = this.#sぶら下げ[i];\n\t\t\t\t\tif (this.#s行末禁則.includes(c!)) throw `禁則の競合があります。文字 ${String(c)} がぶら下げ と 行末禁則 の両方に含まれます`;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// 禁則の競合(ぶら下げ と 分割禁止 の両方に含まれる文字があってはならない)\n\t\t#chk禁則の競合_ぶら分禁() {\n\t\t\t// 処理速度最適化で主従を変える。長い方をネイティブにやらせる\n\t\t\tconst len分割禁止 = this.#s分割禁止.length;\n\t\t\tconst lenぶら下げ = this.#sぶら下げ.length;\n\t\t\tif (len分割禁止 < lenぶら下げ) {\n\t\t\t\tfor (let i=0; i<len分割禁止; ++i) {\n\t\t\t\t\tconst c = this.#s分割禁止[i];\n\t\t\t\t\tif (this.#sぶら下げ.includes(c!)) throw `禁則の競合があります。文字 ${String(c)} がぶら下げ と 分割禁止 の両方に含まれます`;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tfor (let i=0; i<lenぶら下げ; ++i) {\n\t\t\t\t\tconst c = this.#sぶら下げ[i];\n\t\t\t\t\tif (this.#s分割禁止.includes(c!)) throw `禁則の競合があります。文字 ${String(c)} がぶら下げ と 分割禁止 の両方に含まれます`;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\treNew(to: Hyphenation) {\n\t\tto.#genKinsoku(this.#s行頭禁則, this.#s行末禁則, this.#s分割禁止, this.#sぶら下げ);\n\n\t\tto.break_fixed\t\t= this.break_fixed;\n\t\tto.break_fixed_left\t= this.break_fixed_left;\n\t\tto.break_fixed_top\t= this.break_fixed_top;\n\t\tto.bura\t\t\t\t= this.bura;\n\t}\n\t\t#genKinsoku(s行頭禁則: string, s行末禁則: string, s分割禁止: string, sぶら下げ: string) {\n\t\t\tif (this.#s行頭禁則\t!== s行頭禁則) {\n\t\t\t\tthis.#s行頭禁則\t= s行頭禁則;\n\t\t\t\tthis.#reg行頭禁則 = new RegExp(`[${s行頭禁則}]`);\n\t\t\t}\n\t\t\tif (this.#s行末禁則\t!== s行末禁則) {\n\t\t\t\tthis.#s行末禁則\t= s行末禁則;\n\t\t\t\tthis.#reg行末禁則 = new RegExp(`[${s行末禁則}]`);\n\t\t\t}\n\t\t\tif (this.#s分割禁止\t!== s分割禁止) {\n\t\t\t\tthis.#s分割禁止\t= s分割禁止;\n\t\t\t\tthis.#reg分割禁止 = new RegExp(`[${s分割禁止}]`);\n\t\t\t}\n\t\t\tif (this.#sぶら下げ\t!== sぶら下げ) {\n\t\t\t\tthis.#sぶら下げ\t= sぶら下げ;\n\t\t\t\tthis.#regぶら下げ = new RegExp(`[${sぶら下げ}]`);\n\t\t\t}\n\t\t}\n\trecord() {\n\t\tconst o: T_RP_Hyphenation = {\n\t\t\tbreak_fixed\t\t\t: this.break_fixed,\n\t\t\tbreak_fixed_left\t: this.break_fixed_left,\n\t\t\tbreak_fixed_top\t\t: this.break_fixed_top,\n\t\t\tbura\t\t\t\t: this.bura,\n\t\t};\n\t\tif (this.#s行頭禁則 === def行頭禁則) o.行頭禁則 = this.#s行頭禁則;\n\t\tif (this.#s行末禁則 === def行末禁則) o.行末禁則 = this.#s行末禁則;\n\t\tif (this.#s分割禁止 === def分割禁止) o.分割禁止 = this.#s分割禁止;\n\t\tif (this.#sぶら下げ === defぶら下げ) o.ぶら下げ = this.#sぶら下げ;\n\t\t\t// デフォルト値と同じならJSONで省略\n\t\treturn o;\n\t}\n\tplayback(hLay?: T_RP_Hyphenation) {\n\t\tif (! hLay) return;\t\t// 途中追加なので\n\n\t\tthis.#genKinsoku(\n\t\t\thLay.行頭禁則 ?? def行頭禁則,\n\t\t\thLay.行末禁則 ?? def行末禁則,\n\t\t\thLay.分割禁止 ?? def分割禁止,\n\t\t\thLay.ぶら下げ ?? defぶら下げ,\n\t\t);\n\n\t\tthis.break_fixed\t\t= hLay.break_fixed;\n\t\tthis.break_fixed_left\t= hLay.break_fixed_left;\n\t\tthis.break_fixed_top\t= hLay.break_fixed_top;\n\t\tthis.bura\t\t\t\t= hLay.bura;\n\t}\n\n\thyph(htmTxt: HTMLSpanElement, cnvRect :(rng: Range, ch: string)=> Rectangle, tategaki: boolean, begin: number, bkHtm: string): [IChRect[], number] {\n\t\tlet a: IChRect[];\n\t\tlet len = 0;\n\t\tlet i = 2;\t\t// 本来 1 だがひと文字目の行頭禁則文字を無視したいので\n\t\tlet fncFirstChk = (len: number)=> {\n\t\t\tfncFirstChk = ()=> false;\n\n\t\t\tif (begin === len) {\t// 右クリック戻りなどで文字表示が崩れる件の対応\n\t\t\t\tif (begin > 0) htmTxt.innerHTML = bkHtm.replaceAll('class=\"sn_ch\"', 'class=\"sn_ch sn_ch_in_default\"');\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn len < 2;\n\t\t};\n//console.log(`🎴禁則処理判定ループ begin:${begin}`);\n\t\tdo {\n\t\t\ta = this.#getChRects(htmTxt, cnvRect);\n\t\t\tlen = a.length;\n\t\t\tif (fncFirstChk(len)) break;\n\n\t\t\t// 禁則処理判定ループ\n\t\t\tlet sl_xy = -Infinity;\t// 前回のxy\n//console.log(`- len:${len} a_ch:${a.map((v, i)=> v.elm.tagName === 'RT' ?[] :[i, v.ch])}:`);\n\t\t\tfor (; i<len; ++i) {\n\t\t\t\tconst {elm, rect, ch} = a[i]!;\n\t\t\t\tif (elm.tagName === 'RT') continue;\t// ルビはスキップ\n\n\t\t\t\tconst xy = tategaki ?rect.y :rect.x;\n//if (sl_xy > 790)\n//console.log(`🎴 sl_xy:${sl_xy.toFixed(2)} xy:${xy.toFixed(2)} i:${i} ch:${ch}: rect:(${rect.left.toFixed(2)}, ${rect.top.toFixed(2)}, ${rect.width.toFixed(2)}, ${rect.height.toFixed(2)})`);\n\t\t\t\tif (sl_xy <= xy\t// 【 < 】では[tcy]二文字目を誤判定する\n\t\t\t\t// [r]による改行後は追い出し処理をしないように\n\t\t\t\t|| elm.previousElementSibling?.tagName === 'SPAN'\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\t\t\t&&\telm.previousElementSibling?.innerHTML.includes('<br>')\n\t\t\t\t// <span class=\"offrec\"> 〜 </span> 外し\n\t\t\t\t|| elm.parentElement?.previousElementSibling?.tagName === 'SPAN'\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\t\t\t&&\telm.parentElement?.previousElementSibling?.innerHTML.includes('<br>')) {\n\t\t\t\t\tsl_xy = xy;\n\t\t\t\t\tif (! this.break_fixed) {\n\t\t\t\t\t\tthis.break_fixed_left = rect.x;\n\t\t\t\t\t\tthis.break_fixed_top = rect.y;\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n/*\n\t// [r]などの改行はこう。TxtLayer.#tagCh_sub()により <span> に入れられる\n\t<span class=\"sn_ch\" style=\"display: inline;animation-delay: 10ms;\">\n\t\t<br>\n\t</span>\n\n\t// 上記が下記に囲まれている場合もある。previousElementSibling 使用時は注意\n\t<span class=\"offrec\"> 〜 </span>\n\n\n\t// 禁則処理による自動改行はこう\n\t<br>\n*/\n\n\t\t\t\tconst p_i = this.#i2pi(a, i);\n\t\t\t\tconst {elm: p_elm, rect: p_rect, ch: p_ch} = a[p_i]!;\n//console.log(`🎴 === 自動改行発生! 前文字:${p_i}:${p_ch}:%o 今文字:${i}:${ch}:(${ch.charCodeAt(0).toString(16)})%o`, a[p_i].elm, a[i].elm);\n\t\t\t\tif (! this.break_fixed) {\n\t\t\t\t\tthis.break_fixed_left = p_rect.x;\n\t\t\t\t\tthis.break_fixed_top = p_rect.y;\n\t\t\t\t\tconst sty = globalThis.getComputedStyle(p_elm);\n\t\t\t\t\tconst rs = parseFloat(sty.fontSize);\n\t\t\t\t\tif (tategaki)\tthis.break_fixed_top += rs;\n\t\t\t\t\telse\t\t\tthis.break_fixed_left += rs;\n\t\t\t\t}\n\n\t\t\t\tsl_xy = -Infinity;\t// 自動改行発生!\n\t\t\t\tconst oldI = i;\n\t\t\t\tconst {cont, ins} = this.bura\n\t\t\t\t\t? this.hyph_alg_bura(a, p_i, p_ch, i)\n\t\t\t\t\t: this.hyph_alg(a, p_i, p_ch, i, ch);\n\t\t\t\ti = ins;\n//console.log(`🎴 === cont:${cont} ins:${i} :${a[i].ch}:%o の前に改行を挿入`, a[i].elm);\n\t\t\t\tif (cont) continue;\n\n\t\t\t\t// 改行挿入\n\t\t\t\tconst elm2 = a[i]!.elm;\n\t\t\t\tconst pal = elm2.parentElement!;\n\t\t\t\tconst br = document.createElement('br');\n\t\t\t\tif (pal.classList.contains('sn_tx')) pal.insertBefore(br, elm2); else {\n\t\t\t\t\tconst ppal = pal.parentElement!;\n\t\t\t\t\tif (ppal.classList.contains('sn_ch')) {\n\t\t\t\t\t\tppal.parentElement!.insertBefore(br, ppal);\n\t\t\t\t\t}\n\t\t\t\t\telse ppal.insertBefore(br, pal);\n\t\t\t\t}\n\n\t\t\t\ti += 2;\t// いま追加した<br>のぶんと、次へ行く +1\n\t\t\t\tif (i < oldI) i = oldI;\t// 永久ループ防御\n\t\t\t\tlen = -1;\t// doループ先頭に戻る\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} while (len < 0);\n\n\t\treturn [a, len];\n\t}\n\t\t// 一つ前の要素を探す(ルビ対応)\n\t\t#i2pi(a: IChRect[], i: number): number {\n\t\t\tconst p_i = i -1;\n\t\t\tconst {elm} = a[p_i]!;\n\t\t\tif (elm.tagName !== 'RT') return p_i -(\n\t\t\t\telm.style.textCombineUpright === 'all'\n\t\t\t\t? Array.from(elm.textContent).length -1\n\t\t\t\t: 0\n\t\t\t);\n\n\t\t\treturn p_i -Array.from(elm.textContent).length;\n\t\t\t\t// サロゲートペア対策\n\t\t}\n\n\t#getChRects(elm: Node, cnvRect :(range: Range, ch: string)=> Rectangle): IChRect[] {\t// 注意)再帰関数\n\t\tconst ret: IChRect[] = [];\n\t\tif (elm.nodeType !== elm.TEXT_NODE) return Array.from(elm.childNodes).map(v=> this.#getChRects(v, cnvRect)).flat();\n\n\t\tconst rng = elm.ownerDocument!.createRange();\n\t\trng.selectNodeContents(elm);\n\t\tlet pos = 0;\n\t\tconst end = rng.endOffset;\n\t\t// できれば一文字ずつ「after-edge - baseline」を調べたいが、暫定手段を取る\n\t\t//const styles = globalThis.getComputedStyle(this.htmTxt);\n\t\t//console.log('lh:'+ styles.lineHeight +' fs:'+ styles.fontSize);\n\t\twhile (pos < end) {\n\t\t\trng.setStart(elm, pos);\n\t\t\trng.setEnd(elm, ++pos);\n\t\t\tconst ch = rng.toString();\n\t\t\tret.push({\n\t\t\t\tch,\n\t\t\t\trect: cnvRect(rng, ch),\n\t\t\t\telm\t: rng.startContainer.parentElement!,\n\t\t\t});\n\t\t}\n\t\trng.detach();\n\n\t\treturn ret;\n\t}\n\n\t/**\n\t * 抽象化した禁則処理アルゴリズム\n\t * @method hyph_alg\n\t * @param {IChRect[]} a - 文章の抽象化配列\n\t * @param {number} p_i - 処理要素の一つ前の添字\n\t * @param {string} p_ch - 処理要素の一つ前の文字\n\t * @param {number} i - 処理要素の添字\n\t * @param {string} ch - 処理要素の文字\n\t * @return {Object} result 戻り値\n\t * @return {boolean} result.cont - true: 呼び元で改行挿入せず continue\n\t * @return {number} result.ins - 手前に改行を挿入すべき要素の添字\n\t */\n\thyph_alg(\t// テスト用にpublic\n\t\ta\t: IChRect[],\n\t\tp_i\t: number,\n\t\tp_ch: string,\n\t\tii\t: number,\t// i >= 2\n\t\tch\t: string,\n\t): {cont: boolean, ins: number} {\n\t\t// 追い出し走査\n\t\tlet i = ii;\n\t\tif (this.#reg行末禁則.test(p_ch)) { /* empty */ }\t// 一つ前\n\t\telse if (this.#reg行頭禁則.test(ch)) {\t//(現在地 -> 前方走査)\n\t\t\twhile ((i = this.#i2pi(a, i)) >= 0) {\n\t\t\t\tif (! this.#reg行頭禁則.test(a[i]!.ch)) break;// 行頭禁則はスキップ\n\t\t\t}\n\t\t}\n\t\telse if (p_ch === ch && this.#reg分割禁止.test(p_ch)) { /* empty */ }// 一つ前&現在地\n\t\telse return {cont: true, ins: i +1};\t// 追い出しなし\n\n\t\t// 追い出しによる新行末二次判定(一つ前 -> 前方走査)\n\t\ti = p_i;\n\t\twhile ((i = this.#i2pi(a, i)) >= 0) {\n\t\t\tif (! this.#reg行末禁則.test(a[i]!.ch)) break;\t// 行末禁則はスキップ\n\t\t}\n\t\treturn {cont: false, ins: i +1};\n\t}\n\n\t/**\n\t * 抽象化した禁則処理アルゴリズム\n\t * @method hyph_alg\n\t * @param {IChRect[]} a - 文章の抽象化配列\n\t * @param {number} p_i - 処理要素の一つ前の添字\n\t * @param {string} p_ch - 処理要素の一つ前の文字\n\t * @param {number} i - 処理要素の添字\n\t * @return {Object} result 戻り値\n\t * @return {boolean} result.cont - true: 呼び元で改行挿入せず continue\n\t * @return {number} result.ins - 手前に改行を挿入すべき要素の添字\n\t */\n\thyph_alg_bura(\t// テスト用にpublic\n\t\ta\t: IChRect[],\n\t\tp_i\t: number,\n\t\tp_ch: string,\n\t\ti\t: number,\t// i >= 2\n\t): {cont: boolean, ins: number} {\n\t\tconst pp_i = this.#i2pi(a, p_i);\t// 改行後のルビで追い出し発生\n\t\tconst {ch: pp_ch} = a[pp_i]!;\n//console.log(`🎴 hyph_alg_bura pp:${pp_i}:${pp_ch}: p:${p_i}:${p_ch}: i:${i}:${a[i].ch}:`);\n\t\t// 改行前二個目に「ぶら下げ」がある\n\t\tif (this.#regぶら下げ.test(pp_ch) || this.#reg行頭禁則.test(pp_ch)) {\n\t\t\tlet j = p_i;\n\t\t\t// 改行前にも「ぶら下げ」がある\n\t\t\tif (this.#regぶら下げ.test(p_ch) || this.#reg行頭禁則.test(p_ch)) ++j;\n\n\t\t\t// ぶら下げ後……追い出し走査\n\t\t\tconst p_j = this.#i2pi(a, j);\t// pp_i ではない\n\t\t\tconst {ch: last_ch} = a[p_j]!;\t// 行末\n\t\t\tconst {ch: head_ch} = a[j]!;\t\t// 行頭\n\t\t\t// 分割禁止\n\t\t\tif (last_ch === head_ch && this.#reg分割禁止.test(head_ch)) return {cont: false, ins: p_j};\n\n\t\t\tif (! this.#reg行末禁則.test(last_ch)) return {cont: false, ins: j};\n\t\t\t// 行末禁則\n\t\t\tj = p_j;\n\t\t\tdo {\n\t\t\t\tif (! this.#reg行末禁則.test(a[j]!.ch)) break;\t// 行禁はスキップ\n\t\t\t} while ((j = this.#i2pi(a, j)) >= 0);\n\t\t\treturn {cont: false, ins: j +1};\t// 行末禁則\n\t\t}\n\n\t\t// 改行前二個目に「ぶら下げ」がない\n\t\tconst ppp_i = this.#i2pi(a, pp_i);\n\t\tif (i >= 3) {\n\t\t\tconst {ch: ppp_ch} = a[ppp_i]!;\n//console.log(`-- 改行前二個目に「ぶら下げ」がない ppp:${ppp_i}:${ppp_ch}: pp:${pp_i}:${pp_ch}: i:${i}`);\n\t\t\t// 改行前二個目に「分割禁止」\n\t\t\tif (this.#reg分割禁止.test(pp_ch)) {\t// 分割禁止\n//console.log(` == 改行前二個目に「分割禁止」:${ppp_ch === pp_ch}`);\n\t\t\t\tif (ppp_ch === pp_ch) return {cont: false, ins: ppp_i};\n\t\t\t}\n\t\t\t// 改行前三個目に「行末禁則」\n\t\t\tif (this.#reg行末禁則.test(ppp_ch)) {\t// 行末禁則\n\t\t\t\tlet j = ppp_i;\n//console.log(` == 改行前三個目に「行末禁則」 j:${j}:${a[j].ch}:`);\n\t\t\t\twhile ((j = this.#i2pi(a, j)) >= 0) {\n//console.log(` -- ch:${a[j].ch}`);\n\t\t\t\t\tif (! this.#reg行末禁則.test(a[j]!.ch)) break;// 行禁はスキップ\n\t\t\t\t}\n//console.log(` === j:${j +1}:${a[j +1].ch}: tn:${a[j +1].elm.parentElement?.tagName}`);\n\t\t\t\treturn {cont: false, ins: j +1};\t// 行末禁則\n\t\t\t}\n\t\t}\n\n\t\treturn {cont: false, ins: pp_i};\n\t}\n\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-argument */\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */\n/* eslint-disable @typescript-eslint/restrict-plus-operands */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-return */\n/* ***** BEGIN LICENSE BLOCK *****\n\tCopyright (c) 2025-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_InfTxLay} from './TxtStage';\nimport {DebugMng} from './DebugMng';\n\nimport {Texture} from 'pixi.js';\n\n\nexport function htm2tx(fnc: (tx2: any)=> void, htmTxt: HTMLSpanElement, infTL :T_InfTxLay, padTx4x: number, padTx4y: number, hidden = true) {\n\t\t// tsayen/dom-to-image: Generates an image from a DOM node using HTML5 canvas https://github.com/tsayen/dom-to-image\n\n/*---*/\n\t\tconst util = {\n\t\t\tescape: (str: string)=> str.replaceAll(/([.*+?^${}()|[\\]/\\\\])/g, '\\\\$1'),\n\t\t\tmimeType: (url: any)=> {\n\t\t\t\tconst extension = parseExtension(url).toLowerCase();\n\t\t\t\treturn mimes()[extension] || '';\n\t\t\t},\n\t\t\tdataAsUrl,\n\t\t\tisDataUrl,\n\t\t\tresolveUrl,\n\t\t\tgetAndEncode,\n\t\t\tasArray: (arrayLike: StyleSheetList)=> {\n\t\t\t\tconst a: StyleSheet[] = [];\n\t\t\t\tconst len = arrayLike.length;\n\t\t\t\tfor (let i=0; i<len; ++i) a.push(arrayLike[i]!);\n\t\t\t\treturn a;\n\t\t\t},\n\t\t};\n\t\t\tfunction mimes(): any {\n\t\t\t\t// Only WOFF and EOT mime types for fonts are 'real'\n\t\t\t\t// * see http://www.iana.org/assignments/media-types/media-types.xhtml\n\t\t\t\tconst WOFF = 'application/font-woff';\n\t\t\t\tconst JPEG = 'image/jpeg';\n\n\t\t\t\treturn {\n\t\t\t\t\t'woff': WOFF,\n\t\t\t\t\t'woff2': WOFF,\n\t\t\t\t\t'ttf': 'application/font-truetype',\n\t\t\t\t\t'eot': 'application/vnd.ms-fontobject',\n\t\t\t\t\t'png': 'image/png',\n\t\t\t\t\t'jpg': JPEG,\n\t\t\t\t\t'jpeg': JPEG,\n\t\t\t\t\t'gif': 'image/gif',\n\t\t\t\t\t'tiff': 'image/tiff',\n\t\t\t\t\t'svg': 'image/svg+xml'\n\t\t\t\t};\n\t\t\t}\n\n\n\t\tconst inliner = newInliner();\n\n\n\t\tconst fontFaces = newFontFaces();\n\n\n\t\tfunction embedFonts(node: any) {\n\t\t\treturn fontFaces.resolveAll()\n\t\t\t.then(cssText=> {\n\t\t\t\tconst styleNode = document.createElement('style');\n\t\t\t\tnode.appendChild(styleNode);\n\t\t\t\tstyleNode.appendChild(document.createTextNode(cssText));\n\t\t\t//console.log('cssText:%s:', cssText);\t//------------\n\t\t\t\treturn node;\n\t\t\t});\n\t\t}\n\n\n\t\t\tfunction parseExtension(url: any) {\n\t\t\t\tconst match = /\\.([^./]*?)$/g.exec(url);\n\t\t\t\treturn match?.[1] ?? '';\n\t\t\t}\n\n\t\t\tfunction isDataUrl(url: any) {\n\t\t\t\treturn url.search(/^(data:)/) !== -1;\n\t\t\t}\n\n\t\t\tfunction resolveUrl(url: any, baseUrl: any) {\n\t\t\t\tconst doc = document.implementation.createHTMLDocument();\n\t\t\t\tconst base = doc.createElement('base');\n\t\t\t\tdoc.head.appendChild(base);\n\t\t\t\tconst a = doc.createElement('a');\n\t\t\t\tdoc.body.appendChild(a);\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\tbase.href = baseUrl;\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\ta.href = url;\n\t\t\t\treturn a.href;\n\t\t\t}\n\n\t\t\tfunction getAndEncode(url: any) {\n\t\t\t\tconst TIMEOUT = 30000;\n\t\t\t\t//if(domtoimage.impl.options.cacheBust) {\n\t\t\t\t\t// Cache bypass so we dont have CORS issues with cached images\n\t\t\t\t\t// Source: https://developer.mozilla.org/en/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest#Bypassing_the_cache\n\t\t\t\t//\turl += ((/\\?/).test(url) ? \"&\" : \"?\") + (new Date).getTime();\n\t\t\t\t//}\n\n\t\t\t\treturn new Promise(function(resolve) {\n\t\t\t\t\tconst request = new XMLHttpRequest;\n\n\t\t\t\t\trequest.onreadystatechange = done;\n\t\t\t\t\trequest.ontimeout = timeout;\n\t\t\t\t\trequest.responseType = 'blob';\n\t\t\t\t\trequest.timeout = TIMEOUT;\n\t\t\t\t\trequest.open('GET', url, true);\n\t\t\t\t\trequest.send();\n\n\t\t\t\t\t//let placeholder;\n\t\t\t\t\t//if(domtoimage.impl.options.imagePlaceholder) {\n\t\t\t\t\t//\tlet split = domtoimage.impl.options.imagePlaceholder.split(/,/);\n\t\t\t\t\t//\tif(split && split[1]) {\n\t\t\t\t\t//\t\tplaceholder = split[1];\n\t\t\t\t\t//\t}\n\t\t\t\t\t//}\n\n\t\t\t\t\tfunction done() {\n\t\t\t\t\t\tif (request.readyState !== 4) return;\n\n\t\t\t\t\t\tif (request.status !== 200) {\n\t\t\t\t\t\t//\tif(placeholder) {\n\t\t\t\t\t\t//\t\tresolve(placeholder);\n\t\t\t\t\t\t//\t} else {\n\t\t\t\t\t\t\t\tfail('cannot fetch resource: ' + url + ', status: ' + request.status);\n\t\t\t\t\t\t//\t}\n\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst encoder = new FileReader;\n\t\t\t\t\t\tencoder.onloadend = function() {\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-base-to-string\n\t\t\t\t\t\t\tconst content = encoder.result!.toString().split(/,/)[1];\n\t\t\t\t\t\t\tresolve(content);\n\t\t\t\t\t\t};\n\t\t\t\t\t\tencoder.readAsDataURL(request.response);\n\t\t\t\t\t}\n\n\t\t\t\t\tfunction timeout() {\n\t\t\t\t\t//\tif(placeholder) {\n\t\t\t\t\t//\t\tresolve(placeholder);\n\t\t\t\t\t//\t} else {\n\t\t\t\t\t\t\tfail('timeout of ' + TIMEOUT + 'ms occured while fetching resource: ' + url);\n\t\t\t\t\t//\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfunction fail(message: any) {\n\t\t\t\t\t\tconsole.error(message);\n\t\t\t\t\t\tresolve('');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfunction dataAsUrl(content: any, type: any) {\n\t\t\t\treturn 'data:' + type + ';base64,' + content;\n\t\t\t}\n\n\n\t\tfunction newInliner() {\n\t\t\tconst URL_REGEX = /url\\(['\"]?([^'\"]+?)['\"]?\\)/g;\n\n\t\t\treturn {\n\t\t\t\tinlineAll,\n\t\t\t\tshouldProcess,\n\t\t\t};\n\n\t\t\tfunction shouldProcess(str: any) {\n\t\t\t\treturn str.search(URL_REGEX) !== -1;\n\t\t\t}\n\n\t\t\tfunction readUrls(str: any) {\n\t\t\t\tconst result: string[] = [];\n\t\t\t\tlet match: RegExpExecArray | null;\n\t\t\t\t// eslint-disable-next-line no-cond-assign\n\t\t\t\twhile (match = URL_REGEX.exec(str)) {\n\t\t\t\t\tresult.push(match[1]!);\n\t\t\t\t}\n\t\t\t\treturn result.filter(function(url) {\n\t\t\t\t\treturn ! util.isDataUrl(url);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfunction inline(str: any, url: any, baseUrl: any, get: any) {\n\t\t\t\treturn Promise.resolve(url)\n\t\t\t\t\t.then(url=> baseUrl ? util.resolveUrl(url, baseUrl) : url)\n\t\t\t\t\t.then(get || util.getAndEncode)\n\t\t\t\t\t.then(data=> util.dataAsUrl(data, util.mimeType(url)))\n\t\t\t\t\t.then(dataUrl=> str.replace(urlAsRegex(url), '$1' + dataUrl + '$3'));\n\n\t\t\t\tfunction urlAsRegex(url: any) {\n\t\t\t\t\treturn new RegExp('(url\\\\([\\'\"]?)(' + util.escape(url) + ')([\\'\"]?\\\\))', 'g');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction inlineAll(str: any, baseUrl: any, get?: any) {\n\t\t\t\tif (nothingToInline()) return Promise.resolve(str);\n\n\t\t\t\treturn Promise.resolve(str)\n\t\t\t\t\t.then(readUrls)\n\t\t\t\t\t.then(urls=> {\n\t\t\t\t\t\tlet done = Promise.resolve(str);\n\t\t\t\t\t\tfor (const url of urls) done = done.then(string=> inline(string, url, baseUrl, get));\n\t\t\t\t\t\treturn done;\n\t\t\t\t\t});\n\n\t\t\t\tfunction nothingToInline() {\n\t\t\t\t\treturn ! shouldProcess(str);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction newFontFaces() {\n\t\t\treturn {\n\t\t\t\tresolveAll,\n\t\t\t\timpl: {readAll}\n\t\t\t};\n\n\t\t\tfunction resolveAll() {\n\t\t\t\treturn readAll()\n\t\t\t\t.then(webFonts=> Promise.allSettled(\n\t\t\t\t\twebFonts.map((webFont: any)=> webFont.resolve())\n\t\t\t\t))\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-base-to-string\n\t\t\t\t.then(cssStrings=> cssStrings.join('\\n'));\n\t\t\t}\n\n\t\t\tfunction readAll() {\n\t\t\t\treturn Promise.resolve(util.asArray(document.styleSheets))\n\t\t\t\t\t.then(getCssRules)\n\t\t\t\t\t.then(selectWebFontRules)\n\t\t\t\t\t.then(rules=> rules.map(newWebFont));\n\t\t\t\t\t\t// console.log('map:%o:', rules) ||\n\n\t\t\t\tfunction selectWebFontRules(cssRules: any) {\n\t\t\t\t\treturn cssRules\n\t\t\t\t\t.filter((rule: any)=> rule.type === CSSRule.FONT_FACE_RULE)\n\t\t\t\t\t.filter((rule: any)=> inliner.shouldProcess(rule.style.getPropertyValue('src')));\n\t\t\t\t}\n\n\t\t\t\tfunction getCssRules(styleSheets: any) {\n\t\t\t\t\tconst cssRules: any = [];\n\t\t\t\t\tfor (const sheet of styleSheets) {\n\t\t\t\t\t//console.log('1:%o', sheet);\t//-------\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tif (sheet.href) continue;\n\t\t\t\t\t\t//console.log(sheet.cssRules);\n\t\t\t\t\t\t\tutil.asArray(sheet.cssRules || []).forEach(cssRules.push.bind(cssRules));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch (e) {\n\t\t\t\t\t\t\tconsole.error('Error while reading CSS rules from ' + sheet.href, String(e));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn cssRules;\n\t\t\t\t}\n\n\t\t\t\tfunction newWebFont(webFontRule: any) {\n\t\t\t\t\t//console.log('newWebFont:%o:', webFontRule);\t//-------\n\t\t\t\t\treturn {\n\t\t\t\t\t\tresolve: function resolve() {\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/prefer-optional-chain\n\t\t\t\t\t\t\tconst baseUrl = (webFontRule.parentStyleSheet || {}).href;\n\t\t\t\t\t\t\treturn inliner.inlineAll(webFontRule.cssText, baseUrl);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsrc() {\n\t\t\t\t\t\t\treturn webFontRule.style.getPropertyValue('src');\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n/*\n\t\tfetch('http://localhost:8080/prj/mat/my_himajihoso.woff2')\n\t\t.then(response=> {\n\t\t\tif (response.ok) return response.blob();\n\t\t\tthrow new Error('Network response was not ok.');\n\t\t})\n\t\t.then(blob=> new Promise((resolve, reject)=> {\n\t\t\tconst reader = new FileReader;\n\t\t\treader.onloadend = ()=> resolve(reader.result);\n\t\t\treader.onerror = reject;\n\t\t\treader.readAsDataURL(blob);\n\t\t}))\n\t\t.then(dataUrl => {\n\t\t\t// data:application/font-woff2;base64,d09GMk9U\n\t\t\tconst css =\n\t\t\t'body { margin: 0px; padding: 0px; overflow: hidden; }\\n'+\n\t\t\t'body { line-height: 36px; }\\n'+\n\n\t\t\t`@font-face { font-family: my_himajihoso; src: url(\"${\n\t\t\t\t'data:application/font-woff;base64,'+\n\t\t\t\tString(dataUrl)\n\t\t\t\t.split(/,/)[1]\n\t\t//\t\t.replace(/([.*+?^${}()|\\[\\]\\/\\\\])/g, '\\\\$1')\n\t\t\t}\"); }`;\n\n\t\tconsole.log('css:'+ css);\n\t\tconsole.log('@font-face { font-family: my_himajihoso; src: url(\"data:application/font-woff;base64,d09GMk9UVE8AAA...bhUAAA==\"); }\\n');\n\t\t\tthis.styleHtmTxt.appendChild(document.createTextNode(css));\n*/\n\n\t\tPromise.resolve(htmTxt)\n\t\t.then(node=> {\t//console.log(`🍇 toSvg`);\n\t\t\tconst cln = <HTMLSpanElement>node.cloneNode(true);\n\t\t\tcln.style.padding = '0px';\t\t// ややこしいのでシンプルに\n\t\t\tcln.style.paddingRight = padTx4x +'px';\n\t\t\tcln.style.paddingTop = padTx4y +'px';\n\t\t\tcln.style.left = '0px';\n\t\t\tcln.style.top = '0px';\n\t\t\tcln.style.width = infTL.$width -infTL.pad_left -infTL.pad_right +'px';\n\t\t\tcln.style.height = infTL.$height -infTL.pad_top -infTL.pad_bottom +'px';\n\t\t\t//console.log(cln.style.cssText);\n\t\t\thtmTxt.hidden = hidden;\n\t\t\treturn cln;\n\t\t})\n\t\t.then(embedFonts)\n\t\t.then(node=> {\t//console.log(`🍈 makeSvgDataUri`);\n\t\t\tnode.setAttribute('xmlns', 'http://www.w3.org/1999/xhtml');\n\t\t\tconst img = new Image;\n\t\t\t//img.crossOrigin = 'Anonymous';\t//--いまのとこ不要\n\t\t\timg.src = `data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${String(infTL.$width)\n\t\t\t}px\" height=\"${String(infTL.$height)\n\t\t\t}px\"><foreignObject x=\"0\" y=\"0\" width=\"100%\" height=\"100%\">${\n\t\t\t\t(new XMLSerializer).serializeToString(node)\n\t\t\t\t.replaceAll('#', '%23').replaceAll('\\n', '%0A')\n\t\t\t}</foreignObject></svg>` // ? + (new Date).getTime();\n\t\t\treturn new Promise(re=> {img.onload = ()=> re(img)});\n\t\t})\n\t\t.then(img=> new Promise(re=> setTimeout(()=> re(img) , 100)))\n\t\t\t// 無くすとSafariでテクスチャ取れない場合があった\n\t\t\t// clearTimeout()不要と判断\n\t\t.then((img: any)=> {\t//console.log(`🍉 toPng`);\n\t\t\tconst canvas = document.createElement('canvas');\n\t\t\tcanvas.width = infTL.$width;\n\t\t\tcanvas.height = infTL.$height;\n\t\t\tcanvas.getContext('2d')!.drawImage(img, 0, 0);\n\t\t\tfnc(Texture.from(canvas));\n\t\t})\n\t\t.catch((e: unknown)=> DebugMng.myTrace(`goTxt() = ${String(e)}`));\n\t}\n","/* eslint-disable @typescript-eslint/no-unsafe-argument */\n/* eslint-disable @typescript-eslint/restrict-plus-operands */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\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 {CmnLib, type IEvtMng, RPN_COMP_CHIN, argChk_Boolean, argChk_Num} from './CmnLib';\nimport type {TArg} from './Grammar';\nimport type {Config} from './Config';\nimport {CmnTween} from './CmnTween';\nimport {SpritesMng} from './SpritesMng';\nimport {DebugMng} from './DebugMng';\nimport type {IMakeDesignCast} from './LayerMng';\n//import {TxtLayDesignCast, TxtLayPadDesignCast} from './DesignCast';\nimport type {SysBase} from './SysBase';\nimport type {T_RP_Hyphenation, IChRect} from './Hyphenation';\nimport {Hyphenation} from './Hyphenation';\nimport type {ScriptIterator} from './ScriptIterator';\nimport {Reading} from './Reading';\nimport type {T_cmdTxt_JSON} from './TxtLayer';\nimport {htm2tx} from './htm2tx';\n\nimport {Container, Sprite, Graphics, Rectangle, Renderer, Application} from 'pixi.js';\nimport {Group, Tween} from '@tweenjs/tween.js'\n\n\nexport type T_InfTxLay = {\n\tfontsize\t: number;\n\t$width\t\t: number;\t// レイヤサイズであり、背景色(画像)サイズ\n\t$height\t\t: number;\n\tpad_left\t: number;\t// paddingLeft(レイヤサイズの内側のスペーサー)\n\tpad_right\t: number;\t// paddingRight\n\tpad_top\t\t: number;\t// paddingTop\n\tpad_bottom\t: number;\t// paddingBottom\n}\n\ntype T_SpTw = {\n\tsp\t: Container;\n\ttw\t: Tween<Container> | undefined;\n}\n\n\nexport type T_RP_layTxtStage = {\n\tinfTL\t\t: T_InfTxLay;\n\tcssText\t\t: string;\n\tleft\t\t: number;\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tch_filter\t: any[];\n\tfi_easing\t: string;\n\tfo_easing\t: string;\n\thyph\t\t: T_RP_Hyphenation;\n}\n\ntype T_ChInOutStyle = {\n\twait\t: number;\n\talpha\t: number;\n\tx\t\t: string;\n\ty\t\t: string;\n\twidth?\t: string;\n\theight?\t: string;\n\tnx\t\t: number;\n\tny\t\t: number;\n\tscale_x\t: number;\n\tscale_y\t: number;\n\trotate\t: number;\n\tjoin\t: boolean;\n\tease\t: string;\n\tdelay?\t: number;\n};\n\nexport class TxtStage extends Container {\n\tstatic\t#cfg\t: Config;\n\tstatic\t#appPixi: Application;\n\tstatic\tinit(cfg: Config, appPixi: Application): void {\n\t\tTxtStage.#cfg = cfg;\n\t\tTxtStage.#appPixi = appPixi;\n\n\t\tCmnTween.addGrp(TxtStage.grp);\n\t}\n\tstatic\treadonly\tgrp = new Group;\n\n\tstatic\t#evtMng\t: IEvtMng;\n\tstatic\t#scrItr\t: ScriptIterator;\n\tstatic\tsetEvtMng(evtMng: IEvtMng, scrItr: ScriptIterator) {\n\t\tTxtStage.#evtMng = evtMng;\n\t\tTxtStage.#scrItr = scrItr;\n\t}\n\n\tstatic\tdestroy() {\n\t\tTxtStage.grp.removeAll();\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\tTxtStage.#hChInStyle\t= Object.create(null);\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\tTxtStage.#hChOutStyle\t= Object.create(null);\n\n\t\tTxtStage.delBreak();\n\t}\n\n\n\t\t\t\t#htmTxt\t= document.createElement('span');\t// サンプリング元\n\treadonly\t#cntTxt\t\t\t= new Container;\t\t\t// サンプリング先\n\treadonly\t#grpDbgMasume\t= new Graphics;\n\tstatic\treadonly\t#hWarnStyle = {\n\t\t'background-color'\t\t: 0,\n\t\t'border-bottom-width'\t: 0,\n\t\t'border-left-width'\t\t: 0,\n\t\t'border-right-width'\t: 0,\n\t\t'border-top-width'\t\t: 0,\n\t\t'margin-bottom'\t: 0,\n\t\t'margin-left'\t: 0,\n\t\t'margin-right'\t: 0,\n\t\t'margin-top'\t: 0,\n\t};\n\n\n\t#hyph\t= new Hyphenation;\n\tnoticeCompTxt\t= ()=> { /* empty */ };\n\n\t#fncMasume;\n\n\n\tconstructor(private readonly ctn: Sprite, private readonly canFocus: ()=> boolean, private readonly sys: SysBase) {\n\t\tsuper();\n\n\t\tthis.#htmTxt.classList.add('sn_tx');\n\t\tthis.#htmTxt.style.position = 'absolute';\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tTxtStage.#appPixi.view.parentElement!.appendChild(this.#htmTxt);\n\n\t\tthis.addChild(this.#cntTxt);\n\n\t\tthis.addChild(this.#grpDbgMasume);\n\t\tthis.#grpDbgMasume.name = 'grpDbgMasume';\n\t\tconst fncMasumeLog = CmnLib.debugLog\n\t\t\t? ({ch, rect: {x, y, width, height}}: IChRect)=> console.log(`🍌 masume ch:${ch} x:${String(x)} y:${String(y)} w:${String(width)} h:${String(height)}`)\n\t\t\t: ()=> { /* empty */ };\n\t\tthis.#fncMasume = TxtStage.#cfg.oCfg.debug.masume\n\t\t\t? (cr: IChRect)=> {\n\t\t\t\tfncMasumeLog(cr);\n\n\t\t\t\tconst {x, y, width, height} = cr.rect;\n\t\t\t\tthis.#grpDbgMasume\n\t\t\t\t.beginFill(0x66CCFF, 0.5)\n\t\t\t\t.lineStyle(2, 0xFF3300, 1)\n\t\t\t\t.drawRect(x, y, width, height)\n\t\t\t\t.endFill();\n\t\t\t}\n\t\t\t: ()=> { /* empty */ };\n\n//\t\tthis.#idc = new TxtLayDesignCast(ctn, this);\n//\t\tthis.#idc.adopt(this.#idcCh);\n\n\t\tthis.noticeCompTxt = sys.isApp && TxtStage.#cfg.oCfg.debug.dumpHtm\n\t\t? ()=> {\n\t\t\tReading.notifyEndProc(RPN_COMP_CHIN);\n\n\t\t\tconst htm = this.#htmTxt.innerHTML;\n\t\t\tif (htm === '') return;\n\t\t\tconst {fn, ln} = TxtStage.#scrItr.nowScrFnLn();\n\t\t\tconst id = `dumpHtm ${\n\t\t\t\tctn.name.slice(0, -7)\t// 末尾「 page=B」削り\n\t\t\t\t.replaceAll(':', '=')\t\t\t// ファイル名で困る文字\n\t\t\t}(fn=${fn} line=${String(ln)})`;\n\t\t\tvoid sys.outputFile(\n\t\t\t\tsys.path_downloads + id +'.htm',\n`<!doctype html><html><head><meta charset=utf-8><title>${id}</title>\n<h1>${id}</h1>${\n\thtm\t// outerHTML からのレイヤ再現などしたいとこだがオーバースペック\n\t.replaceAll(/ class=\"sn_ch\"|animation-delay: \\d+ms; ?| data-add=\"{"ch_in_style":"default", "ch_out_style":"default"}\"/g, '')\n\t.replaceAll(' style=\"\"', '')\t// chromeで警告が出るので\n\t.replaceAll(/(<\\/?ruby>)/g, '\\n$1\\n')\n\t.replaceAll(/<(br|\\/span)>/g, '<$1>\\n')\n}`,\n\t\t\t);\n\t\t}\n\t\t: ()=> Reading.notifyEndProc(RPN_COMP_CHIN);\n\t}\n\n//\treadonly\t#idc\t:TxtLayDesignCast;\n//\treadonly\t#idcCh\t= new TxtLayPadDesignCast(this);\n\t#infTL :T_InfTxLay = {\n\t\tfontsize\t: 24,\n\t\t$width\t\t: 0,\t// レイヤサイズであり、背景色(画像)サイズ\n\t\t$height\t\t: 0,\n\t\tpad_left\t: 0,\t// paddingLeft(レイヤサイズの内側のスペーサー)\n\t\tpad_right\t: 0,\t// paddingRight\n\t\tpad_top\t\t: 0,\t// paddingTop\n\t\tpad_bottom\t: 0,\t// paddingBottom\n\t}\n\n\tlay(hArg: TArg) {\n\t\tconst s = this.#htmTxt.style;\n\t\tif ('style' in hArg) {\n\t\t\tif (hArg.style) {\n\t\t\t\tconst cln = document.createElement('span');\n\t\t\t\tcln.style.cssText = hArg.style;\n\t\t\t\tconst len = cln.style.length;\n\t\t\t\tfor (let i=0; i<len; ++i) {\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\t\tconst key: any = cln.style[i];\n\t\t\t\t\tif (key in TxtStage.#hWarnStyle) {\n\t\t\t\t\t\tDebugMng.myTrace(`${String(key)}は指定できません`, 'W');\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\ts[key] = cln.style[key]!;\n\t\t\t\t}\n\t\t\t\tif (! cln.style.opacity && 'alpha' in hArg) s.opacity = String(this.ctn.alpha);\n\t\t\t}\n\t\t\telse this.#htmTxt.style.cssText = '';\n\t\t}\n\t\telse if ('alpha' in hArg) s.opacity = String(this.ctn.alpha);\n\n\t\tif ('width' in hArg) s.width = String(hArg.width ?? '0') +'px';\n\t\tif ('height' in hArg) s.height = String(hArg.height ?? '0') +'px';\n\t\tif ('pl' in hArg) s.paddingLeft = String(hArg.pl ?? '0') +'px';\n\t\tif ('pr' in hArg) s.paddingRight = String(hArg.pr ?? '0') +'px';\n\t\tif ('pt' in hArg) s.paddingTop = String(hArg.pt ?? '0') +'px';\n\t\tif ('pb' in hArg) s.paddingBottom = String(hArg.pb ?? '0') +'px';\n\t\tthis.#hyph.lay(hArg);\n\t\tthis.#lay_sub();\n//\t\tthis.#idc.sethArg(hArg);\n\n\t\t// CSS・インラインレイアウトで右や上にはみ出る分の余裕\n\t\tthis.#left = this.ctn.position.x;\n\t\t\t//-(CmnLib.isSafari && !CmnLib.isMobile && this.#isTategaki\n\t\t\t//\t? this.#infTL.pad_left +this.#infTL.pad_right\n\t\t\t//\t: 0);\t// 無効化 2022/02/09\n\t\ts.transformOrigin = `${String(this.ctn.pivot.x)}px ${String(this.ctn.pivot.y)}px`;\n\t\tthis.cvsResize();\n\t\ts.display = this.ctn.visible ?'inline' :'none';\n\n\t\t// パディングキャスト変更時・クリック待ち表示を追従させる(高速再描写)\n\t\tif (':redraw' in hArg && this.#lenHtmTxt > 0) {\n\t\t\tconst aSpan = [\n\t\t\t\tthis.#htmTxt.innerHTML.replaceAll(/(animation-delay: )\\d+ms/g, '$10ms'),\n\t\t\t\t'<span class=\\'sn_ch\\' data-add=\\'{\"ch_in_style\":\"default\"}\\'> </span>',\n\t\t\t];\n\t\t\tthis.#clearText();\t// 消去\n\t\t\tthis.goTxt(aSpan, true);\t// 高速 goTxt()\n\t\t}\n\t}\n\t// oxlint-disable-next-line no-unused-private-class-members\n\t#lh_half\t= 0;\t// 「g」などで下が欠ける問題対策\n\t#lay_sub() {\n\t\tconst s = this.#htmTxt.style;\n\t\tconst fs = parseFloat(s.fontSize || '0');\n\t\tthis.#infTL.fontsize = fs;\n\n\t\tthis.#infTL.pad_left = parseFloat(s.paddingLeft || '0');\n\t\tthis.#infTL.pad_right = parseFloat(s.paddingRight || '0');\n\t\tthis.#infTL.pad_top = parseFloat(s.paddingTop || '0');\n\t\tthis.#infTL.pad_bottom = parseFloat(s.paddingBottom || '0');\n\t\tthis.#infTL.$width = parseFloat(s.width || '0');\n\t\tthis.#infTL.$height = parseFloat(s.height || '0');\n\t\tthis.position.set(this.#infTL.pad_left, this.#infTL.pad_top);\n\n\t\tthis.#isTategaki = s.writingMode === 'vertical-rl';\n\n\t\tthis.#padTx4x = 0;\n\t\tthis.#padTx4y = 0;\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\tconst lh = s.lineHeight ?? '0';\n\t\tthis.#lh_half = this.#isTategaki\n\t\t\t? 0\n\t\t\t: (\tlh.endsWith('px')\n\t\t\t\t? parseFloat(lh)\n\t\t\t\t: fs *parseFloat(lh) -fs) /2;\n\t\t\t// globalThis.getComputedStyle(this.htmTxt)がチョイチョイ値を返さないので\n\t}\n\tcvsResize() {\n\t\tconst s = this.#htmTxt.style;\n\t\tconst cvsScale = this.sys.cvsScale;\n\t\ts.left = `${String(this.sys.ofsLeft4elm +this.#left *cvsScale)}px`;\n\t\ts.top = `${String(this.sys.ofsTop4elm +this.ctn.position.y *cvsScale)}px`;\n\t\ts.transform = `rotate(${String(this.ctn.angle)}deg) scale(${String(this.ctn.scale.x *cvsScale)}, ${String(this.ctn.scale.y *cvsScale)})`;\n\n//\t\tthis.#idc.cvsResize();\n//\t\tthis.#idcCh.cvsResize();\n\t}\n\t#left = 0;\n\t#isTategaki = false;\n\tget tategaki() {return this.#isTategaki}\n\t#padTx4x = 0;\n\t#padTx4y = 0;\n\n\tget\tinfTL(): T_InfTxLay {return this.#infTL}\n\tget\tgetWidth() {return this.#infTL.$width}\n\tget\tgetHeight() {return this.#infTL.$height}\n\n\tsetMySize(width: number, height: number) {\n\t\tthis.#infTL.$width = width;\n\t\tthis.#infTL.$height = height;\n\t\tthis.#htmTxt.style.width = String(this.#infTL.$width) +'px';\n\t\tthis.#htmTxt.style.height = String(this.#infTL.$height) +'px';\n\t}\n\n\n\t#aGoTxt\t: (()=> void)[] = [];\t// FIFO実行バッファ\n\tgoTxt(aSpan: string[], instant: boolean) {\n\t\tconst f = ()=> this.#goTxt_Proc(aSpan, instant);\n\t\tif (this.#aGoTxt.push(f) === 1) f();\t// len=1 で実行中を示す\n\t}\n\n\t#aRect\t: IChRect[]\t= [];\n\t#lenHtmTxt = 0;\n\tstatic\treadonly\t#SPAN_LAST = '<span class=\\'sn_ch sn_ch_last\\'> </span>';\n\t#goTxt_Proc(aSpan: string[], instant: boolean) {\n\t\tTxtStage.#cntBreak.visible = false;\n\n\t\tlet begin = this.#aRect.length;\n\t\tlet bkHtm = '';\n\t\tif (begin === 0) {\t// 初回\n\t\t\tif (TxtStage.#cfg.oCfg.debug.masume) {\n\t\t\t\tif (CmnLib.debugLog) console.log(`🍌 masume ${this.name\n\t\t\t\t} v:${String(this.visible)} l:${String(this.x)\n\t\t\t\t} t:${String(this.y)} a:${String(this.alpha)\n\t\t\t\t} pl:${String(this.#infTL.pad_left)\n\t\t\t\t} pr:${String(this.#infTL.pad_right)\n\t\t\t\t} pt:${String(this.#infTL.pad_top)\n\t\t\t\t} pb:${String(this.#infTL.pad_bottom)\n\t\t\t\t} w:${String(this.#infTL.$width)\n\t\t\t\t} h:${String(this.#infTL.$height)}`);\n\n\t\t\t\tthis.#grpDbgMasume.clear()\n\t\t\t\t.beginFill(0x33FF00, 0.2)\t// 文字レイヤ\n\t\t\t\t.lineStyle(1, 0x33FF00, 1)\n\t\t\t\t.drawRect(-this.#infTL.pad_left, -this.#infTL.pad_top, this.#infTL.$width, this.#infTL.$height)\n\t\t\t\t\t// 親の親の cntInsidePadding が padding ぶん水平移動してるので引く。\n\t\t\t\t.endFill()\n\n\t\t\t\t.beginFill(0x0033FF, 0.2)\t// cntInsidePadding\n\t\t\t\t.lineStyle(2, 0x0033FF, 1)\n\t\t\t\t.drawRect(0, 0,\n\t\t\t\tthis.#infTL.$width -this.#infTL.pad_left -this.#infTL.pad_right,\n\t\t\t\tthis.#infTL.$height -this.#infTL.pad_top -this.#infTL.pad_bottom)\n\t\t\t\t.endFill();\n\t\t\t}\n\n\t\t\tthis.#htmTxt.innerHTML = [...aSpan].join('').replaceAll(/[\\n\\t]/g, '') +TxtStage.#SPAN_LAST;\t// 末尾改行削除挙動対策\n\n\t\t\tif (! this.#hyph.break_fixed) {\n\t\t\t\tconst sty = globalThis.getComputedStyle(this.#htmTxt);\n\t\t\t\tconst rs = parseFloat(sty.fontSize);\n\t\t\t\tif (this.#isTategaki) {\n\t\t\t\t\tthis.#hyph.break_fixed_left = (this.#infTL.$width -this.#infTL.pad_left -this.#infTL.pad_right -rs *1.5) *this.sys.cvsScale;\n\t\t\t\t\tthis.#hyph.break_fixed_top = 0;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.#hyph.break_fixed_left = 0;\n\t\t\t\t\tthis.#hyph.break_fixed_top = rs /2 *this.sys.cvsScale;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tbkHtm = this.#htmTxt.innerHTML;\n\t\t\t// 末尾改行削除挙動対策\n\t\t\t--begin;\n//console.log(`fn:TxtStage.ts nm=${this.name} begin:${begin} bkHtm=${bkHtm}=`);\n\t\t\tthis.#htmTxt.getElementsByClassName('sn_ch_last').item(0)?.remove();\n\t\t\t\t// 前回の末尾を削除\n\n\t\t\tthis.#htmTxt.querySelectorAll(':scope > br').forEach(e=> e.remove());\t// 前回の禁則処理を一度削除\n\t\t\t\t// :scope - CSS: カスケーディングスタイルシート | MDN https://developer.mozilla.org/ja/docs/Web/CSS/:scope\n\t\t\tthis.#htmTxt.insertAdjacentHTML(\n\t\t\t\t'beforeend',\n\t\t\t\taSpan.slice(this.#lenHtmTxt).join('').replaceAll(/[\\n\\t]/g, '')\n\t\t\t\t+TxtStage.#SPAN_LAST\t// 末尾改行削除挙動対策\n\t\t\t);\n\t\t}\n\t\t\t// 後の禁則処理判定で誤判定するので、innerHTML 時にムダな改行やタブは削除\n\t\t\t// [r]は後述コメントのHTMLタグになってるので問題なし\n\n\t\t// ルビ付き文字に背景指定(style='background:')がある場合、「文字」と「ルビ」と「その二つを含んだ領域」の三つが個別に塗られるが、三つめは背景指定を削除する\n\t\tthis.#htmTxt.querySelectorAll('.sn_ch:has(> ruby)').forEach(v=> {(<HTMLElement>v).style.background = ''});\t// :has直前に空白厳禁\n\n\t\tthis.#lenHtmTxt = aSpan.length;\n//console.log(`fn:TxtStage.ts nm=${this.name} === ==${this.#htmTxt.innerHTML.slice(360)}==`);\n\n\t\t// this.#getChRects()使用準備\n\t\tconst cvsScale = this.sys.cvsScale;\n\t\tconst bcr = this.#htmTxt.getBoundingClientRect();\n\t\tconst sx = bcr.left +this.#infTL.pad_left;\n\t\tconst sy = bcr.top +this.#infTL.pad_top;\n\t\tlet cnvRect :(rng: Range, ch: string)=> Rectangle;\n\t\tif (cvsScale === 1) cnvRect = (rng, ch)=> {\n\t\t\tconst r = rng.getBoundingClientRect();\n\t\t\treturn new Rectangle(\n\t\t\t\tr.left -sx,\n\t\t\t\tr.top -sy,\n\t\t\t\tr.width,\n\t\t\t\tr.height +('gjqy'.includes(ch) ?this.#lh_half :0)\n\t\t\t);\n\t\t};\n\t\telse {\n\t\t\t// Resizeを意識してDOM位置をPIXIに変換\n\t\t\t// transform scale を一時的に変更する手もあるが、ややずれるしDOM影響大\n\t\t\tconst ox = this.sys.ofsPadLeft_Dom2PIXI +bcr.left *(1- cvsScale);\n\t\t\tconst oy = this.sys.ofsPadTop_Dom2PIXI +bcr.top *(1- cvsScale);\n\t\t\tcnvRect = (rng, ch)=> {\n\t\t\t\tconst r = rng.getBoundingClientRect();\n\t\t\t\treturn new Rectangle(\n\t\t\t\t\t(r.left -ox) /cvsScale -sx,\n\t\t\t\t\t(r.top -oy) /cvsScale -sy,\n\t\t\t\t\tr.width /cvsScale,\n\t\t\t\t\t(r.height +('gjqy'.includes(ch) ?this.#lh_half :0)) /cvsScale,\n\t\t\t\t);\n\t\t\t};\n\t\t}\n\n\t\tconst [a, len] = this.#hyph.hyph(this.#htmTxt, cnvRect, this.#isTategaki, begin, bkHtm);\n\t\tthis.#aRect = a;\n\n\t\tconst ease = CmnTween.ease(this.#fi_easing);\n\n\t\tfor (let i=begin; i<len; ++i) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tconst cr = this.#aRect[i]!;\n\t\t\tconst {elm: {dataset, parentElement}, rect} = cr;\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\tconst arg = JSON.parse(dataset.arg ?? '{\"delay\": 0}');\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\tconst add = JSON.parse(dataset.add ?? '{}');\n\t\t\tconst cis = TxtStage.#hChInStyle[add.ch_in_style];\n\t\t\tthis.#fncMasume(cr);\n\n\t\t\tif (dataset.cmd === 'grp') {\n\t\t\t\tconst cnt = new Container;\t// 親コンテナかまし、即spWork()\n\t\t\t\tthis.#cntTxt.addChild(cnt);\n\t\t\t\t\t// 次のcsv2Spritesが即終わる場合もあるので先に行なう\n\t\t\t\tnew SpritesMng(arg.pic, cnt, sp=> {\n\t\t\t\t\tthis.#spWork(cnt, arg, add, rect, ease, cis ?? {});\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\t\t\t\tif (! cnt.parent) cnt.removeChild(sp);\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (dataset.lnk) {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion, @typescript-eslint/no-non-null-assertion\n\t\t\t\tconst eCh = <HTMLElement>parentElement!.closest('[data-arg]')!;\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\tconst aLnk = JSON.parse(eCh.dataset.arg ?? '{}');\n\t\t\t\taLnk.key = `lnk=[${String(i)}] `+ this.name;\n\t\t\t\tconst sp = new Sprite;\n\t\t\t\tthis.#spWork(sp, aLnk, add, rect, ease, cis ?? {});\n\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\tconst st_normal = aLnk.style ?? '';\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\tconst st_hover = st_normal +(aLnk.style_hover ?? '');\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\tconst st_clicked = st_normal +(aLnk.style_clicked ?? '');\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\tconst st_r_normal = aLnk.r_style ?? '';\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\tconst st_r_hover = st_r_normal +(aLnk.r_style_hover ?? '');\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\tconst st_r_clicked = st_r_normal +(aLnk.r_style_clicked ?? '');\n\n\t\t\t\tconst nlRt = Array.from(eCh.getElementsByTagName('rt'));\n\t\t\t\tfor (const e of nlRt) e.dataset.st_r_bk = e.style.cssText;\n\t\t\t\tconst st_bk = eCh.style.cssText;\n\t\t\t\tconst fncStyle = (st: string, st_r: string)=> {\n\t\t\t\t\teCh.style.cssText = st_bk + st;\n\t\t\t\t\tfor (const e of nlRt) e.style.cssText = e.dataset.st_r_bk + st_r;\n\t\t\t\t};\n\n\t\t\t\tconst enabled = argChk_Boolean(aLnk, 'enabled', true);\n\t\t\t\tif (enabled) TxtStage.#evtMng.button(aLnk, sp,\n\t\t\t\t\t()=> fncStyle(st_normal, st_r_normal),\n\t\t\t\t\t()=> {\n\t\t\t\t\t\tif (! this.canFocus()) return false;\n\n\t\t\t\t\t\tfncStyle(st_hover, st_r_hover);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t},\n\t\t\t\t\t()=> fncStyle(st_clicked, st_r_clicked)\n\t\t\t\t);\n\t\t\t\telse fncStyle(\n\t\t\t\t\tst_normal +(aLnk.style_disable ?? 'color: gray;'),\n\t\t\t\t\tst_r_normal +(aLnk.r_style_disable ?? 'color: gray;')\n\t\t\t\t);\n\t\t\t\tthis.#cntTxt.addChild(sp);\n\t\t\t}\n\t\t}\n\n\t\t// 文字出現演出・開始〜終了\n\t\tconst chs = Array.from(<HTMLCollectionOf<HTMLElement>>this.#htmTxt.getElementsByClassName('sn_ch_yet'));\n// console.log(`fn:TxtStage.ts nm=${this.name} StartChIn <==`);\n\t\tthis.#fncEndChIn = ()=> {\n// console.log(`fn:TxtStage.ts nm=${this.name} fncEndChIn ==> '${lastElm?.textContent}' cls:${lastElm?.className}:`);\n\n\t\t\tthis.#fncEndChIn = ()=> false;\n\t\t\tfor (const v of chs) v.className = 'sn_ch';\n\t\t\tTxtStage.#cntBreak.position.set(\n\t\t\t\tthis.#hyph.break_fixed_left,\n\t\t\t\tthis.#hyph.break_fixed_top,\n\t\t\t);\n\t\t\tTxtStage.#cntBreak.visible = true;\n\t\t\t/*\n\t\t\t\tこれらはセットで確認すること。兼ね合いにより、いずれかが破綻する場合がある\n\t\t\t\t\t- 末尾文字表示でカーソルが次行先頭に来てしまうことのないよう\n\t\t\t\t\t- 改行→クリック待ち、の後で改行が消えないよう\n\t\t\t\t\t- 冒頭クリック待ち+改行での表示確認\n\t\t\t*/\n\t\t\tthis.noticeCompTxt();\n\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tconst f = this.#aGoTxt.shift()!;\t// 実行中の一個必ず入ってる(clearText注意)\n\t\t\tif (this.#aGoTxt.length > 0) f();\t// まだあれば実行待ちなので実行\n\n\t\t\treturn true;\n\t\t};\n\n\t\t// アニメ開始(sn_ch を置換しないよう注意)\n\t\tfor (const v of chs) v.className = v.className.replace('sn_ch_yet sn', 'go');\n\t\tif (begin > 0) ++begin;\t// 末尾改行削除挙動対策\n\n\t\t// 文字表示に時間をかける最後の文字を探す。末尾はダミー(#SPAN_LAST)\n\t\tlet lastElm: HTMLElement | undefined = undefined;\n\t\tfor (let i=len -2; i>=0; --i) {\t\t// 末尾の手前から\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tconst {elm} = this.#aRect[i]!;\n\t\t\tif (elm.tagName !== 'SPAN') continue;\t// ルビ以外\n\n//console.log(`fn:TxtStage.ts nm=${this.name} txt:${elm.textContent}: i:${i} begin:${begin} len:${len} elm:%o`, elm);\n\t\t\tlastElm = elm.parentElement?.tagName === 'RUBY'\n\t\t\t\t? elm.parentElement.parentElement ?? elm // [tcy]も[graph]も\n\t\t\t\t: elm;\n\t\t\tbreak;\n\t\t}\n\t\tif (! lastElm || instant || begin === len) {this.#fncEndChIn(); return}\n\t\t\t// 「animation-duration: 0ms;」だと animationend が発生しないので。\n\t\t\t// if 三項目の === は右クリック戻りで起こる\n\n\t\tconst fnc = ()=> {\n\t\t\tlastElm.removeEventListener('animationend', fnc);\n\t\t\t\t// {once: true} より、明示的な removeEventListener のほうがサクサク解放するようである。屋上屋を架す事になりにくく、未解放リソースグラフでも低く抑えられる。\n\t\t\tthis.#fncEndChIn();\n\t\t};\n\t\tlastElm.addEventListener('animationend', fnc, {once: true, signal: this.#ac.signal});\t// クリックキャンセル時は発生しない\n\t\t\t// 差し替えるので「()=> 」形式のままにすること\n\t}\n\t#fncEndChIn: ()=> boolean\t= ()=> false;\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t#spWork(sp: Container, arg: T_ChInOutStyle, add: any, rct: Rectangle, ease: (k: number)=> number, cis: any) {\n\t\tsp.alpha = 0;\n\t\tif (arg.x) rct.x = arg.x.startsWith('=')\n\t\t\t? rct.x +parseInt(arg.x.slice(1))\n\t\t\t: parseInt(arg.x);\n\t\tif (arg.y) rct.y = arg.y.startsWith('=')\n\t\t\t? rct.y +parseInt(arg.y.slice(1))\n\t\t\t: parseInt(arg.y);\n\t\tif (arg.width) rct.width = parseInt(arg.width);\n\t\tif (arg.height) rct.height = parseInt(arg.height);\n\t\tif (arg.wait) cis.wait = arg.wait;\n\t\tsp.width = rct.width;\n\t\tsp.height = rct.height;\n\t\tif (cis.x) sp.position.set(\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-call\n\t\t\tcis.x.startsWith('=') ?rct.x +sp.width *cis.nx :cis.nx,\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-call\n\t\t\tcis.y.startsWith('=') ?rct.y +sp.height *cis.ny :cis.ny\n\t\t);\n\t\telse sp.position.set(rct.x, rct.y,);\n\n\t\tconst tw = new Tween(sp)\n\t\t.to({ alpha: 1, x: rct.x, y: rct.y, width: rct.width, height: rct.height, angle: 0 }, cis.wait ?? 0)\n\t\t.easing(ease)\n\t\t.delay((add.wait ?? 0) +(arg.delay ?? 0))\n\t\t.onComplete(()=> {\n\t\t\tst.tw = undefined;\n\t\t\t//(略)\tif (rct.width === 0 || rct.height === 0) return;\n\t\t\t//if (sp instanceof Sprite) sp.cacheAsBitmap = true;\n\t\t\t// これを有効にすると[snapshot]で文字が出ない\n\t\t})\n\t\t.start();\n\t\tTxtStage.grp.add(tw);\n\n\t\tconst st: T_SpTw = {sp, tw};\n\t\tthis.#aSpTw.push(st);\n\t}\n\t#aSpTw\t\t: T_SpTw[]\t= [];\n\n\tskipChIn(): boolean {\t// true: 文字出現中だったので、停止する\n\t\tlet wasChInIng = this.#fncEndChIn();\n\t\tfor (const st of this.#aSpTw) {\t// Text Skip。stop() と end() は別!\n\t\t\tif (st.tw) {st.tw.stop().end(); wasChInIng = true}\n\t\t}\n\t\tthis.#aSpTw = [];\n\t\treturn wasChInIng;\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\tstatic\t#hChInStyle: {[nm: string]: T_ChInOutStyle}\t= Object.create(null);\n\tstatic\treadonly\t#REG_NG_CHSTYLE_NAME_CHR\t= /[{\\s.,*{]/;\n\t\t// https://regex101.com/r/APC91I/1\n\tstatic\tinitChStyle() {\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\tTxtStage.#hChInStyle = Object.create(null);\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\tTxtStage.#hChOutStyle = Object.create(null);\n\t}\n\tstatic\tgetChInStyle(name: string) {return TxtStage.#hChInStyle[name]}\n\tstatic\tch_in_style(hArg: TArg): T_ChInOutStyle {\n\t\tconst {name} = hArg;\n\t\tif (! name) throw 'nameは必須です';\n\t\tif (TxtStage.#REG_NG_CHSTYLE_NAME_CHR.test(name)) throw `name【${name}】に使えない文字が含まれます`;\n\t\tif (name in TxtStage.#hChInStyle) throw `name【${name}】はすでにあります`;\n\n\t\tconst x = String(hArg.x ?? '=0');\n\t\tconst y = String(hArg.y ?? '=0');\n\t\tconst ret = TxtStage.#hChInStyle[name] = {\n\t\t\twait\t: argChk_Num(hArg, 'wait', 500),\t// アニメ・FI時間\n\t\t\talpha\t: argChk_Num(hArg, 'alpha', 0),\n\t\t\tx,\t// 初期x値\n\t\t\ty,\t// [tsy]と同様に絶対・相対指定可能\n\t\t\t// {x:500}\t\t\tX位置を500に\n\t\t\t// {x:'=500'}\t\t現在のX位置に+500加算した位置\n\t\t\t// {x:'=-500'}\t\t現在のX位置に-500加算した位置\n\t\t\t// {x:'250,500'}\t+250から+500までの間でランダムな値をX位置に\n\t\t\t// {x:'=250,500'}\t+250から+500までの間でランダムな値を現在のX位置に加算\n\t\t\tnx\t\t: parseFloat(x.at(0) === '=' ? x.slice(1) : x),\n\t\t\tny\t\t: parseFloat(y.at(0) === '=' ? y.slice(1) : y),\n\t\t\tscale_x\t: argChk_Num(hArg, 'scale_x', 1),\n\t\t\tscale_y\t: argChk_Num(hArg, 'scale_y', 1),\n\t\t\trotate\t: argChk_Num(hArg, 'rotate', 0),\n\t\t\tjoin\t: argChk_Boolean(hArg, 'join', true),\n\t\t\t\t\t\t// 文字を順番に出すか(true)同時か(false)\n\t\t\tease\t: hArg.ease ?? 'ease-out',\n\t\t};\n\t\treturn ret;\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\tstatic\t#hChOutStyle: {[nm: string]: T_ChInOutStyle}= Object.create(null);\n\tstatic\tgetChOutStyle(name: string) {return TxtStage.#hChOutStyle[name]}\n\tstatic\tch_out_style(hArg: TArg): T_ChInOutStyle {\n\t\tconst {name} = hArg;\n\t\tif (! name) throw 'nameは必須です';\n\t\tif (TxtStage.#REG_NG_CHSTYLE_NAME_CHR.test(name)) throw `name【${name}】に使えない文字が含まれます`;\n\t\tif (name in TxtStage.#hChOutStyle) throw `name【${name}】はすでにあります`;\n\n\t\tconst x = String(hArg.x ?? '=0');\n\t\tconst y = String(hArg.y ?? '=0');\n\t\tconst ret = TxtStage.#hChOutStyle[name] = {\n\t\t\twait\t: argChk_Num(hArg, 'wait', 500),\t// アニメ・FI時間\n\t\t\talpha\t: argChk_Num(hArg, 'alpha', 0),\n\t\t\tx,\t// 初期x値\n\t\t\ty,\t// [tsy]と同様に絶対・相対指定可能\n\t\t\t// {x:500}\t\t\tX位置を500に\n\t\t\t// {x:'=500'}\t\t現在のX位置に+500加算した位置\n\t\t\t// {x:'=-500'}\t\t現在のX位置に-500加算した位置\n\t\t\t// {x:'250,500'}\t+250から+500までの間でランダムな値をX位置に\n\t\t\t// {x:'=250,500'}\t+250から+500までの間でランダムな値を現在のX位置に加算\n\t\t\tnx\t\t: parseFloat(x.at(0) === '=' ? x.slice(1) : x),\n\t\t\tny\t\t: parseFloat(y.at(0) === '=' ? y.slice(1) : y),\n\t\t\tscale_x\t: argChk_Num(hArg, 'scale_x', 1),\n\t\t\tscale_y\t: argChk_Num(hArg, 'scale_y', 1),\n\t\t\trotate\t: argChk_Num(hArg, 'rotate', 0),\n\t\t\tjoin\t: argChk_Boolean(hArg, 'join', false),\n\t\t\t\t\t\t// 文字を順番に出すか(true)同時か(false)\n\t\t\tease\t: hArg.ease ?? 'ease-out',\n\t\t};\n\t\treturn ret;\n\t}\n\n\tstatic\treadonly\t#cntBreak\t= new Container;\n\tstatic\t\t\t\t#spsBreak\t= new SpritesMng;\n\tdispBreak(o: T_cmdTxt_JSON) {\n\t\tTxtStage.delBreak();\n\n\t\tconst cnt = TxtStage.#cntBreak;\n\t\tcnt.visible = false;\n\t\tthis.addChild(cnt);\t// 次のcsv2Spritesが即終わる場合もあるので先に行なう\n\t\tTxtStage.#spsBreak.destroy();\n\t\tTxtStage.#spsBreak = new SpritesMng(o.pic, cnt, sp=> {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\t\tif (cnt.parent) {\n\t\t\t\tsp.x = argChk_Num(o, 'x', 0);\n\t\t\t\tsp.y = argChk_Num(o, 'y', 0);\n\t\t\t\tsp.width = argChk_Num(o, 'width', this.#infTL.fontsize);\n\t\t\t\tsp.height = argChk_Num(o, 'height', this.#infTL.fontsize);\n\t\t\t}\n\t\t\telse cnt.removeChild(sp);\n\t\t});\n\t}\n\tstatic\tdelBreak() {\n\t\tconst cnt = TxtStage.#cntBreak;\n\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\tcnt.parent?.removeChild(cnt);\t// 複数メッセージウインドウを想定\n\t\tTxtStage.#spsBreak.destroy();\n\t}\n\n\t#fi_easing\t= 'Quadratic.Out';\n\t#fo_easing\t= 'Quadratic.Out';\n\t#ac = new AbortController;\n\t#clearText() {\n\t\tthis.#grpDbgMasume.clear();\n\t\tthis.#aRect = [];\n\t\tthis.#lenHtmTxt = 0;\n\t\tthis.#aGoTxt = [];\n\t\tthis.#ac.abort();\n\t\tthis.#ac = new AbortController;\n\n\t\t//utils.clearTextureCache();\t// 改ページと思われるこのタイミングで\n\t\tthis.skipChIn();\n\t\tconst n = document.createElement('span');\n\t\tn.style.cssText = this.#htmTxt.style.cssText;\n\t\tn.classList.value = this.#htmTxt.classList.value;\n\t\t\t// 以下よりノード数の最大が下がる\n\t\t\t// const n = <HTMLSpanElement>this.#htmTxt.cloneNode(true);\n\t\t\t// n.textContent = '';\n\t\t\t// // this.htmTxt.innerHTML = '';\t// 上記のほうが早いらしい\n\t\tconst old = this.#htmTxt;\n\t\tconst a = Array.from(<HTMLCollectionOf<HTMLElement>>old.getElementsByClassName('sn_ch'));\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\told.parentElement!.insertBefore(n, old);\n\n\t\tlet sum_wait = 0;\n\t\ta.forEach(elm=> {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\tconst add = JSON.parse(\n\t\t\t\telm.dataset.add ??\t\t\t\t// 通常文字\n\t\t\t\telm.children[0]?.getAttribute('data-add') ??\t// ルビ\n\t\t\t\telm.children[0]?.children[0]\n\t\t\t\t\t?.getAttribute('data-add') ?? '{}'\t\t// 縦中横\n\t\t\t);\n\t\t\tif (! add.ch_out_style) return;\n\n\t\t\tconst cos = TxtStage.#hChOutStyle[add.ch_out_style];\n\t\t\tif (! cos) return;\n\t\t\tif (cos.wait === 0) {elm.style.display = 'none'; return}\n\n\t\t\tsum_wait += cos.wait;\n\t\t\tif (! cos.join) elm.style.animationDelay = '0ms';\n\t\t\telm.classList.add(`go_ch_out_${String(add.ch_out_style)}`);\n\t\t});\n\n\t\tconst end = ()=> {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\told.parentElement!.removeChild(old);\n\t\t\tfor (const c of this.#cntTxt.removeChildren()) {\n\t\t\t\tif (c instanceof Container) TxtStage.#evtMng.unButton(c);\n\t\t\t\tc.destroy();\n\t\t\t}\n\t\t};\n\t\tif (sum_wait === 0) {\n\t\t\tthis.#htmTxt.textContent = '';\n\t\t\tthis.#htmTxt = document.createElement('span');\n\t\t\tend();\n\t\t}\n\t\telse {\n\t\t\tconst h = old.lastElementChild;\n\t\t\tif (h) {\n\t\t\t\tconst fnc = ()=> {\n\t\t\t\t\th.removeEventListener('animationend', fnc);\n\t\t\t\t\t\t// {once: true} より、明示的な removeEventListener のほうがサクサク解放するようである。屋上屋を架す事になりにくく、未解放リソースグラフでも低く抑えられる。\n\t\t\t\t\tend();\n\t\t\t\t};\n\t\t\t\th.addEventListener('animationend', fnc, {once: true, signal: this.#ac.signal});\n\t\t\t}\n\t\t\telse end();\n\t\t}\n\n\t\tthis.#htmTxt = n;\n\t}\n\treNew(): TxtStage {\n\t\tthis.#clearText();\n\n\t\tconst to = new TxtStage(this.ctn, this.canFocus, this.sys);\n\t\t\t// ()=> this.canFocus() だとリソースリークになる\n\t\tto.#infTL = this.#infTL;\n\t\tto.#htmTxt.style.cssText = this.#htmTxt.style.cssText;\n\t\tto.#left = this.#left;\n\t\tto.name = this.name;\n\t\tto.#lay_sub();\n//\t\tto.#idc.sethArg(this.#idc.gethArg());\n\n\t\tto.#ch_filter = this.#ch_filter;\n\t\tto.#fi_easing = this.#fi_easing;\n\t\tto.#fo_easing = this.#fo_easing;\n\n\t\tthis.#hyph.reNew(to.#hyph);\n\n\t\tthis.destroy();\n\n\t\treturn to;\n\t}\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t#ch_filter\t: any[] | undefined = undefined;\t// 文字にかけるフィルター\n\n\n\trecord() {return {\n\t\tinfTL\t\t: this.#infTL,\n\n\t\tcssText\t\t: this.#htmTxt.style.cssText,\n\t\tleft\t\t: this.#left,\n//\t\tidc_hArg\t: this.#idc.gethArg(),\n\n\t\tch_filter\t: this.#ch_filter,\n\t\tfi_easing\t: this.#fi_easing,\n\t\tfo_easing\t: this.#fo_easing,\n\n\t\thyph\t\t: this.#hyph.record(),\n\t}}\n\tplayback(hLay: T_RP_layTxtStage) {\n\t\tthis.#infTL = hLay.infTL;\n\t\tthis.position.set(this.#infTL.pad_left, this.#infTL.pad_top);\n\n\t\tthis.#htmTxt.style.cssText = hLay.cssText;\n\t\tthis.#left = hLay.left;\n\t\tthis.#lay_sub();\n//\t\tthis.#idc.sethArg(hLay.idc_hArg);\n\n\t\tthis.#ch_filter\t= hLay.ch_filter;\n\t\tthis.#fi_easing\t= hLay.fi_easing;\n\t\tthis.#fo_easing\t= hLay.fo_easing;\n\n\t\tthis.#hyph.playback(hLay.hyph);\n\t}\n\n\tget cssText() {return this.#htmTxt.style.cssText}\n\tset cssText(ct: string) {this.#htmTxt.style.cssText = ct}\n\n\t#sss :Sprite | undefined = undefined;\n\tsnapshot(rnd: Renderer, re: ()=> void) {\n\t\thtm2tx(tx=> {\n\t\t\tthis.#sss = Sprite.from(tx);\t// Safariだけ文字影が映らない\n\t\t\tif (this.#isTategaki) {\n\t\t\t\tthis.#sss.x += CmnLib.stageW -(this.#left +this.#infTL.$width)\n\t\t\t\t//- ((CmnLib.isSafari && !CmnLib.isMobile)\t// 無効化 2022/02/09\n\t\t\t\t//\t? 0\n\t\t\t\t//\t: this.#infTL.pad_left +this.#infTL.pad_right);\n\t\t\t}\n\t\t\tthis.#sss.y -= this.#padTx4y;\n\t\t\tthis.#sss.texture.frame = new Rectangle(\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\tMath.min(this.#sss.width, this.#infTL.$width -this.#left),\n\t\t\t\tMath.min(this.#sss.height, this.#infTL.$height),\n\t\t\t);\t// これがないと画面サイズを超える\n\t\t\tthis.#cntTxt.addChild(this.#sss);\n\t\t\trnd.render(this.#sss, {clear: false});\n\t\t\tre();\n\t\t}, this.#htmTxt, this.#infTL, this.#padTx4x, this.#padTx4y, false);\n\t}\n\tsnapshot_end() {\n\t\tif (! this.#sss) return;\n\t\tthis.#cntTxt.removeChild(this.#sss);\n\t\tthis.#sss = undefined;\n\t}\n\n\tmakeDesignCast(_gdc: IMakeDesignCast) {\n//\tmakeDesignCast(gdc: IMakeDesignCast) {\n//\t\tgdc(this.#idc);\n\n//\t\tconst o = this.#idc.gethArg();\n//\t\tthis.#idcCh.sethArg({...o, ':id_dc': o[':id_tag'] +'_pad'});\n//\t\tgdc(this.#idcCh);\n\t}\n\tshowDesignCast() { /* empty */ }\n//\tshowDesignCast() {this.#idc.visible = true; this.#idcCh.visible = true}\n\n\tdump(): string {\n\t\tconst aStyle: string[] = [];\n\t\tconst s = this.#htmTxt.style;\n\t\tconst len = s.length;\n\t\tfor (let i=0; i<len; ++i) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\tconst key: any = s[i];\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\taStyle.push(`\"${String(key)}\":\"${s[key]!.replaceAll(/([\"\\\\])/g, '\\\\$1')}\"`);\n\t\t}\n\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion, @typescript-eslint/no-non-null-assertion\n\t\treturn `\"txt\":\"${this.#htmTxt.textContent!.replaceAll(/([\"\\\\])/g, '\\\\$1')\n\t\t}\", \"style\":{${aStyle.join(',')}}`;\n\t\t\t// 4Debug。++カウンターし、dump表示させても良さげ\n\t}\n\n\toverride destroy() {\n\t\tTxtStage.delBreak();\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tthis.#htmTxt.parentElement!.removeChild(this.#htmTxt);\n\t\t// this.#htmTxt.textContent = '';\t// 有効性が逆効果気味\n\t\tthis.#htmTxt = document.createElement('span');\t// リソース解放に有効\n\t\tthis.removeChild(this.#cntTxt);\n\t\tthis.removeChild(this.#grpDbgMasume);\n\n\t\tthis.#grpDbgMasume.clear();\n\t\tthis.#fncMasume = ()=> { /* empty */ };\t// リソース解放にやや有効?\n\t\tthis.#aGoTxt = [];\n\t\tthis.#aRect\t= [];\n\t\tthis.#lenHtmTxt = 0;\n\t\tthis.#aSpTw = [];\t// リソース解放に有効\n\t\tthis.#ac.abort();\t// 有効性が低い、が保険で\n\t\tthis.#ch_filter = undefined;\n\n\t\tsuper.destroy();\n\t}\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* ***** BEGIN LICENSE BLOCK *****\n\tCopyright (c) 2018-2025 Famibee (famibee.blog38.fc2.com)\n\n\tThis software is released under the MIT License.\n\thttp://opensource.org/licenses/mit-license.php\n** ***** END LICENSE BLOCK ***** */\n\nimport type {SysBase} from './SysBase';\nimport {Layer, type T_RecordPlayBack_lay} from './Layer';\nimport {uint, CmnLib, type IEvtMng, argChk_Boolean, argChk_Num, initStyle, addStyle, argChk_Color} from './CmnLib';\nimport type {T_HTag, TArg} from './Grammar';\nimport type {T_Variable, T_PutCh} from './CmnInterface';\nimport {type T_RP_layTxtStage, TxtStage} from './TxtStage';\nimport type {Config} from './Config';\nimport {RubySpliter} from './RubySpliter';\nimport {SpritesMng} from './SpritesMng';\nimport {Button} from './Button';\nimport type {IMakeDesignCast} from './LayerMng';\nimport {DebugMng} from './DebugMng';\nimport {SEARCH_PATH_ARG_EXT} from './ConfigBase';\nimport {Reading} from './Reading';\nimport type {ScriptIterator} from './ScriptIterator';\nimport type {T_LOG} from './Log';\n\nimport {Sprite, DisplayObject, Graphics, Container, Renderer, Application} from 'pixi.js';\n\n\nexport type T_RP_layTxt = T_RecordPlayBack_lay & {\n\tenabled\t\t: boolean;\n\tr_cssText\t: string;\n\tr_align\t\t: string;\n\ttxs\t\t\t: T_RP_layTxtStage;\n\tb_alpha\t\t: number;\n\tb_alpha_isfixed\t: boolean;\n\tb_do\t\t: string;\n\tb_pic\t\t: string;\n\tb_color\t\t: string;\n\tbtns\t\t: string[];\n}\n\nexport type T_cmdTxt_JSON = {\n\tid?\t\t\t: string;\n\n\t':link'?\t: string;\n\ttext?\t\t: string;\t// 4 ch\n\twait?\t\t: string;\t// 4 ch\n\t\t// JSON.stringify は数字でも文字にする(HArg と相違)\n\trecord?\t\t: boolean;\t// 4 ch\n\n\tpic?\t\t: string;\t// 4 graph\n\n\tfn?\t\t\t: string;\t// 4 link\n\tlabel?\t\t: string;\t// 4 link\n\turl?\t\t: string;\t// 4 link\n\n\tstyle?\t\t: string;\t// 4 tcy, link\n\tr_style?\t: string;\n\tstyle_hover\t\t: string;\t// 4 link\n\tstyle_clicked\t: string;\t// 4 link\n\tr_align?\t: string;\t// 4 pushSpan(), mergePushSpan()\n\n\tt?\t: string;\t// 4 tcy\n\tr?\t: string;\t// 4 tcy\n\n\tin_style?\t: string;\t// 4 set_ch_in\n\tout_style?\t: string;\t// 4 set_ch_out\n\n\n\tdelay?\t: number;\t// JSON 受け渡し後なので number でもいい\n}\n\n\nexport class TxtLayer extends Layer {\n\tstatic\t#cfg\t\t: Config;\n\tstatic\t#val\t\t: T_Variable;\n\tstatic\t#isPageFore\t: (me: TxtLayer)=> boolean;\n\tstatic\t#log\t\t: T_LOG;\n\tstatic\tinit(cfg: Config, hTag: T_HTag, val: T_Variable, log: T_LOG, isPageFore: (me: TxtLayer)=> boolean, appPixi: Application): void {\n\t\tthis.#cfg = cfg;\n\t\tTxtStage.init(cfg, appPixi);\n\t\tthis.#val = val;\n\t\tthis.#log = log;\n\t\tthis.#isPageFore = isPageFore;\n\n\t\tval.setDoRecProc(doRec=> this.chgDoRec(doRec));\n\n\t\thTag.autowc\t\t\t= o=> this.#autowc(o);\t// 文字を追加する\n\t\thTag.autowc({enabled: false, text: '', time: 0});\n\t\thTag.ch_in_style\t= o=> this.#ch_in_style(o);\t// 文字出現演出\n\t\thTag.ch_out_style\t= o=> this.#ch_out_style(o);\t// 文字消去演出\n\n\t\t// ギャラリーリロード用初期化\n\t\tTxtStage.initChStyle();\n\t\tinitStyle();\n\n\t\taddStyle(\n\t\t\tcfg.matchPath('.+', SEARCH_PATH_ARG_EXT.FONT)\n\t\t\t.flatMap(o=> Object.values(o).map(v=> `\n@font-face {\n\tfont-family: '${String(v)}';\n\tsrc: url('${this.#cfg.searchPath(String(v), SEARCH_PATH_ARG_EXT.FONT)}');\n}\n`)).join('')\n\n\t\t\t// 文字出現演出関係\n\t\t\t+`\n.sn_tx {\n\tpointer-events: none;\n\tuser-select: none;\n\t-webkit-touch-callout: none;\n\tbox-sizing: border-box;\n}\n.sn_ch {\n\tposition: relative;\n\tdisplay: inline-block;\n}\n`\t// 「sn_ch」と「sn_ch_in_〜」の中身が重複しているが、これは必須\n\t\t);\n\n\t\tthis.#ch_in_style({\n\t\t\tname\t: 'default',\n\t\t\twait\t: 500,\n\t\t\talpha\t: 0,\n\t\t\tx\t\t: '=0.3',\n\t\t\ty\t\t: '=0',\n\t\t\tscale_x\t: 1,\n\t\t\tscale_y\t: 1,\n\t\t\trotate\t: 0,\n\t\t\tjoin\t: true,\n\t\t\tease\t: 'ease-out',\n\t\t});\n\t\tthis.#ch_out_style({\n\t\t\tname\t: 'default',\n\t\t\twait\t: 0,\n\t\t\talpha\t: 0,\n\t\t\tx\t\t: '=0',\n\t\t\ty\t\t: '=0',\n\t\t\tscale_x\t: 1,\n\t\t\tscale_y\t: 1,\n\t\t\trotate\t: 0,\n\t\t\tjoin\t: false,\n\t\t\tease\t: 'ease-out',\n\t\t});\n\t}\n\n\t// 文字出現演出\n\tstatic\t#ch_in_style(hArg: TArg) {\n\t\tconst {x, y, nx, ny, alpha, wait, ease, rotate, scale_x, scale_y} = TxtStage.ch_in_style(hArg);\n\t\tconst x2 = x.startsWith('=') ?`${String(nx *100)}%` :`${String(nx)}px`;\n\t\tconst y2 = y.startsWith('=') ?`${String(ny *100)}%` :`${String(ny)}px`;\n\t\tconst {name=''} = hArg;\n\t\taddStyle(`\n.sn_ch_in_${name} {\n\tposition: relative;\n\tdisplay: inline-block;\n}\n.go_ch_in_${name} {\n\topacity: ${String(alpha)};\n\tposition: relative;\n\tdisplay: inline-block;\n\tanimation: sn_ch_in_${name} ${String(wait)}ms ${ease} 0s both;\n}\n@keyframes sn_ch_in_${name} {\n\tfrom {transform: rotate(${String(rotate)}deg) scale(${String(scale_x)}, ${String(scale_y)}) translate(${x2}, ${y2})}\n\tto {opacity: 1; transform: none;}\n}\n`);\n\n\t\treturn false;\n\t}\n\t// 文字消去演出\n\tstatic\t#ch_out_style(hArg: TArg) {\n\t\tconst {x, y, nx, ny, alpha, wait, ease, rotate, scale_x, scale_y} = TxtStage.ch_out_style(hArg);\n\t\tconst x2 = x.startsWith('=') ?`${String(nx *100)}%` :`${String(nx)}px`;\n\t\tconst y2 = y.startsWith('=') ?`${String(ny *100)}%` :`${String(ny)}px`;\n\t\tconst {name=''} = hArg;\n\t\taddStyle(`\n.go_ch_out_${name} {\n\tposition: relative;\n\tdisplay: inline-block;\n\tanimation: go_ch_out_${name} ${String(wait)}ms ${ease} 0s both;\n}\n@keyframes go_ch_out_${name} {\n\tto {\n\t\topacity: ${String(alpha)};\n\t\ttransform: rotate(${String(rotate)}deg) scale(${String(scale_x)}, ${String(scale_y)}) translate(${x2}, ${y2});\n\t}\n`);\n\n\t\treturn false;\n\t}\n\n\tstatic\t\t#msecChWait\t\t= 10;\n\tstatic set\tmsecChWait(mscw: number) {TxtLayer.#msecChWait = mscw}\n\tstatic get\tmsecChWait() {return TxtLayer.#msecChWait}\n\n\n\tstatic\t#evtMng\t: IEvtMng;\n\tstatic\t#sys\t: SysBase;\n\tstatic setEvtMng(evtMng: IEvtMng, sys: SysBase, scrItr: ScriptIterator) {\n\t\tthis.#evtMng = evtMng;\n\t\tthis.#sys = sys;\n\t\tTxtStage.setEvtMng(evtMng, scrItr);\n\t}\n\n\t// 文字ごとのウェイト\n\tstatic #doAutoWc\t= false;\n\tstatic #hAutoWc\t: {[ch: string]: number}\t= {};\n\tstatic #autowc(hArg: TArg) {\n\t\tthis.#doAutoWc = argChk_Boolean(hArg, 'enabled', this.#doAutoWc);\n\t\tthis.#val.setVal_Nochk('save', 'const.sn.autowc.enabled', this.#doAutoWc);\n\n\t\tconst {text} = hArg;\n\t\tif ('text' in hArg !== 'time' in hArg) throw '[autowc] textとtimeは同時指定必須です';\n\t\tthis.#val.setVal_Nochk('save', 'const.sn.autowc.text', text);\n\t\tif (! text) {\n\t\t\tthis.#val.setVal_Nochk('save', 'const.sn.autowc.time', '');\n\t\t\treturn false;\n\t\t}\n\n\t\tconst len = text.length;\n\t\tif (this.#doAutoWc && len === 0) throw '[autowc] enabled === false かつ text === \"\" は許されません';\n\n\t\tconst a = String(hArg.time).split(',');\n\t\tif (a.length !== len) throw '[autowc] text文字数とtimeに記述された待ち時間(コンマ区切り)は同数にして下さい';\n\t\tthis.#hAutoWc = {};\t// 毎回クリアを仕様とする\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tfor (let i=0; i<len; ++i) this.#hAutoWc[text[i]!] = uint(a[i]);\n\t\tthis.#val.setVal_Nochk('save', 'const.sn.autowc.time', hArg.time);\n\n\t\treturn false;\n\t}\n\n\n\t// バック\n\t#b_color\t\t\t= 0x000000;\n\t#b_alpha\t\t\t= 0;\n\t#b_alpha_isfixed\t= false;\n\t#b_do\t\t\t: DisplayObject | undefined\t= undefined;\n\t#b_pic\t\t\t= '';\t// 背景画像無し(=単色塗り)\n\n\t// 文字表示\n\t#txs\t= new TxtStage(this.ctn, ()=> this.canFocus(), TxtLayer.#sys);\n\n\treadonly\t#rbSpl\t= new RubySpliter;\n\treadonly\t#htmRb\t= document.createElement('span');// cssチェック・保存用\n\tstatic\treadonly\t#hWarnR_Style = {\n\t\t'text-align'\t\t: 0,\n\t\t'text-align-last'\t: 0,\n\t\t'height'\t: 0,\n\t\t'width'\t\t: 0,\n\t\t'padding-left'\t\t: 0,\n\t\t'padding-right'\t\t: 0,\n\t\t'padding-top'\t\t: 0,\n\t\t'padding-bottom'\t: 0,\n\t};\n\n\treadonly\t#cntBtn\t= new Container<Button>;\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.ctn.addChild(this.#txs);\n\n\t\tthis.#rbSpl.init(this.#putCh);\n\n\t\tthis.ctn.addChild(this.#cntBtn);\t// ボタンはpaddingの影響を受けない\n\t\tthis.#cntBtn.name = 'cntBtn';\n\n\t\tconst padding = 16;\t// 初期padding\n\t\tthis.lay({style: `width: ${String(CmnLib.stageW)}px; height: ${String(CmnLib.stageH)}px; font-family: 'Hiragino Sans', 'Hiragino Kaku Gothic ProN', '游ゴシック Medium', meiryo, sans-serif; color: white; font-size: 24px; line-height: 1.5; padding: ${String(padding)}px;`, in_style: 'default', out_style: 'default', back_clear: 'true'});\n\t}\n\toverride destroy() {\n\t\tif (this.#b_do) {this.ctn.removeChild(this.#b_do).destroy(); this.#b_do = undefined}\n\n\t\tTxtLayer.#log.pagebreak();\n\t\tthis.#txs.destroy();\n\t}\n\tstatic\tdestroy() {\n\t\tthis.#doAutoWc = false;\n\t\tthis.#hAutoWc = {};\n\n\t\tthis.#rec = tx=> tx;\n\t}\n\toverride set name(nm: string) {this.name_ = nm; this.#txs.name = nm}\n\toverride get name() {return this.name_}\t// getは継承しないらしい\n\n\n\toverride cvsResize() {this.#txs.cvsResize()}\n\toverride cvsResizeChildren() {\n\t\tfor (const b of this.#cntBtn.children) b.cvsResize();\n\t}\n\n\tprotected\toverride\tprocSetX(x: number) {this.#txs.lay({x})}\n\tprotected\toverride\tprocSetY(y: number) {this.#txs.lay({y})}\n\n\toverride lay(hArg: TArg) {\n\t\tsuper.lay(hArg);\n\t\tLayer.setXY(this.ctn, hArg, this.ctn);\n\n\t\thArg[':id_tag'] = this.name_.slice(0, -7);\t// Design用\n\t\tRubySpliter.setting(hArg);\n\t\tthis.#setFfs(hArg);\n\t\tthis.#txs.lay(hArg);\n\n\t\tif ('r_align' in hArg) this.#r_align = hArg.r_align ?? '';\n\t\tthis.#ruby_pd = CmnLib.isSafari\n\t\t? this.#txs.tategaki\t\t// Safariでは親文字幅 l は疑似値\n\t\t\t? (v, l)=> `text-align: start; height: ${String(l)}em; padding-top: ${v}; padding-bottom: ${v};`\n\t\t\t: (v, l)=> `text-align: start; width: ${String(l)}em; padding-left: ${v}; padding-right: ${v};`\n\t\t: this.#txs.tategaki\n\t\t\t? v=> `text-align: justify; text-align-last: justify; padding-top: ${v}; padding-bottom: ${v};`\n\t\t\t: v=> `text-align: justify; text-align-last: justify; padding-left: ${v}; padding-right: ${v};`;\n\t\t// eslint-disable-next-line @typescript-eslint/unbound-method\n\t\tif (CmnLib.isFirefox) this.#mkStyle_r_align = this.#mkStyle_r_align4ff;\n\n\t\tif ('r_style' in hArg) {\n\t\t\tif (hArg.r_style) {\n\t\t\t\tconst cln = document.createElement('span');\n\t\t\t\tcln.style.cssText = hArg.r_style;\n\t\t\t\tconst len = cln.style.length;\n\t\t\t\tconst s = this.#htmRb.style;\n\t\t\t\tfor (let i=0; i<len; ++i) {\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment\n\t\t\t\t\tconst key = <any>cln.style[i];\n\t\t\t\t\tif (key in TxtLayer.#hWarnR_Style) {\n\t\t\t\t\t\tDebugMng.myTrace(`${String(key)}は指定できません`, 'W');\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst v = cln.style[key];\n\t\t\t\t\tif (v) s[key] = v;\n\t\t\t\t}\n\t//\t\t\tif ((! cln.style.opacity) && ('alpha' in hArg)) s.opacity = String(this.spLay.alpha);\n\t\t\t}\n\t\t\telse this.#htmRb.style.cssText = '';\n\t\t}\n\n\t\tif ('alpha' in hArg) for (const b of this.#cntBtn.children) b.alpha = this.ctn.alpha;\n\n\t\tthis.#set_ch_in(hArg);\n\t\tthis.#set_ch_out(hArg);\n\n\t\tconst RPN_TXT_LAY = Reading.procID +`TxtLayer lay name:${this.name_}`;\n\t\tconst ret = this.#drawBack(hArg, isStop=> {\n\t\t\tif (isStop) Reading.endProc(RPN_TXT_LAY);\n\t\t});\n\t\tif (ret) Reading.beginProc(RPN_TXT_LAY);\n\t\treturn ret;\n\t}\n\t#set_ch_in(hArg: T_cmdTxt_JSON | TArg) {\n\t\tconst {in_style} = hArg;\n\t\tif (! in_style) return;\n\t\tconst cis = TxtStage.getChInStyle(in_style);\n\t\tif (! cis) throw `存在しないin_style【${in_style}】です`;\n\t\tthis.#$ch_in_style = in_style;\n\t\tthis.#ch_in_join = cis.join;\n\t}\n\t#$ch_in_style\t= '';\n\t#ch_in_join\t\t= true;\n\n\toverride get\twidth() {return this.#txs.getWidth}\n\toverride get\theight() {return this.#txs.getHeight}\n\n\t#set_ch_out(hArg: T_cmdTxt_JSON | TArg) {\n\t\tconst {out_style} = hArg;\n\t\tif (! out_style) return;\n\t\tconst cos = TxtStage.getChOutStyle(out_style);\n\t\tif (! cos) throw `存在しないout_style【${out_style}】です`;\n\t\tthis.#$ch_out_style = out_style;\n\t}\n\t#$ch_out_style\t= '';\n\n\t#sps\t= new SpritesMng;\n\t#drawBack(hArg: TArg, fncComp: (isStop: boolean)=> void): boolean {\n\t\tif ('back_clear' in hArg) {\n\t\t\tif (argChk_Boolean(hArg, 'back_clear', false)) {\n\t\t\t\tthis.#b_color = 0x000000;\n\t\t\t\tthis.#b_alpha = 0;\n\t\t\t\tthis.#b_alpha_isfixed = false;\n\t\t\t\tthis.#b_pic = '';\n\t\t\t}\n\t\t\tfncComp(false);\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.#b_alpha = argChk_Num(hArg, 'b_alpha', this.#b_alpha);\n\t\tthis.#b_alpha_isfixed = argChk_Boolean(hArg, 'b_alpha_isfixed', this.#b_alpha_isfixed);\n\t\tconst alpha = (this.#b_alpha_isfixed\n\t\t\t? 1\n\t\t\t: Number(TxtLayer.#val.getVal('sys:TextLayer.Back.Alpha'))\n\t\t) *this.#b_alpha;\n\t\tif (hArg.b_pic) {\n\t\t\tif (this.#b_pic !== hArg.b_pic) {\n\t\t\t\tthis.#b_pic = hArg.b_pic;\n\t\t\t\tif (this.#b_do) {\n\t\t\t\t\tthis.ctn.removeChild(this.#b_do);\t// Graphics かも\n\t\t\t\t\tthis.#b_do.destroy();\t// Graphics かも\n\t\t\t\t}\n\t\t\t\t//this.#sps.destroy();\t// Graphics かもなので使用不可\n\t\t\t\tthis.#sps = new SpritesMng(this.#b_pic, this.ctn, sp=> {\n\t\t\t\t\tthis.#b_do = sp;\n\t\t\t\t\tsp.name = 'back(pic)';\n\t\t\t\t\tsp.visible = alpha > 0;\n\t\t\t\t\tsp.alpha = alpha;\n\t\t\t\t\t//CmnLib.adjustRetinaSize(this.b_pic, sp);\n\t\t\t\t\tthis.#txs.setMySize(sp.width, sp.height);\n\t\t\t\t\t\t// ちなみに左上表示位置は本レイヤと同じ\n\t\t\t\t\tthis.ctn.setChildIndex(sp, 0);\n\t\t\t\t\tfncComp(true);\n\t\t\t\t});\n\t\t\t\treturn this.#sps.ret;\n\t\t\t}\n\t\t}\n\t\telse if ('b_color' in hArg) {\n\t\t\tthis.#b_color = argChk_Color(hArg, 'b_color', 0x000000);\n\t\t\tif (this.#b_do) {\n\t\t\t\tthis.ctn.removeChild(this.#b_do);\t// Graphics かも\n\t\t\t\tthis.#b_do.destroy();\t// Graphics かも\n\t\t\t\t//this.#sps.destroy();\t// Graphics かもなので使用不可\n\t\t\t}\n\t\t\tthis.#b_pic = '';\t// 忘れずクリア\n\t\t\tthis.ctn.addChildAt(\n\t\t\t\t(this.#b_do = new Graphics)\n\t\t\t\t.beginFill(this.#b_color, alpha)\n\t\t\t\t.lineStyle(undefined)\n\t\t\t\t.drawRect(0, 0, this.#txs.getWidth, this.#txs.getHeight)\n\t\t\t\t.endFill(), 0);\n\t\t\tthis.#b_do.name = 'back(color)';\n\t\t\t//cacheAsBitmap = true;\t// これを有効にするとスナップショットが撮れない??\n\t\t}\n\n\t\tif (this.#b_do) {\n\t\t\tthis.#b_do.visible = alpha > 0;\n\t\t\t\t// 透明の時は表示しない。こうしないと透明テキストレイヤ下のボタンが\n\t\t\t\t// 押せなくなる(透明だが塗りがあるという扱いなので)\n\t\t\tthis.#b_do.alpha = alpha;\n\t\t}\n\t\tfncComp(false);\n\n\t\treturn false;\n\t}\n\tchgBackAlpha(g_alpha: number): void {\n\t\tconst alpha = this.#b_alpha_isfixed\n\t\t\t? this.#b_alpha\n\t\t\t: g_alpha * this.#b_alpha;\n\t\tif (this.#b_do instanceof Graphics) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\t\tif (this.#b_do) {\n\t\t\t\tthis.ctn.removeChild(this.#b_do);\n\t\t\t\tthis.#b_do.destroy();\n\t\t\t}\n\t\t\tthis.ctn.addChildAt(\n\t\t\t\t(this.#b_do = new Graphics)\n\t\t\t\t.beginFill(this.#b_color, alpha)\n\t\t\t\t.lineStyle(undefined)\n\t\t\t\t.drawRect(0, 0, this.#txs.getWidth, this.#txs.getHeight)\n\t\t\t\t.endFill(), 0);\n\t\t\tthis.#b_do.name = 'back(color)';\n\t\t\t//cacheAsBitmap = true;\t// これを有効にするとスナップショットが撮れない??\n\t\t}\n\t\tif (this.#b_do) {\n\t\t\tthis.#b_do.visible = alpha > 0;\n\t\t\t\t// 透明の時は表示しない。こうしないと透明テキストレイヤ下のボタンが\n\t\t\t\t// 押せなくなる(透明だが塗りがあるという扱いなので)\n\t\t\tthis.#b_do.alpha = alpha;\n\t\t}\n\t}\n\n\t#setFfs(hArg: TArg) {\n\t\tif ('noffs' in hArg) {\n\t\t\tthis.#strNoFFS = hArg.noffs ?? '';\n\t\t\t// eslint-disable-next-line no-irregular-whitespace\n\t\t\tthis.#regNoFFS = new RegExp(`[ ${this.#strNoFFS}]`);\n\t\t}\n\t\tif (! ('ffs' in hArg)) return;\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\tthis.#ffs ??= '';\n\t\tthis.#fncFFSStyle = this.#ffs === ''\n\t\t\t? ()=> ''\n\t\t\t: ch=> this.#regNoFFS.test(ch)\n\t\t\t\t? ''\n\t\t\t\t: ` font-feature-settings: ${this.#ffs};`;\n\t}\n\t#ffs\t= '';\n\t#fncFFSStyle\t= (_ch: string)=> '';\n\t#strNoFFS\t= '';\n\t// eslint-disable-next-line no-irregular-whitespace\n\t#regNoFFS\t= /[ ]/;\n\t// Safariが全体に「font-feature-settings」した後、特定文字の「font-feature-settings: initial;」を受け付けてくれないのでわざわざ一つずつ指定\n\n\n\tstatic\tchgDoRec(doRec: boolean) {\n\t\tthis.#rec = doRec\n\t\t\t? tx=> tx\n\t\t\t: tx=> `<span class='offrec'>${tx}</span>`;\n\t\t\t\t// 囲んだ領域は履歴で非表示\n\t}\n\tstatic\t#rec = (tx: string)=> tx;\n\n\tisCur\t= false;\n\t#ruby_pd: (v: string, l: number)=> string = ()=> '';\n\t#mkStyle_r_align: (ch: string, rb: string, r_align: string, add_sty?: string)=> string = (ch, rb, r_align, add_sty='')=> {\n\t\tif (! r_align) return ` style='${add_sty}'`;\n\n\t\tconst len = ch.length *2;\n\t\tif (len -rb.length < 0) return ` style='text-align: ${r_align}; ${add_sty}'`;\n\n\t\tlet st = '';\n\t\tswitch (r_align) {\n\t\tcase 'justify':\n\t\t\tst = this.#ruby_pd('0', len);\tbreak;\n\t\tcase '121':\n\t\t\tst = this.#ruby_pd(`calc(${String((len -rb.length) /(rb.length *2))}em)`, len);\tbreak;\n\t\tcase 'even':\n\t\t\tst = this.#ruby_pd(`calc(${String((len -rb.length) /(rb.length +1))}em)`, len);\tbreak;\n\t\tcase '1ruby':\n\t\t\tst = this.#ruby_pd('1em', len);\tbreak;\n\t\tdefault:\n\t\t\tst = `text-align: ${r_align};`;\n\t\t}\n\t\treturn ` style='${st} ${add_sty}'`;\n\t};\n\t#r_align\t= '';\n\t#mkStyle_r_align4ff(ch: string, rb: string, r_align: string, add_sty=''): string {\n\t\tif (! r_align) return ` style='${add_sty}'`;\n\n\t\tconst len = ch.length *2;\n\t\tif (len -rb.length < 0) return ` style='text-align: ${r_align}; ${add_sty}'`;\n\n\t\tlet st = '';\n\t\tswitch (r_align) {\n\t\t\tcase 'left':\tst = 'ruby-align: start;';\tbreak;\n\t\t\tcase 'center':\tst = 'ruby-align: center;';\tbreak;\n\t\t\tcase 'right':\t// エレガントにサポートできていない\n\t\t\t\tst = 'ruby-align: start;';\tbreak;\n\t\t\tcase 'justify':\tst = 'ruby-align: space-between;';\tbreak;\n\t\t\tcase '121':\t\tst = 'ruby-align: space-around;';\tbreak;\n\t\t\tcase 'even':{\n\t\t\t\tconst ev = ` ${String((len -rb.length) /(rb.length +1))}em;`;\n\t\t\t\tst = 'ruby-align: space-between; '+\n\t\t\t\t(this.#txs.tategaki\n\t\t\t\t\t? `padding-top:${ev} padding-bottom:${ev}`\n\t\t\t\t\t: `padding-left:${ev} padding-right:${ev}`);\n\t\t\t}\tbreak;\n\t\t\tcase '1ruby':\tst = 'ruby-align: space-between; '+\n\t\t\t\t(this.#txs.tategaki\n\t\t\t\t\t? 'padding-top: 1em; padding-bottom: 1em;'\n\t\t\t\t\t: 'padding-left: 1em; padding-right: 1em;');\n\t\t\t\tbreak;\n\t\t\tdefault:\t\tst = `text-align: ${r_align};`;\n\t\t}\n\t\treturn ` style='${st} ${add_sty}'`;\n\t}\n\n\ttagCh(text: string): void {this.#rbSpl.putTxt(text)}\n\t#needGoTxt = false;\n\tget needGoTxt() {return this.#needGoTxt}\n\treadonly\t#putCh\t: T_PutCh = (ch, iruby)=> {\n\t\tlet ruby = iruby;\n\t\tif (TxtLayer.#cfg.oCfg.debug.putCh) console.log(`🖊 文字表示 text:\\`${ch}\\`(${ch.charCodeAt(0).toString(16)}) ruby:\\`${ruby}\\` name:\\`${this.name_}\\``);\n\n\t\tconst a_ruby = ruby.split('|');\n\t\tlet add_htm = '';\n\t\tconst [a0, ...a1_] = a_ruby;\n\t\tconst a1 = a1_.join('|');\n\t\tswitch (a_ruby.length) {\n\t\tcase 1:\t\t// 字or春《はる》\n\t\t\tthis.#needGoTxt = true;\n\t\t\tif (ch === '\\n') {\n\t\t\t\tif (this.#firstCh) {// 1文字目にルビが無い場合、不可視ルビで行揃え\n\t\t\t\t\tthis.#firstCh = false;\n\t\t\t\t\tadd_htm = '<ruby> <rt> </rt></ruby><br/>';\n\t\t\t\t}\n\t\t\t\telse add_htm = '<br/>';\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (this.#firstCh) {\t// 1文字目にルビが無い場合、不可視ルビで行揃え\n\t\t\t\tthis.#firstCh = false;\n\t\t\t\tif (ruby === '') ruby = ' ';\n\t\t\t}\n\t\t\tadd_htm = this.#tagCh_sub(ch, ruby, this.#r_align);\n\t\t\tbreak;\n\n\t\tdefault:\t// 《grp|{\"id\":\"break\",\"pic\":\"breakline\"}》\n\t\t\tswitch (a0) {\t// ルビ揃え指定と同時シリーズ\n\t\t\tcase 'start':\t// 初期値\n\t\t\tcase 'left':\t//(肩付き)先頭親文字から、ルビ間は密着\n\t\t\tcase 'center':\t//(中付き)センター合わせ、〃\n\t\t\tcase 'right':\t//(右/下揃え)末尾親文字から、〃\n\t\t\tcase 'justify':\t//(両端揃え)先頭から末尾親文字間に、ルビ間は均等にあける\n\t\t\tcase '121':\t\t//(1-2-1(JIS))ルビの前後を比率1、ルビ間を比率2であける\n\t\t\tcase 'even':\t//(均等アキ)ルビの前後、ルビ間も均等にあける\n\t\t\tcase '1ruby':\t//(1ルビ文字アキ)ルビの前後をルビ一文字空け、ルビ間は均等にあける\n\t\t\t\tthis.#firstCh = false;\n\t\t\t\tthis.#needGoTxt = true;\n\t\t\t\tadd_htm = this.#tagCh_sub(ch, a1, a0);\n\t\t\t\tbreak;\n\n\t\t\tcase 'gotxt':\n\t\t\t\tthis.#popSpan();\n\t\t\t\tif (this.#needGoTxt) {\n\t\t\t\t\tif (this.isCur) TxtLayer.#log.recText(\n\t\t\t\t\t\tthis.#aSpan.join('')\n\t\t\t\t\t\t.replace(/^<ruby> <rt> <\\/rt><\\/ruby>(<br\\/>)+/, '')\n\t\t\t\t\t\t\t// 前方の空行をtrim\n\t\t\t\t\t\t.replaceAll(/style='(anim\\S+ [^;]+;\\s*)+/g, 'style=\\'')\n\t\t\t\t\t\t\t// 2 matches (40 step, 205µs) https://regex101.com/r/u1H6v2/1\n\t\t\t\t\t\t.replaceAll(/( style=''| data-(add|arg|cmd)='[^']+'|\\n+|\\t+)/g, '')\n\t\t\t\t\t\t\t// 2 matches (94 step, 175µs) https://regex101.com/r/5DFUmv/1\n\t\t\t\t\t\t.replaceAll(/class='sn_ch[^']+/g, 'class=\\'sn_ch')\n\t\t\t\t\t\t\t// 不要情報削除\n\t\t\t\t\t\t\t// 2 matches (28 step, 280µs) https://regex101.com/r/XhBbYo/1\n\t\t\t\t\t\t.replaceAll('display: none;', '')\t// 履歴情報可視化\n\t\t\t\t\t\t.replaceAll('class=\\'offrec\\'', 'style=\\'display: none;\\'')\n\t\t\t\t\t);\t\t// 囲んだ領域は履歴で非表示\n\n\t\t\t\t\tthis.#txs.goTxt(this.#aSpan, this.#cumDelay === 0);\n\t\t\t\t\tthis.#needGoTxt = false;\n\t\t\t\t\tthis.#cumDelay = 0;\n\t\t\t\t}\n\t\t\t\telse if (this.isCur) this.#txs.noticeCompTxt();\n\t\t\t\treturn;\t// breakではない\n\n\t\t\tcase 'add':{\t// 文字幅を持たない汎用的な命令(必ずadd_closeすること)\n\t\t\t\tconst o = <T_cmdTxt_JSON>JSON.parse(a1);\n\n\t\t\t\tconst {style='', wait=null} = o;// wait=0にすると背景が最初から出る\n\t\t\t\tconst {cl, sty} = this.#o2domArg(true, wait ?uint(wait): null);\n\t\t\t\tthis.#aSpan.push(`<span${cl} style='${sty} display: inline; ${style}'>`);\t// display: inline; がないと前の改行が改行しなくなる\n\t\t\t\tdelete o.style;\t// 背景styleなどを[ch]で一塊とする\n\t\t\t\tthis.#pushSpan(o);\n\t\t\t}\treturn;\t// breakではない\n\t\t\tcase 'add_close':\n\t\t\t\tthis.#aSpan.push('</span>');\n\t\t\t\tthis.#popSpan();\n\t\t\t\treturn;\t// breakではない\n\n\t\t\tcase 'grp':\t//\t画像など 《grp|{\"id\":\"break\",\"pic\":\"breakline\"}》\n\t\t\t\tthis.#needGoTxt = true;\n\t\t\t{\n\t\t\t\tconst o = <T_cmdTxt_JSON>JSON.parse(a1);\n\t\t\t\t// 直後の dispBreak() のため oを更新\n\t\t\t\to.id ??= String(this.#aSpan.length);\n\t\t\t\tif (o.id === 'break') {\n\t\t\t\t\tthis.#txs.dispBreak(o);\n\t\t\t\t\treturn;\t// breakではない\n\t\t\t\t}\n\n\t\t\t\tthis.#firstCh = false;\n\t\t\t\t// 直後の JSON.stringify() のため oを更新\n\t\t\t\to.delay = this.#cumDelay;\t// 画像のスライドインで使う\n\t\t\t\to.r ??= '';\n\t\t\t\to.style ??= '';\n\t\t\t\to.r_style ??= '';\n\t\t\t\tconst {r, wait=null, r_style} = o;\n\t\t\t\tconst {cl, sty, lnk} = this.#o2domArg(true, wait ?uint(wait): null);\n\t\t\t\tadd_htm = `<span${cl} style='${sty} ${o.style\n\t\t\t\t}'><ruby><span data-cmd='grp' data-arg='${JSON.stringify(o)\n\t\t\t\t}'${lnk} style='${sty} display: inline;'> </span><rt${lnk}${\n\t\t\t\t\tthis.#mkStyle_r_align(' ', r, this.#r_align,\n\t\t\t\t\tthis.#htmRb.style.cssText\t// この並びで上書きされていく\n\t\t\t\t\t+ (this.#stkASpan.at(-1)?.o.r_style ?? '')\n\t\t\t\t\t+ r_style)\n\t\t\t\t}>${o.r}</rt></ruby></span>`;\n\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'tcy':\t// ルビ付き縦中横\n\t\t\t\tthis.#firstCh = false;\n\t\t\t\tthis.#needGoTxt = true;\n\t\t\t{\n\t\t\t\tconst {t='', r='', wait=null, style='', r_style=''} = <T_cmdTxt_JSON>JSON.parse(a1);\n\t\t\t\tif (TxtLayer.#val.doRecLog()) {\n\t\t\t\t\tthis.#page_text += ch +(ruby ?`《${ruby}》` :'');\n\t\t\t\t\tthis.#page_plain_text += t;\n\t\t\t\t}\n\n\t\t\t\tconst rb = CmnLib.isSafari\n\t\t\t\t\t? r.replaceAll(/[A-Za-z0-9]/g, s=> String.fromCharCode(s.charCodeAt(0) + 65248))\n\t\t\t\t\t\t// 英数字を全角に(Safariで縦中横ルビが半角文字だと、\n\t\t\t\t\t\t// 選択矩形が横倒しになる不具合対策)\n\t\t\t\t\t: r;\n\t\t\t\tconst {cl, sty, lnk} = this.#o2domArg(true, wait ?uint(wait): null);\n\t\t\t\tadd_htm = `<span${cl} style='${sty}${this.#fncFFSStyle(t)} ${style}'><ruby><span${lnk} style='${sty} display: inline; text-combine-upright: all;'>${t}</span><rt${lnk}${\n\t\t\t\t\tthis.#mkStyle_r_align(t, rb, this.#r_align,\n\t\t\t\t\tthis.#htmRb.style.cssText\t// この並びで上書きされていく\n\t\t\t\t\t+ (this.#stkASpan.at(-1)?.o.r_style ?? '')\n\t\t\t\t\t+ r_style)\n\t\t\t\t}>${rb}</rt></ruby></span>`;\n\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'del':\t//if (a1 !== 'break') throw '文字レイヤdelコマンドは、現在id=breakのみサポートします';\n\t\t\t\tTxtStage.delBreak();\n\t\t\t\treturn;\t// breakではない\n\n\t\t\tcase 'span':\n\t\t\t\tthis.#needGoTxt = true;\n\t\t\t\tthis.#mergePushSpan(<T_cmdTxt_JSON>JSON.parse(a1));\n\t\t\t\treturn;\t// breakではない\n\n\t\t\tcase 'link':\n\t\t\t\tthis.#needGoTxt = true;\n\t\t\t{\n\t\t\t\tconst o = <T_cmdTxt_JSON>JSON.parse(a1);\n\t\t\t\to[':link'] = ' data-lnk=\\'@\\'';\n\t\t\t\tconst {cl, sty, curpos} = this.#o2domArg(false, o.wait ?uint(o.wait): null);\n\t\t\t\tthis.#aSpan.push(`<span${cl} style='${sty} display: inline; ${o.style ?? ''}' ${curpos} data-arg='${a1}'>`);\n\t\t\t\t\t// display: inline; を削除するとルビもリンク背景に含まれる\n\t\t\t\t\t// ただし当たり判定は文字・ルビ上のみ\n\t\t\t\tdelete o.style;\n\t\t\t\tthis.#mergePushSpan(o);\n\t\t\t}\treturn;\t// breakではない\n\n\t\t\tcase 'endlink':\n\t\t\t\tthis.#needGoTxt = true;\n\t\t\t\tthis.#aSpan.push('</span>');\n\t\t\t\tthis.#popSpan();\n\t\t\t\treturn;\t// breakではない\n\n\t\t\tdefault:\t// ルビあり文字列\n\t\t\t\tthis.#needGoTxt = true;\n\t\t\t\tadd_htm = this.#tagCh_sub(ch, ruby, this.#r_align);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tthis.#aSpan.push(TxtLayer.#rec(add_htm));\n\t}\n\t#tagCh_sub(ch: string, rb: string, r_align: string): string {\n\t\tconst ht = ch===' ' ?' ' :ch===' ' ?' ' :ch;\n\t\tif (TxtLayer.#val.doRecLog()) {\n\t\t\tthis.#page_text += ht +(rb ?`《${rb}》` :'');\n\t\t\tif (ch !== ' ') this.#page_plain_text += ch;\n\t\t}\n\t\tconst {cl, sty, lnk} = this.#o2domArg(true, null, ch);\n\n\t\tif (rb) return `<span${cl} style='${sty} ${this.#fncFFSStyle(ch)\n\t\t//<ruby style='ruby-position:under;'>\t// 下付ルビ\n\t\t}'><ruby>${\t// 文字個別に出現させるため以下にも ${cl} が必要\n\t\t\tArray.from(ch).map((c, i)=> `<span${cl}${lnk} style='${\n\t\t\t\ti > 0 ?this.#o2domArg(true, null, ch).sty :sty\n\t\t\t} display: inline;'>${\n\t\t\t\tc===' ' ?' ' :c===' ' ?' ' :c\n\t\t\t}</span>`).join('')\n\t\t\t\t// display: inline; がないと[span]区間外のルビが浮く\n\t\t}<rt${lnk}${this.#mkStyle_r_align(ch, rb, r_align,\n\t\t\tthis.#htmRb.style.cssText\t// この並びで上書きされていく\n\t\t\t+ (this.#stkASpan.at(-1)?.o.r_style ?? ''))\n\t\t}>${rb}</rt></ruby></span>`;\t// <span>に入れないと崩れ一文字ずつ出ない\n\n\t\treturn `<span${cl} style='${sty} ${this.#fncFFSStyle(ch)}'${lnk}>${ht}</span>`;\n\t}\n\t#o2domArg(isAddWait: boolean, argWait: number | null, ch = '\\n') {\n\t\tconst wait = this.#ch_in_join ?argWait\n\t\t\t?? this.#stkASpan.at(0)?.o.wait\t// 親要素\n\t\t\t?? (TxtLayer.#doAutoWc\t// ()は必要\n\t\t\t\t? TxtLayer.#hAutoWc[ch.at(0) ?? ''] ?? 0\n\t\t\t\t: TxtLayer.msecChWait) :0;\n\t\tif (TxtLayer.#evtMng.isSkipping) this.#cumDelay = 0;\n\t\telse if (isAddWait && this.#ch_in_join) this.#cumDelay += uint(wait);\n\t\t\t// ... += uint(wait)*5\t// こうすると出現視認テストができる\n\t\tconst curpos = `data-add='{\"ch_in_style\":\"${this.#$ch_in_style}\", \"ch_out_style\":\"${this.#$ch_out_style}\"}'`;\n\n\t\treturn {\n\t\t\tcl\t: ` class='sn_ch sn_ch_yet sn_ch_in_${this.#$ch_in_style}'`,\t// TxtStage.goTxt()はこれ単位で文字出現させる\n\t\t\tsty\t: `animation-delay: ${String(this.#cumDelay)}ms;${\n\t\t\t\tthis.#stkASpan.at(-1)?.o.style ?? ''\n\t\t\t}`,\t\t// TxtStage.goTxt()はこれ単位で文字出現させる\n\t\t\tlnk\t: (this.#stkASpan.at(0)?.o[':link'] ?? '')+' '+ curpos,\n\t\t\tcurpos,\n\t\t};\n\t}\n\t#cumDelay\t= 0;\n\t#firstCh\t= true;\n\t#aSpan\t\t: string[]\t= [];\n\t#stkASpan\t: {\n\t\to\t\t: T_cmdTxt_JSON;\n\t\tr_align\t\t\t: string;\n\t\tch_in_style\t\t: string;\n\t\tch_out_style\t: string;\n\t}[] = [];\n\n\t#pushSpan(o :T_cmdTxt_JSON) {\n\t\tthis.#stkASpan.push({\n\t\t\to,\n\t\t\tr_align\t\t\t: this.#r_align,\n\t\t\tch_in_style\t\t: this.#$ch_in_style,\n\t\t\tch_out_style\t: this.#$ch_out_style,\n\t\t});\n\t\tif (o.r_align) this.#r_align = o.r_align;\n\t\tthis.#set_ch_in(o);\n\t\tthis.#set_ch_out(o);\n\t}\n\t#popSpan() {\n\t\tconst stk = this.#stkASpan.pop();\n\t\tif (! stk) return;\n\n\t\tthis.#r_align = stk.r_align;\n\t\tthis.#set_ch_in({in_style: stk.ch_in_style});\n\t\tthis.#set_ch_out({out_style: stk.ch_out_style});\n\t}\n\t#mergePushSpan(o :T_cmdTxt_JSON) {\n\t\tconst stk = this.#stkASpan.at(-1);\n\t\tif (! stk) {this.#pushSpan(o); return}\n\n\t\tstk.o = {...stk.o, ...o};\n\t\tif (! o.style && ! o.r_style) {stk.o.style = ''; stk.o.r_style = ''}\n\t\t\t// どちらも指定されてなければクリア\n\t\tif (o.r_align) this.#r_align = o.r_align;\n\t\tthis.#set_ch_in(o);\n\t\tthis.#set_ch_out(o);\n\t}\n\n\treadonly click = ()=> {\t// true: 文字出現中だったので、停止する\n\t\tif (! this.ctn.interactiveChildren || ! this.ctn.visible) return false;\n\t\treturn this.#txs.skipChIn();\n\t}\n\n\tclearText(): void {\n\t\tthis.ctn.removeChild(this.#txs);\n\t\tthis.ctn.addChild(this.#txs = this.#txs.reNew());\n\n\t\tthis.#cumDelay = 0;\n\t\tthis.#firstCh = true;\n\t\tthis.#aSpan = [];\n\t\tthis.#page_text = '';\n\t\tthis.#page_plain_text = '';\n\t\tTxtLayer.#log.pagebreak();\n\t}\n\t#page_text\t\t\t= '';\n\t#page_plain_text\t= '';\n\tget pageText() {return this.#page_text.replace('《 》', '')}\n\tget pagePlainText() {return this.#page_plain_text}\n\n\tget enabled() {return this.ctn.interactiveChildren}\n\tset enabled(e) {this.ctn.interactiveChildren = e}\n\n\treadonly\taddButton = (hArg: TArg)=> new Promise<void>(re=> {\n\t\t// 直後の JSON.stringify() のため hArg を更新\n\t\thArg.key = `btn=[${String(this.#cntBtn.children.length)}] `+ this.name_;\n\t\thArg[':id_tag'] = hArg.key.slice(0, -7);\t// Design用\n\t\targChk_Boolean(hArg, 'hint_tate', this.#txs.tategaki);\t// hint用\n\t\tconst btn = new Button(hArg, TxtLayer.#evtMng, ()=> re(), ()=> this.canFocus());\n\t\tbtn.name = JSON.stringify(hArg).replaceAll('\"', '\\'');// playback時に使用\n\t\tthis.#cntBtn.addChild(btn);\n\t});\n\tcanFocus(): boolean {\n\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\treturn (this.ctn.interactiveChildren ?? false)\n\t\t&& this.ctn.visible\n\t\t&& TxtLayer.#isPageFore(this);\n\t}\n\n\n\toverride clearLay(hArg: TArg): void {\n\t\tsuper.clearLay(hArg);\n\n\t\tthis.clearText();\n\t\t// 上で呼ばれる this.#evtMng.escapeHint();\t// Hintごとdestroyされるのを回避\n\t\tfor (const b of this.#cntBtn.removeChildren()) b.destroy();\n\t}\n\toverride readonly record = ()=> {return {...super.record(),\n\t\tenabled\t: this.enabled,\n\n\t\tr_cssText\t: this.#htmRb.style.cssText,\n\t\tr_align\t\t: this.#r_align,\n\n\t\t// バック\n\t\tb_do\t: this.#b_do === undefined\n\t\t\t\t\t? undefined\n\t\t\t\t\t: this.#b_do instanceof Sprite ?'Sprite' :'Graphics',\n\t\tb_pic\t: this.#b_pic,\n\t\tb_color\t: this.#b_color,\n\t\tb_alpha\t: this.#b_alpha,\n\t\tb_alpha_isfixed\t: this.#b_alpha_isfixed,\n\n\t\tffs\t\t: this.#ffs,\n\t\ttxs\t\t: this.#txs.record(),\n\t\tstrNoFFS: this.#strNoFFS,\n\n\t\tbtns\t: this.#cntBtn.children.map(b=> b.name),\n\t}};\n\toverride playback(hLay: T_RP_layTxt, aPrm: Promise<void>[]): void {\n\t\tsuper.playback(hLay, aPrm);\n\n\t\tthis.enabled\t= hLay.enabled;\n\n\t\tthis.#htmRb.style.cssText = hLay.r_cssText;\n\t\tthis.#r_align\t= hLay.r_align;\n\t\tthis.cvsResize();\n\n\t\tthis.#setFfs(hLay);\n\t\tthis.#txs.playback(hLay.txs);\n\t\t// 文字背景サイズは TxtStage を参照するのでこの順で\n\t\tthis.#b_alpha\t\t\t= hLay.b_alpha;\n\t\tthis.#b_alpha_isfixed\t= hLay.b_alpha_isfixed;\n\n\t\taPrm.push(\n\t\t\tnew Promise<void>(re=> {\n\t\t\t\tconst h: TArg = hLay.b_do\n\t\t\t\t\t? hLay.b_do === 'Sprite'\n\t\t\t\t\t\t? {b_pic: hLay.b_pic}\n\t\t\t\t\t\t: {b_color: hLay.b_color}\n\t\t\t\t\t: {b_pic: ''};\n\t\t\t\th.b_alpha = hLay.b_alpha;\n\t\t\t\th.b_alpha_isfixed = hLay.b_alpha_isfixed;\n\t\t\t\tif (! this.#drawBack(h, isStop=> {if (isStop) re()})) re();\n\t\t\t}),\n\t\t\t...hLay.btns.map(b=> this.addButton(<TArg>JSON.parse(b.replaceAll('\\'', '\"')))).flat(),\n\t\t);\n\t}\n\n\tget cssText() {return this.#txs.cssText}\n\tset cssText(ct: string) {this.#txs.cssText = ct}\n\n\toverride snapshot(rnd: Renderer, re: ()=> void) {\n\t\trnd.render(this.ctn, {clear: false});\n\t\tthis.#txs.snapshot(rnd, re);\n\t}\n\toverride snapshot_end() {this.#txs.snapshot_end()}\n\n\toverride makeDesignCast(gdc: IMakeDesignCast) {\n\t\tif (! this.ctn.visible) return;\n\t\tthis.#txs.makeDesignCast(gdc);\n\t}\n\toverride makeDesignCastChildren(gdc: IMakeDesignCast) {\n\t\tif (! this.ctn.visible) return;\n\t\tfor (const b of this.#cntBtn.children) b.makeDesignCast(gdc);\n\t}\n\n\toverride showDesignCast() {this.#txs.showDesignCast()}\n\toverride showDesignCastChildren() {\n\t\tfor (const b of this.#cntBtn.children) b.showDesignCast();\n\t}\n\n\toverride dump(): string {\n\t\tthis.#putCh('', 'gotxt|');\t// バッファの文字を印字してしまう\n\n\t\treturn super.dump() +`, \"enabled\":\"${String(this.enabled)\n\t\t}\", ${this.#txs.dump()\n\t\t}, \"b_pic\":\"${this.#b_pic}\", \"b_color\":\"${String(this.#b_color)\n\t\t}\", \"b_alpha\":${String(this.#b_alpha)\n\t\t}, \"b_alpha_isfixed\":\"${String(this.#b_alpha_isfixed)\n\t\t}\", \"width\":${String(this.#txs.getWidth)\n\t\t}, \"height\":${String(this.#txs.getHeight)\n\t\t}, \"pixi_obj\":[${\n\t\t\tthis.ctn.children.map(e=> `{\"class\":\"${\n\t\t\t\te instanceof Sprite ?'Sprite' :\n\t\t\t\t\te instanceof Graphics ?'Graphics' :\n\t\t\t\t\t\te instanceof Container ?'Container' :'?'\n\t\t\t}\", \"name\":\"${e.name}\", \"alpha\":${String(e.alpha)\n\t\t\t}, \"x\":${String(e.x)}, \"y\":${String(e.y)\n\t\t\t}, \"visible\":\"${String(e.visible)}\"}`).join(',')\n\t\t}], \"button\":[${\n\t\t\tthis.#cntBtn.children.map(b=> b.children[0]?.name ?? '{}').join(',')\n\t\t}]`;\n\t}\n\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TxtLayer.js","names":["#s行頭禁則","#s行末禁則","#s分割禁止","#sぶら下げ","#reg行頭禁則","#chk禁則の競合_ぶら行末","#reg行末禁則","#chk禁則の競合_ぶら分禁","#reg分割禁止","#regぶら下げ","#genKinsoku","#getChRects","#i2pi","#cfg","#appPixi","#evtMng","#scrItr","#hChInStyle","#hChOutStyle","#cntTxt","#grpDbgMasume","#hWarnStyle","#htmTxt","#fncMasume","#hyph","#lay_sub","#left","#lenHtmTxt","#clearText","#infTL","#isTategaki","#padTx4x","#padTx4y","#lh_half","#goTxt_Proc","#aGoTxt","#SPAN_LAST","#cntBreak","#aRect","#fi_easing","#spWork","#fncEndChIn","#ac","#aSpTw","#REG_NG_CHSTYLE_NAME_CHR","#spsBreak","#ch_filter","#fo_easing","#sss","#cfg","#val","#isPageFore","#log","#autowc","#ch_in_style","#ch_out_style","#msecChWait","#evtMng","#sys","#doAutoWc","#hAutoWc","#rbSpl","#htmRb","#hWarnR_Style","#cntBtn","#txs","#putCh","#b_do","#rec","#setFfs","#r_align","#ruby_pd","#mkStyle_r_align","#mkStyle_r_align4ff","#set_ch_in","#set_ch_out","#drawBack","#$ch_in_style","#ch_in_join","#$ch_out_style","#b_color","#b_alpha","#b_alpha_isfixed","#b_pic","#sps","#strNoFFS","#regNoFFS","#ffs","#fncFFSStyle","#needGoTxt","#firstCh","#tagCh_sub","#popSpan","#aSpan","#cumDelay","#o2domArg","#pushSpan","#stkASpan","#page_text","#page_plain_text","#mergePushSpan"],"sources":["../src/sn/Hyphenation.ts","../src/sn/htm2tx.ts","../src/sn/TxtStage.ts","../src/sn/TxtLayer.ts"],"sourcesContent":["/* eslint-disable no-irregular-whitespace */\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/* ***** BEGIN LICENSE BLOCK *****\n\tCopyright (c) 2024-2025 Famibee (famibee.blog38.fc2.com)\n\n\tThis software is released under the MIT License.\n\thttp://opensource.org/licenses/mit-license.php\n** ***** END LICENSE BLOCK ***** */\n\nimport {argChk_Boolean, argChk_Num} from './CmnLib';\nimport type {TArg} from './Grammar';\n\nimport type {Rectangle} from 'pixi.js';\n\n\nexport type IChRect = {\n\tch\t\t: string;\n\trect\t: Rectangle;\n\telm\t\t: HTMLElement;\n}\n\nexport type T_RP_Hyphenation = {\n\t行頭禁則?\t\t: string;\n\t行末禁則?\t\t: string;\n\t分割禁止?\t\t: string;\n\tぶら下げ?\t\t: string;\n\tbreak_fixed\t\t: boolean;\n\tbreak_fixed_left: number;\n\tbreak_fixed_top\t: number;\n\tbura\t\t\t: boolean;\n}\n\n\nconst def行頭禁則\t= '、。,.)]}〉」』】〕”〟ぁぃぅぇぉっゃゅょゎァィゥェォッャュョヮヵヶ!?!?‼⁉・ーゝゞヽヾ々';\nconst def行末禁則\t= '[({〈「『【〔“〝';\nconst def分割禁止\t= '─‥…';\nconst defぶら下げ\t= def行頭禁則;\n\nconst defReg行頭禁則\t= new RegExp(`[${def行頭禁則}]`);\nconst defReg行末禁則\t= new RegExp(`[${def行末禁則}]`);\nconst defReg分割禁止\t= new RegExp(`[${def分割禁止}]`);\nconst defRegぶら下げ\t= defReg行頭禁則;\n\n\nexport class Hyphenation {\n\t#s行頭禁則\t\t= def行頭禁則;\n\t#s行末禁則\t\t= def行末禁則;\n\t#s分割禁止\t\t= def分割禁止;\n\t#sぶら下げ\t\t= defぶら下げ;\n\tget 行頭禁則() {return this.#s行頭禁則}\n\tget 行末禁則() {return this.#s行末禁則}\n\tget 分割禁止() {return this.#s分割禁止}\n\tget ぶら下げ() {return this.#sぶら下げ}\n\n\t#reg行頭禁則\t= defReg行頭禁則;\n\t#reg行末禁則\t= defReg行末禁則;\n\t#reg分割禁止\t= defReg分割禁止;\n\t#regぶら下げ\t= defRegぶら下げ;\n\n\tbreak_fixed\t\t= false;\n\tbreak_fixed_left= 0;\n\tbreak_fixed_top\t= 0;\n\tbura\t\t\t= false;\n\tlay(hArg: TArg) {\n\t\tif (hArg.kinsoku_sol) {\n\t\t\tthis.#s行頭禁則 = hArg.kinsoku_sol;\n\t\t\tthis.#reg行頭禁則 = new RegExp(`[${this.#s行頭禁則}]`);\n\t\t}\n\t\tif (hArg.kinsoku_eol) {\n\t\t\tthis.#s行末禁則 = hArg.kinsoku_eol;\n\t\t\tthis.#chk禁則の競合_ぶら行末();\n\t\t\tthis.#reg行末禁則 = new RegExp(`[${this.#s行末禁則}]`);\n\t\t}\n\t\tif (hArg.kinsoku_dns) {\n\t\t\tthis.#s分割禁止 = hArg.kinsoku_dns;\n\t\t\tthis.#chk禁則の競合_ぶら分禁();\n\t\t\tthis.#reg分割禁止 = new RegExp(`[${this.#s分割禁止}]`);\n\t\t}\n\t\tif (hArg.kinsoku_bura) {\n\t\t\tthis.#sぶら下げ = hArg.kinsoku_bura;\n\t\t\tthis.#chk禁則の競合_ぶら行末();\n\t\t\tthis.#chk禁則の競合_ぶら分禁();\n\t\t\tthis.#regぶら下げ = new RegExp(`[${this.#sぶら下げ}]`);\n\t\t}\n\t\tif ('bura' in hArg) this.bura = argChk_Boolean(hArg, 'bura', false);\n\n\t\tthis.break_fixed\t\t= argChk_Boolean(hArg, 'break_fixed', this.break_fixed);\n\t\tthis.break_fixed_left\t= argChk_Num(hArg, 'break_fixed_left', this.break_fixed_left);\n\t\tthis.break_fixed_top\t= argChk_Num(hArg, 'break_fixed_top', this.break_fixed_top);\n\t}\n\t\t// 禁則の競合(ぶら下げ と 行末禁則 の両方に含まれる文字があってはならない)\n\t\t#chk禁則の競合_ぶら行末() {\n\t\t\t// 処理速度最適化で主従を変える。長い方をネイティブにやらせる\n\t\t\tconst len行末禁則 = this.#s行末禁則.length;\n\t\t\tconst lenぶら下げ = this.#sぶら下げ.length;\n\t\t\tif (len行末禁則 < lenぶら下げ) {\n\t\t\t\tfor (let i=0; i<len行末禁則; ++i) {\n\t\t\t\t\tconst c = this.#s行末禁則[i];\n\t\t\t\t\tif (this.#sぶら下げ.includes(c!)) throw `禁則の競合があります。文字 ${String(c)} がぶら下げ と 行末禁則 の両方に含まれます`;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tfor (let i=0; i<lenぶら下げ; ++i) {\n\t\t\t\t\tconst c = this.#sぶら下げ[i];\n\t\t\t\t\tif (this.#s行末禁則.includes(c!)) throw `禁則の競合があります。文字 ${String(c)} がぶら下げ と 行末禁則 の両方に含まれます`;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// 禁則の競合(ぶら下げ と 分割禁止 の両方に含まれる文字があってはならない)\n\t\t#chk禁則の競合_ぶら分禁() {\n\t\t\t// 処理速度最適化で主従を変える。長い方をネイティブにやらせる\n\t\t\tconst len分割禁止 = this.#s分割禁止.length;\n\t\t\tconst lenぶら下げ = this.#sぶら下げ.length;\n\t\t\tif (len分割禁止 < lenぶら下げ) {\n\t\t\t\tfor (let i=0; i<len分割禁止; ++i) {\n\t\t\t\t\tconst c = this.#s分割禁止[i];\n\t\t\t\t\tif (this.#sぶら下げ.includes(c!)) throw `禁則の競合があります。文字 ${String(c)} がぶら下げ と 分割禁止 の両方に含まれます`;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tfor (let i=0; i<lenぶら下げ; ++i) {\n\t\t\t\t\tconst c = this.#sぶら下げ[i];\n\t\t\t\t\tif (this.#s分割禁止.includes(c!)) throw `禁則の競合があります。文字 ${String(c)} がぶら下げ と 分割禁止 の両方に含まれます`;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\treNew(to: Hyphenation) {\n\t\tto.#genKinsoku(this.#s行頭禁則, this.#s行末禁則, this.#s分割禁止, this.#sぶら下げ);\n\n\t\tto.break_fixed\t\t= this.break_fixed;\n\t\tto.break_fixed_left\t= this.break_fixed_left;\n\t\tto.break_fixed_top\t= this.break_fixed_top;\n\t\tto.bura\t\t\t\t= this.bura;\n\t}\n\t\t#genKinsoku(s行頭禁則: string, s行末禁則: string, s分割禁止: string, sぶら下げ: string) {\n\t\t\tif (this.#s行頭禁則\t!== s行頭禁則) {\n\t\t\t\tthis.#s行頭禁則\t= s行頭禁則;\n\t\t\t\tthis.#reg行頭禁則 = new RegExp(`[${s行頭禁則}]`);\n\t\t\t}\n\t\t\tif (this.#s行末禁則\t!== s行末禁則) {\n\t\t\t\tthis.#s行末禁則\t= s行末禁則;\n\t\t\t\tthis.#reg行末禁則 = new RegExp(`[${s行末禁則}]`);\n\t\t\t}\n\t\t\tif (this.#s分割禁止\t!== s分割禁止) {\n\t\t\t\tthis.#s分割禁止\t= s分割禁止;\n\t\t\t\tthis.#reg分割禁止 = new RegExp(`[${s分割禁止}]`);\n\t\t\t}\n\t\t\tif (this.#sぶら下げ\t!== sぶら下げ) {\n\t\t\t\tthis.#sぶら下げ\t= sぶら下げ;\n\t\t\t\tthis.#regぶら下げ = new RegExp(`[${sぶら下げ}]`);\n\t\t\t}\n\t\t}\n\trecord() {\n\t\tconst o: T_RP_Hyphenation = {\n\t\t\tbreak_fixed\t\t\t: this.break_fixed,\n\t\t\tbreak_fixed_left\t: this.break_fixed_left,\n\t\t\tbreak_fixed_top\t\t: this.break_fixed_top,\n\t\t\tbura\t\t\t\t: this.bura,\n\t\t};\n\t\tif (this.#s行頭禁則 === def行頭禁則) o.行頭禁則 = this.#s行頭禁則;\n\t\tif (this.#s行末禁則 === def行末禁則) o.行末禁則 = this.#s行末禁則;\n\t\tif (this.#s分割禁止 === def分割禁止) o.分割禁止 = this.#s分割禁止;\n\t\tif (this.#sぶら下げ === defぶら下げ) o.ぶら下げ = this.#sぶら下げ;\n\t\t\t// デフォルト値と同じならJSONで省略\n\t\treturn o;\n\t}\n\tplayback(hLay?: T_RP_Hyphenation) {\n\t\tif (! hLay) return;\t\t// 途中追加なので\n\n\t\tthis.#genKinsoku(\n\t\t\thLay.行頭禁則 ?? def行頭禁則,\n\t\t\thLay.行末禁則 ?? def行末禁則,\n\t\t\thLay.分割禁止 ?? def分割禁止,\n\t\t\thLay.ぶら下げ ?? defぶら下げ,\n\t\t);\n\n\t\tthis.break_fixed\t\t= hLay.break_fixed;\n\t\tthis.break_fixed_left\t= hLay.break_fixed_left;\n\t\tthis.break_fixed_top\t= hLay.break_fixed_top;\n\t\tthis.bura\t\t\t\t= hLay.bura;\n\t}\n\n\thyph(htmTxt: HTMLSpanElement, cnvRect :(rng: Range, ch: string)=> Rectangle, tategaki: boolean, begin: number, bkHtm: string): [IChRect[], number] {\n\t\tlet a: IChRect[];\n\t\tlet len = 0;\n\t\tlet i = 2;\t\t// 本来 1 だがひと文字目の行頭禁則文字を無視したいので\n\t\tlet fncFirstChk = (len: number)=> {\n\t\t\tfncFirstChk = ()=> false;\n\n\t\t\tif (begin === len) {\t// 右クリック戻りなどで文字表示が崩れる件の対応\n\t\t\t\tif (begin > 0) htmTxt.innerHTML = bkHtm.replaceAll('class=\"sn_ch\"', 'class=\"sn_ch sn_ch_in_default\"');\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn len < 2;\n\t\t};\n//console.log(`🎴禁則処理判定ループ begin:${begin}`);\n\t\tdo {\n\t\t\ta = this.#getChRects(htmTxt, cnvRect);\n\t\t\tlen = a.length;\n\t\t\tif (fncFirstChk(len)) break;\n\n\t\t\t// 禁則処理判定ループ\n\t\t\tlet sl_xy = -Infinity;\t// 前回のxy\n//console.log(`- len:${len} a_ch:${a.map((v, i)=> v.elm.tagName === 'RT' ?[] :[i, v.ch])}:`);\n\t\t\tfor (; i<len; ++i) {\n\t\t\t\tconst {elm, rect, ch} = a[i]!;\n\t\t\t\tif (elm.tagName === 'RT') continue;\t// ルビはスキップ\n\n\t\t\t\tconst xy = tategaki ?rect.y :rect.x;\n//if (sl_xy > 790)\n//console.log(`🎴 sl_xy:${sl_xy.toFixed(2)} xy:${xy.toFixed(2)} i:${i} ch:${ch}: rect:(${rect.left.toFixed(2)}, ${rect.top.toFixed(2)}, ${rect.width.toFixed(2)}, ${rect.height.toFixed(2)})`);\n\t\t\t\tif (sl_xy <= xy\t// 【 < 】では[tcy]二文字目を誤判定する\n\t\t\t\t// [r]による改行後は追い出し処理をしないように\n\t\t\t\t|| elm.previousElementSibling?.tagName === 'SPAN'\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\t\t\t&&\telm.previousElementSibling?.innerHTML.includes('<br>')\n\t\t\t\t// <span class=\"offrec\"> 〜 </span> 外し\n\t\t\t\t|| elm.parentElement?.previousElementSibling?.tagName === 'SPAN'\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\t\t\t&&\telm.parentElement?.previousElementSibling?.innerHTML.includes('<br>')) {\n\t\t\t\t\tsl_xy = xy;\n\t\t\t\t\tif (! this.break_fixed) {\n\t\t\t\t\t\tthis.break_fixed_left = rect.x;\n\t\t\t\t\t\tthis.break_fixed_top = rect.y;\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n/*\n\t// [r]などの改行はこう。TxtLayer.#tagCh_sub()により <span> に入れられる\n\t<span class=\"sn_ch\" style=\"display: inline;animation-delay: 10ms;\">\n\t\t<br>\n\t</span>\n\n\t// 上記が下記に囲まれている場合もある。previousElementSibling 使用時は注意\n\t<span class=\"offrec\"> 〜 </span>\n\n\n\t// 禁則処理による自動改行はこう\n\t<br>\n*/\n\n\t\t\t\tconst p_i = this.#i2pi(a, i);\n\t\t\t\tconst {elm: p_elm, rect: p_rect, ch: p_ch} = a[p_i]!;\n//console.log(`🎴 === 自動改行発生! 前文字:${p_i}:${p_ch}:%o 今文字:${i}:${ch}:(${ch.charCodeAt(0).toString(16)})%o`, a[p_i].elm, a[i].elm);\n\t\t\t\tif (! this.break_fixed) {\n\t\t\t\t\tthis.break_fixed_left = p_rect.x;\n\t\t\t\t\tthis.break_fixed_top = p_rect.y;\n\t\t\t\t\tconst sty = globalThis.getComputedStyle(p_elm);\n\t\t\t\t\tconst rs = parseFloat(sty.fontSize);\n\t\t\t\t\tif (tategaki)\tthis.break_fixed_top += rs;\n\t\t\t\t\telse\t\t\tthis.break_fixed_left += rs;\n\t\t\t\t}\n\n\t\t\t\tsl_xy = -Infinity;\t// 自動改行発生!\n\t\t\t\tconst oldI = i;\n\t\t\t\tconst {cont, ins} = this.bura\n\t\t\t\t\t? this.hyph_alg_bura(a, p_i, p_ch, i)\n\t\t\t\t\t: this.hyph_alg(a, p_i, p_ch, i, ch);\n\t\t\t\ti = ins;\n//console.log(`🎴 === cont:${cont} ins:${i} :${a[i].ch}:%o の前に改行を挿入`, a[i].elm);\n\t\t\t\tif (cont) continue;\n\n\t\t\t\t// 改行挿入\n\t\t\t\tconst elm2 = a[i]!.elm;\n\t\t\t\tconst pal = elm2.parentElement!;\n\t\t\t\tconst br = document.createElement('br');\n\t\t\t\tif (pal.classList.contains('sn_tx')) pal.insertBefore(br, elm2); else {\n\t\t\t\t\tconst ppal = pal.parentElement!;\n\t\t\t\t\tif (ppal.classList.contains('sn_ch')) {\n\t\t\t\t\t\tppal.parentElement!.insertBefore(br, ppal);\n\t\t\t\t\t}\n\t\t\t\t\telse ppal.insertBefore(br, pal);\n\t\t\t\t}\n\n\t\t\t\ti += 2;\t// いま追加した<br>のぶんと、次へ行く +1\n\t\t\t\tif (i < oldI) i = oldI;\t// 永久ループ防御\n\t\t\t\tlen = -1;\t// doループ先頭に戻る\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} while (len < 0);\n\n\t\treturn [a, len];\n\t}\n\t\t// 一つ前の要素を探す(ルビ対応)\n\t\t#i2pi(a: IChRect[], i: number): number {\n\t\t\tconst p_i = i -1;\n\t\t\tconst {elm} = a[p_i]!;\n\t\t\tif (elm.tagName !== 'RT') return p_i -(\n\t\t\t\telm.style.textCombineUpright === 'all'\n\t\t\t\t? Array.from(elm.textContent).length -1\n\t\t\t\t: 0\n\t\t\t);\n\n\t\t\treturn p_i -Array.from(elm.textContent).length;\n\t\t\t\t// サロゲートペア対策\n\t\t}\n\n\t#getChRects(elm: Node, cnvRect :(range: Range, ch: string)=> Rectangle): IChRect[] {\t// 注意)再帰関数\n\t\tconst ret: IChRect[] = [];\n\t\tif (elm.nodeType !== elm.TEXT_NODE) return Array.from(elm.childNodes).map(v=> this.#getChRects(v, cnvRect)).flat();\n\n\t\tconst rng = elm.ownerDocument!.createRange();\n\t\trng.selectNodeContents(elm);\n\t\tlet pos = 0;\n\t\tconst end = rng.endOffset;\n\t\t// できれば一文字ずつ「after-edge - baseline」を調べたいが、暫定手段を取る\n\t\t//const styles = globalThis.getComputedStyle(this.htmTxt);\n\t\t//console.log('lh:'+ styles.lineHeight +' fs:'+ styles.fontSize);\n\t\twhile (pos < end) {\n\t\t\trng.setStart(elm, pos);\n\t\t\trng.setEnd(elm, ++pos);\n\t\t\tconst ch = rng.toString();\n\t\t\tret.push({\n\t\t\t\tch,\n\t\t\t\trect: cnvRect(rng, ch),\n\t\t\t\telm\t: rng.startContainer.parentElement!,\n\t\t\t});\n\t\t}\n\t\trng.detach();\n\n\t\treturn ret;\n\t}\n\n\t/**\n\t * 抽象化した禁則処理アルゴリズム\n\t * @method hyph_alg\n\t * @param {IChRect[]} a - 文章の抽象化配列\n\t * @param {number} p_i - 処理要素の一つ前の添字\n\t * @param {string} p_ch - 処理要素の一つ前の文字\n\t * @param {number} i - 処理要素の添字\n\t * @param {string} ch - 処理要素の文字\n\t * @return {Object} result 戻り値\n\t * @return {boolean} result.cont - true: 呼び元で改行挿入せず continue\n\t * @return {number} result.ins - 手前に改行を挿入すべき要素の添字\n\t */\n\thyph_alg(\t// テスト用にpublic\n\t\ta\t: IChRect[],\n\t\tp_i\t: number,\n\t\tp_ch: string,\n\t\tii\t: number,\t// i >= 2\n\t\tch\t: string,\n\t): {cont: boolean, ins: number} {\n\t\t// 追い出し走査\n\t\tlet i = ii;\n\t\tif (this.#reg行末禁則.test(p_ch)) { /* empty */ }\t// 一つ前\n\t\telse if (this.#reg行頭禁則.test(ch)) {\t//(現在地 -> 前方走査)\n\t\t\twhile ((i = this.#i2pi(a, i)) >= 0) {\n\t\t\t\tif (! this.#reg行頭禁則.test(a[i]!.ch)) break;// 行頭禁則はスキップ\n\t\t\t}\n\t\t}\n\t\telse if (p_ch === ch && this.#reg分割禁止.test(p_ch)) { /* empty */ }// 一つ前&現在地\n\t\telse return {cont: true, ins: i +1};\t// 追い出しなし\n\n\t\t// 追い出しによる新行末二次判定(一つ前 -> 前方走査)\n\t\ti = p_i;\n\t\twhile ((i = this.#i2pi(a, i)) >= 0) {\n\t\t\tif (! this.#reg行末禁則.test(a[i]!.ch)) break;\t// 行末禁則はスキップ\n\t\t}\n\t\treturn {cont: false, ins: i +1};\n\t}\n\n\t/**\n\t * 抽象化した禁則処理アルゴリズム\n\t * @method hyph_alg\n\t * @param {IChRect[]} a - 文章の抽象化配列\n\t * @param {number} p_i - 処理要素の一つ前の添字\n\t * @param {string} p_ch - 処理要素の一つ前の文字\n\t * @param {number} i - 処理要素の添字\n\t * @return {Object} result 戻り値\n\t * @return {boolean} result.cont - true: 呼び元で改行挿入せず continue\n\t * @return {number} result.ins - 手前に改行を挿入すべき要素の添字\n\t */\n\thyph_alg_bura(\t// テスト用にpublic\n\t\ta\t: IChRect[],\n\t\tp_i\t: number,\n\t\tp_ch: string,\n\t\ti\t: number,\t// i >= 2\n\t): {cont: boolean, ins: number} {\n\t\tconst pp_i = this.#i2pi(a, p_i);\t// 改行後のルビで追い出し発生\n\t\tconst {ch: pp_ch} = a[pp_i]!;\n//console.log(`🎴 hyph_alg_bura pp:${pp_i}:${pp_ch}: p:${p_i}:${p_ch}: i:${i}:${a[i].ch}:`);\n\t\t// 改行前二個目に「ぶら下げ」がある\n\t\tif (this.#regぶら下げ.test(pp_ch) || this.#reg行頭禁則.test(pp_ch)) {\n\t\t\tlet j = p_i;\n\t\t\t// 改行前にも「ぶら下げ」がある\n\t\t\tif (this.#regぶら下げ.test(p_ch) || this.#reg行頭禁則.test(p_ch)) ++j;\n\n\t\t\t// ぶら下げ後……追い出し走査\n\t\t\tconst p_j = this.#i2pi(a, j);\t// pp_i ではない\n\t\t\tconst {ch: last_ch} = a[p_j]!;\t// 行末\n\t\t\tconst {ch: head_ch} = a[j]!;\t\t// 行頭\n\t\t\t// 分割禁止\n\t\t\tif (last_ch === head_ch && this.#reg分割禁止.test(head_ch)) return {cont: false, ins: p_j};\n\n\t\t\tif (! this.#reg行末禁則.test(last_ch)) return {cont: false, ins: j};\n\t\t\t// 行末禁則\n\t\t\tj = p_j;\n\t\t\tdo {\n\t\t\t\tif (! this.#reg行末禁則.test(a[j]!.ch)) break;\t// 行禁はスキップ\n\t\t\t} while ((j = this.#i2pi(a, j)) >= 0);\n\t\t\treturn {cont: false, ins: j +1};\t// 行末禁則\n\t\t}\n\n\t\t// 改行前二個目に「ぶら下げ」がない\n\t\tconst ppp_i = this.#i2pi(a, pp_i);\n\t\tif (i >= 3) {\n\t\t\tconst {ch: ppp_ch} = a[ppp_i]!;\n//console.log(`-- 改行前二個目に「ぶら下げ」がない ppp:${ppp_i}:${ppp_ch}: pp:${pp_i}:${pp_ch}: i:${i}`);\n\t\t\t// 改行前二個目に「分割禁止」\n\t\t\tif (this.#reg分割禁止.test(pp_ch)) {\t// 分割禁止\n//console.log(` == 改行前二個目に「分割禁止」:${ppp_ch === pp_ch}`);\n\t\t\t\tif (ppp_ch === pp_ch) return {cont: false, ins: ppp_i};\n\t\t\t}\n\t\t\t// 改行前三個目に「行末禁則」\n\t\t\tif (this.#reg行末禁則.test(ppp_ch)) {\t// 行末禁則\n\t\t\t\tlet j = ppp_i;\n//console.log(` == 改行前三個目に「行末禁則」 j:${j}:${a[j].ch}:`);\n\t\t\t\twhile ((j = this.#i2pi(a, j)) >= 0) {\n//console.log(` -- ch:${a[j].ch}`);\n\t\t\t\t\tif (! this.#reg行末禁則.test(a[j]!.ch)) break;// 行禁はスキップ\n\t\t\t\t}\n//console.log(` === j:${j +1}:${a[j +1].ch}: tn:${a[j +1].elm.parentElement?.tagName}`);\n\t\t\t\treturn {cont: false, ins: j +1};\t// 行末禁則\n\t\t\t}\n\t\t}\n\n\t\treturn {cont: false, ins: pp_i};\n\t}\n\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-argument */\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */\n/* eslint-disable @typescript-eslint/restrict-plus-operands */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-return */\n/* ***** BEGIN LICENSE BLOCK *****\n\tCopyright (c) 2025-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_InfTxLay} from './TxtStage';\nimport {DebugMng} from './DebugMng';\n\nimport {Texture} from 'pixi.js';\n\n\nexport function htm2tx(fnc: (tx2: any)=> void, htmTxt: HTMLSpanElement, infTL :T_InfTxLay, padTx4x: number, padTx4y: number, hidden = true) {\n\t\t// tsayen/dom-to-image: Generates an image from a DOM node using HTML5 canvas https://github.com/tsayen/dom-to-image\n\n/*---*/\n\t\tconst util = {\n\t\t\tescape: (str: string)=> str.replaceAll(/([.*+?^${}()|[\\]/\\\\])/g, '\\\\$1'),\n\t\t\tmimeType: (url: any)=> {\n\t\t\t\tconst extension = parseExtension(url).toLowerCase();\n\t\t\t\treturn mimes()[extension] || '';\n\t\t\t},\n\t\t\tdataAsUrl,\n\t\t\tisDataUrl,\n\t\t\tresolveUrl,\n\t\t\tgetAndEncode,\n\t\t\tasArray: (arrayLike: StyleSheetList)=> {\n\t\t\t\tconst a: StyleSheet[] = [];\n\t\t\t\tconst len = arrayLike.length;\n\t\t\t\tfor (let i=0; i<len; ++i) a.push(arrayLike[i]!);\n\t\t\t\treturn a;\n\t\t\t},\n\t\t};\n\t\t\tfunction mimes(): any {\n\t\t\t\t// Only WOFF and EOT mime types for fonts are 'real'\n\t\t\t\t// * see http://www.iana.org/assignments/media-types/media-types.xhtml\n\t\t\t\tconst WOFF = 'application/font-woff';\n\t\t\t\tconst JPEG = 'image/jpeg';\n\n\t\t\t\treturn {\n\t\t\t\t\t'woff': WOFF,\n\t\t\t\t\t'woff2': WOFF,\n\t\t\t\t\t'ttf': 'application/font-truetype',\n\t\t\t\t\t'eot': 'application/vnd.ms-fontobject',\n\t\t\t\t\t'png': 'image/png',\n\t\t\t\t\t'jpg': JPEG,\n\t\t\t\t\t'jpeg': JPEG,\n\t\t\t\t\t'gif': 'image/gif',\n\t\t\t\t\t'tiff': 'image/tiff',\n\t\t\t\t\t'svg': 'image/svg+xml'\n\t\t\t\t};\n\t\t\t}\n\n\n\t\tconst inliner = newInliner();\n\n\n\t\tconst fontFaces = newFontFaces();\n\n\n\t\tfunction embedFonts(node: any) {\n\t\t\treturn fontFaces.resolveAll()\n\t\t\t.then(cssText=> {\n\t\t\t\tconst styleNode = document.createElement('style');\n\t\t\t\tnode.appendChild(styleNode);\n\t\t\t\tstyleNode.appendChild(document.createTextNode(cssText));\n\t\t\t//console.log('cssText:%s:', cssText);\t//------------\n\t\t\t\treturn node;\n\t\t\t});\n\t\t}\n\n\n\t\t\tfunction parseExtension(url: any) {\n\t\t\t\tconst match = /\\.([^./]*?)$/g.exec(url);\n\t\t\t\treturn match?.[1] ?? '';\n\t\t\t}\n\n\t\t\tfunction isDataUrl(url: any) {\n\t\t\t\treturn url.search(/^(data:)/) !== -1;\n\t\t\t}\n\n\t\t\tfunction resolveUrl(url: any, baseUrl: any) {\n\t\t\t\tconst doc = document.implementation.createHTMLDocument();\n\t\t\t\tconst base = doc.createElement('base');\n\t\t\t\tdoc.head.appendChild(base);\n\t\t\t\tconst a = doc.createElement('a');\n\t\t\t\tdoc.body.appendChild(a);\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\tbase.href = baseUrl;\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\ta.href = url;\n\t\t\t\treturn a.href;\n\t\t\t}\n\n\t\t\tfunction getAndEncode(url: any) {\n\t\t\t\tconst TIMEOUT = 30000;\n\t\t\t\t//if(domtoimage.impl.options.cacheBust) {\n\t\t\t\t\t// Cache bypass so we dont have CORS issues with cached images\n\t\t\t\t\t// Source: https://developer.mozilla.org/en/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest#Bypassing_the_cache\n\t\t\t\t//\turl += ((/\\?/).test(url) ? \"&\" : \"?\") + (new Date).getTime();\n\t\t\t\t//}\n\n\t\t\t\treturn new Promise(function(resolve) {\n\t\t\t\t\tconst request = new XMLHttpRequest;\n\n\t\t\t\t\trequest.onreadystatechange = done;\n\t\t\t\t\trequest.ontimeout = timeout;\n\t\t\t\t\trequest.responseType = 'blob';\n\t\t\t\t\trequest.timeout = TIMEOUT;\n\t\t\t\t\trequest.open('GET', url, true);\n\t\t\t\t\trequest.send();\n\n\t\t\t\t\t//let placeholder;\n\t\t\t\t\t//if(domtoimage.impl.options.imagePlaceholder) {\n\t\t\t\t\t//\tlet split = domtoimage.impl.options.imagePlaceholder.split(/,/);\n\t\t\t\t\t//\tif(split && split[1]) {\n\t\t\t\t\t//\t\tplaceholder = split[1];\n\t\t\t\t\t//\t}\n\t\t\t\t\t//}\n\n\t\t\t\t\tfunction done() {\n\t\t\t\t\t\tif (request.readyState !== 4) return;\n\n\t\t\t\t\t\tif (request.status !== 200) {\n\t\t\t\t\t\t//\tif(placeholder) {\n\t\t\t\t\t\t//\t\tresolve(placeholder);\n\t\t\t\t\t\t//\t} else {\n\t\t\t\t\t\t\t\tfail('cannot fetch resource: ' + url + ', status: ' + request.status);\n\t\t\t\t\t\t//\t}\n\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst encoder = new FileReader;\n\t\t\t\t\t\tencoder.onloadend = function() {\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-base-to-string\n\t\t\t\t\t\t\tconst content = encoder.result!.toString().split(/,/)[1];\n\t\t\t\t\t\t\tresolve(content);\n\t\t\t\t\t\t};\n\t\t\t\t\t\tencoder.readAsDataURL(request.response);\n\t\t\t\t\t}\n\n\t\t\t\t\tfunction timeout() {\n\t\t\t\t\t//\tif(placeholder) {\n\t\t\t\t\t//\t\tresolve(placeholder);\n\t\t\t\t\t//\t} else {\n\t\t\t\t\t\t\tfail('timeout of ' + TIMEOUT + 'ms occured while fetching resource: ' + url);\n\t\t\t\t\t//\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfunction fail(message: any) {\n\t\t\t\t\t\tconsole.error(message);\n\t\t\t\t\t\tresolve('');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfunction dataAsUrl(content: any, type: any) {\n\t\t\t\treturn 'data:' + type + ';base64,' + content;\n\t\t\t}\n\n\n\t\tfunction newInliner() {\n\t\t\tconst URL_REGEX = /url\\(['\"]?([^'\"]+?)['\"]?\\)/g;\n\n\t\t\treturn {\n\t\t\t\tinlineAll,\n\t\t\t\tshouldProcess,\n\t\t\t};\n\n\t\t\tfunction shouldProcess(str: any) {\n\t\t\t\treturn str.search(URL_REGEX) !== -1;\n\t\t\t}\n\n\t\t\tfunction readUrls(str: any) {\n\t\t\t\tconst result: string[] = [];\n\t\t\t\tlet match: RegExpExecArray | null;\n\t\t\t\t// eslint-disable-next-line no-cond-assign\n\t\t\t\twhile (match = URL_REGEX.exec(str)) {\n\t\t\t\t\tresult.push(match[1]!);\n\t\t\t\t}\n\t\t\t\treturn result.filter(function(url) {\n\t\t\t\t\treturn ! util.isDataUrl(url);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfunction inline(str: any, url: any, baseUrl: any, get: any) {\n\t\t\t\treturn Promise.resolve(url)\n\t\t\t\t\t.then(url=> baseUrl ? util.resolveUrl(url, baseUrl) : url)\n\t\t\t\t\t.then(get || util.getAndEncode)\n\t\t\t\t\t.then(data=> util.dataAsUrl(data, util.mimeType(url)))\n\t\t\t\t\t.then(dataUrl=> str.replace(urlAsRegex(url), '$1' + dataUrl + '$3'));\n\n\t\t\t\tfunction urlAsRegex(url: any) {\n\t\t\t\t\treturn new RegExp('(url\\\\([\\'\"]?)(' + util.escape(url) + ')([\\'\"]?\\\\))', 'g');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction inlineAll(str: any, baseUrl: any, get?: any) {\n\t\t\t\tif (nothingToInline()) return Promise.resolve(str);\n\n\t\t\t\treturn Promise.resolve(str)\n\t\t\t\t\t.then(readUrls)\n\t\t\t\t\t.then(urls=> {\n\t\t\t\t\t\tlet done = Promise.resolve(str);\n\t\t\t\t\t\tfor (const url of urls) done = done.then(string=> inline(string, url, baseUrl, get));\n\t\t\t\t\t\treturn done;\n\t\t\t\t\t});\n\n\t\t\t\tfunction nothingToInline() {\n\t\t\t\t\treturn ! shouldProcess(str);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction newFontFaces() {\n\t\t\treturn {\n\t\t\t\tresolveAll,\n\t\t\t\timpl: {readAll}\n\t\t\t};\n\n\t\t\tfunction resolveAll() {\n\t\t\t\treturn readAll()\n\t\t\t\t.then(webFonts=> Promise.allSettled(\n\t\t\t\t\twebFonts.map((webFont: any)=> webFont.resolve())\n\t\t\t\t))\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-base-to-string\n\t\t\t\t.then(cssStrings=> cssStrings.join('\\n'));\n\t\t\t}\n\n\t\t\tfunction readAll() {\n\t\t\t\treturn Promise.resolve(util.asArray(document.styleSheets))\n\t\t\t\t\t.then(getCssRules)\n\t\t\t\t\t.then(selectWebFontRules)\n\t\t\t\t\t.then(rules=> rules.map(newWebFont));\n\t\t\t\t\t\t// console.log('map:%o:', rules) ||\n\n\t\t\t\tfunction selectWebFontRules(cssRules: any) {\n\t\t\t\t\treturn cssRules\n\t\t\t\t\t.filter((rule: any)=> rule.type === CSSRule.FONT_FACE_RULE)\n\t\t\t\t\t.filter((rule: any)=> inliner.shouldProcess(rule.style.getPropertyValue('src')));\n\t\t\t\t}\n\n\t\t\t\tfunction getCssRules(styleSheets: any) {\n\t\t\t\t\tconst cssRules: any = [];\n\t\t\t\t\tfor (const sheet of styleSheets) {\n\t\t\t\t\t//console.log('1:%o', sheet);\t//-------\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tif (sheet.href) continue;\n\t\t\t\t\t\t//console.log(sheet.cssRules);\n\t\t\t\t\t\t\tutil.asArray(sheet.cssRules || []).forEach(cssRules.push.bind(cssRules));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch (e) {\n\t\t\t\t\t\t\tconsole.error('Error while reading CSS rules from ' + sheet.href, String(e));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn cssRules;\n\t\t\t\t}\n\n\t\t\t\tfunction newWebFont(webFontRule: any) {\n\t\t\t\t\t//console.log('newWebFont:%o:', webFontRule);\t//-------\n\t\t\t\t\treturn {\n\t\t\t\t\t\tresolve: function resolve() {\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/prefer-optional-chain\n\t\t\t\t\t\t\tconst baseUrl = (webFontRule.parentStyleSheet || {}).href;\n\t\t\t\t\t\t\treturn inliner.inlineAll(webFontRule.cssText, baseUrl);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsrc() {\n\t\t\t\t\t\t\treturn webFontRule.style.getPropertyValue('src');\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n/*\n\t\tfetch('http://localhost:8080/prj/mat/my_himajihoso.woff2')\n\t\t.then(response=> {\n\t\t\tif (response.ok) return response.blob();\n\t\t\tthrow new Error('Network response was not ok.');\n\t\t})\n\t\t.then(blob=> new Promise((resolve, reject)=> {\n\t\t\tconst reader = new FileReader;\n\t\t\treader.onloadend = ()=> resolve(reader.result);\n\t\t\treader.onerror = reject;\n\t\t\treader.readAsDataURL(blob);\n\t\t}))\n\t\t.then(dataUrl => {\n\t\t\t// data:application/font-woff2;base64,d09GMk9U\n\t\t\tconst css =\n\t\t\t'body { margin: 0px; padding: 0px; overflow: hidden; }\\n'+\n\t\t\t'body { line-height: 36px; }\\n'+\n\n\t\t\t`@font-face { font-family: my_himajihoso; src: url(\"${\n\t\t\t\t'data:application/font-woff;base64,'+\n\t\t\t\tString(dataUrl)\n\t\t\t\t.split(/,/)[1]\n\t\t//\t\t.replace(/([.*+?^${}()|\\[\\]\\/\\\\])/g, '\\\\$1')\n\t\t\t}\"); }`;\n\n\t\tconsole.log('css:'+ css);\n\t\tconsole.log('@font-face { font-family: my_himajihoso; src: url(\"data:application/font-woff;base64,d09GMk9UVE8AAA...bhUAAA==\"); }\\n');\n\t\t\tthis.styleHtmTxt.appendChild(document.createTextNode(css));\n*/\n\n\t\tPromise.resolve(htmTxt)\n\t\t.then(node=> {\t//console.log(`🍇 toSvg`);\n\t\t\tconst cln = <HTMLSpanElement>node.cloneNode(true);\n\t\t\tcln.style.padding = '0px';\t\t// ややこしいのでシンプルに\n\t\t\tcln.style.paddingRight = padTx4x +'px';\n\t\t\tcln.style.paddingTop = padTx4y +'px';\n\t\t\tcln.style.left = '0px';\n\t\t\tcln.style.top = '0px';\n\t\t\tcln.style.width = infTL.$width -infTL.pad_left -infTL.pad_right +'px';\n\t\t\tcln.style.height = infTL.$height -infTL.pad_top -infTL.pad_bottom +'px';\n\t\t\t//console.log(cln.style.cssText);\n\t\t\thtmTxt.hidden = hidden;\n\t\t\treturn cln;\n\t\t})\n\t\t.then(embedFonts)\n\t\t.then(node=> {\t//console.log(`🍈 makeSvgDataUri`);\n\t\t\tnode.setAttribute('xmlns', 'http://www.w3.org/1999/xhtml');\n\t\t\tconst img = new Image;\n\t\t\t//img.crossOrigin = 'Anonymous';\t//--いまのとこ不要\n\t\t\timg.src = `data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${String(infTL.$width)\n\t\t\t}px\" height=\"${String(infTL.$height)\n\t\t\t}px\"><foreignObject x=\"0\" y=\"0\" width=\"100%\" height=\"100%\">${\n\t\t\t\t(new XMLSerializer).serializeToString(node)\n\t\t\t\t.replaceAll('#', '%23').replaceAll('\\n', '%0A')\n\t\t\t}</foreignObject></svg>` // ? + (new Date).getTime();\n\t\t\treturn new Promise(re=> {img.onload = ()=> re(img)});\n\t\t})\n\t\t.then(img=> new Promise(re=> setTimeout(()=> re(img) , 100)))\n\t\t\t// 無くすとSafariでテクスチャ取れない場合があった\n\t\t\t// clearTimeout()不要と判断\n\t\t.then((img: any)=> {\t//console.log(`🍉 toPng`);\n\t\t\tconst canvas = document.createElement('canvas');\n\t\t\tcanvas.width = infTL.$width;\n\t\t\tcanvas.height = infTL.$height;\n\t\t\tcanvas.getContext('2d')!.drawImage(img, 0, 0);\n\t\t\tfnc(Texture.from(canvas));\n\t\t})\n\t\t.catch((e: unknown)=> DebugMng.myTrace(`goTxt() = ${String(e)}`));\n\t}\n","/* eslint-disable @typescript-eslint/no-unsafe-argument */\n/* eslint-disable @typescript-eslint/restrict-plus-operands */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\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 {CmnLib, type IEvtMng, RPN_COMP_CHIN, argChk_Boolean, argChk_Num} from './CmnLib';\nimport type {TArg} from './Grammar';\nimport type {Config} from './Config';\nimport {CmnTween} from './CmnTween';\nimport {SpritesMng} from './SpritesMng';\nimport {DebugMng} from './DebugMng';\nimport type {IMakeDesignCast} from './LayerMng';\n//import {TxtLayDesignCast, TxtLayPadDesignCast} from './DesignCast';\nimport type {SysBase} from './SysBase';\nimport type {T_RP_Hyphenation, IChRect} from './Hyphenation';\nimport {Hyphenation} from './Hyphenation';\nimport type {ScriptIterator} from './ScriptIterator';\nimport {Reading} from './Reading';\nimport type {T_cmdTxt_JSON} from './TxtLayer';\nimport {htm2tx} from './htm2tx';\n\nimport {Container, Sprite, Graphics, Rectangle, Renderer, Application} from 'pixi.js';\nimport {Group, Tween} from '@tweenjs/tween.js'\n\n\nexport type T_InfTxLay = {\n\tfontsize\t: number;\n\t$width\t\t: number;\t// レイヤサイズであり、背景色(画像)サイズ\n\t$height\t\t: number;\n\tpad_left\t: number;\t// paddingLeft(レイヤサイズの内側のスペーサー)\n\tpad_right\t: number;\t// paddingRight\n\tpad_top\t\t: number;\t// paddingTop\n\tpad_bottom\t: number;\t// paddingBottom\n}\n\ntype T_SpTw = {\n\tsp\t: Container;\n\ttw\t: Tween<Container> | undefined;\n}\n\n\nexport type T_RP_layTxtStage = {\n\tinfTL\t\t: T_InfTxLay;\n\tcssText\t\t: string;\n\tleft\t\t: number;\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tch_filter\t: any[];\n\tfi_easing\t: string;\n\tfo_easing\t: string;\n\thyph\t\t: T_RP_Hyphenation;\n}\n\ntype T_ChInOutStyle = {\n\twait\t: number;\n\talpha\t: number;\n\tx\t\t: string;\n\ty\t\t: string;\n\twidth?\t: string;\n\theight?\t: string;\n\tnx\t\t: number;\n\tny\t\t: number;\n\tscale_x\t: number;\n\tscale_y\t: number;\n\trotate\t: number;\n\tjoin\t: boolean;\n\tease\t: string;\n\tdelay?\t: number;\n};\n\nexport class TxtStage extends Container {\n\tstatic\t#cfg\t: Config;\n\tstatic\t#appPixi: Application;\n\tstatic\tinit(cfg: Config, appPixi: Application): void {\n\t\tTxtStage.#cfg = cfg;\n\t\tTxtStage.#appPixi = appPixi;\n\n\t\tCmnTween.addGrp(TxtStage.grp);\n\t}\n\tstatic\treadonly\tgrp = new Group;\n\n\tstatic\t#evtMng\t: IEvtMng;\n\tstatic\t#scrItr\t: ScriptIterator;\n\tstatic\tsetEvtMng(evtMng: IEvtMng, scrItr: ScriptIterator) {\n\t\tTxtStage.#evtMng = evtMng;\n\t\tTxtStage.#scrItr = scrItr;\n\t}\n\n\tstatic\tdestroy() {\n\t\tTxtStage.grp.removeAll();\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\tTxtStage.#hChInStyle\t= Object.create(null);\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\tTxtStage.#hChOutStyle\t= Object.create(null);\n\n\t\tTxtStage.delBreak();\n\t}\n\n\n\t\t\t\t#htmTxt\t= document.createElement('span');\t// サンプリング元\n\treadonly\t#cntTxt\t\t\t= new Container;\t\t\t// サンプリング先\n\treadonly\t#grpDbgMasume\t= new Graphics;\n\tstatic\treadonly\t#hWarnStyle = {\n\t\t'background-color'\t\t: 0,\n\t\t'border-bottom-width'\t: 0,\n\t\t'border-left-width'\t\t: 0,\n\t\t'border-right-width'\t: 0,\n\t\t'border-top-width'\t\t: 0,\n\t\t'margin-bottom'\t: 0,\n\t\t'margin-left'\t: 0,\n\t\t'margin-right'\t: 0,\n\t\t'margin-top'\t: 0,\n\t};\n\n\n\t#hyph\t= new Hyphenation;\n\tnoticeCompTxt\t= ()=> { /* empty */ };\n\n\t#fncMasume;\n\n\n\tconstructor(private readonly ctn: Sprite, private readonly canFocus: ()=> boolean, private readonly sys: SysBase) {\n\t\tsuper();\n\n\t\tthis.#htmTxt.classList.add('sn_tx');\n\t\tthis.#htmTxt.style.position = 'absolute';\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tTxtStage.#appPixi.view.parentElement!.appendChild(this.#htmTxt);\n\n\t\tthis.addChild(this.#cntTxt);\n\n\t\tthis.addChild(this.#grpDbgMasume);\n\t\tthis.#grpDbgMasume.name = 'grpDbgMasume';\n\t\tconst fncMasumeLog = CmnLib.debugLog\n\t\t\t? ({ch, rect: {x, y, width, height}}: IChRect)=> console.log(`🍌 masume ch:${ch} x:${String(x)} y:${String(y)} w:${String(width)} h:${String(height)}`)\n\t\t\t: ()=> { /* empty */ };\n\t\tthis.#fncMasume = TxtStage.#cfg.oCfg.debug.masume\n\t\t\t? (cr: IChRect)=> {\n\t\t\t\tfncMasumeLog(cr);\n\n\t\t\t\tconst {x, y, width, height} = cr.rect;\n\t\t\t\tthis.#grpDbgMasume\n\t\t\t\t.beginFill(0x66CCFF, 0.5)\n\t\t\t\t.lineStyle(2, 0xFF3300, 1)\n\t\t\t\t.drawRect(x, y, width, height)\n\t\t\t\t.endFill();\n\t\t\t}\n\t\t\t: ()=> { /* empty */ };\n\n//\t\tthis.#idc = new TxtLayDesignCast(ctn, this);\n//\t\tthis.#idc.adopt(this.#idcCh);\n\n\t\tthis.noticeCompTxt = sys.isApp && TxtStage.#cfg.oCfg.debug.dumpHtm\n\t\t? ()=> {\n\t\t\tReading.notifyEndProc(RPN_COMP_CHIN);\n\n\t\t\tconst htm = this.#htmTxt.innerHTML;\n\t\t\tif (htm === '') return;\n\t\t\tconst {fn, ln} = TxtStage.#scrItr.nowScrFnLn();\n\t\t\tconst id = `dumpHtm ${\n\t\t\t\tctn.name.slice(0, -7)\t// 末尾「 page=B」削り\n\t\t\t\t.replaceAll(':', '=')\t\t\t// ファイル名で困る文字\n\t\t\t}(fn=${fn} line=${String(ln)})`;\n\t\t\tvoid sys.outputFile(\n\t\t\t\tsys.path_downloads + id +'.htm',\n`<!doctype html><html><head><meta charset=utf-8><title>${id}</title>\n<h1>${id}</h1>${\n\thtm\t// outerHTML からのレイヤ再現などしたいとこだがオーバースペック\n\t.replaceAll(/ class=\"sn_ch\"|animation-delay: \\d+ms; ?| data-add=\"{"ch_in_style":"default", "ch_out_style":"default"}\"/g, '')\n\t.replaceAll(' style=\"\"', '')\t// chromeで警告が出るので\n\t.replaceAll(/(<\\/?ruby>)/g, '\\n$1\\n')\n\t.replaceAll(/<(br|\\/span)>/g, '<$1>\\n')\n}`,\n\t\t\t);\n\t\t}\n\t\t: ()=> Reading.notifyEndProc(RPN_COMP_CHIN);\n\t}\n\n//\treadonly\t#idc\t:TxtLayDesignCast;\n//\treadonly\t#idcCh\t= new TxtLayPadDesignCast(this);\n\t#infTL :T_InfTxLay = {\n\t\tfontsize\t: 24,\n\t\t$width\t\t: 0,\t// レイヤサイズであり、背景色(画像)サイズ\n\t\t$height\t\t: 0,\n\t\tpad_left\t: 0,\t// paddingLeft(レイヤサイズの内側のスペーサー)\n\t\tpad_right\t: 0,\t// paddingRight\n\t\tpad_top\t\t: 0,\t// paddingTop\n\t\tpad_bottom\t: 0,\t// paddingBottom\n\t}\n\n\tlay(hArg: TArg) {\n\t\tconst s = this.#htmTxt.style;\n\t\tif ('style' in hArg) {\n\t\t\tif (hArg.style) {\n\t\t\t\tconst cln = document.createElement('span');\n\t\t\t\tcln.style.cssText = hArg.style;\n\t\t\t\tconst len = cln.style.length;\n\t\t\t\tfor (let i=0; i<len; ++i) {\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\t\tconst key: any = cln.style[i];\n\t\t\t\t\tif (key in TxtStage.#hWarnStyle) {\n\t\t\t\t\t\tDebugMng.myTrace(`${String(key)}は指定できません`, 'W');\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\ts[key] = cln.style[key]!;\n\t\t\t\t}\n\t\t\t\tif (! cln.style.opacity && 'alpha' in hArg) s.opacity = String(this.ctn.alpha);\n\t\t\t}\n\t\t\telse this.#htmTxt.style.cssText = '';\n\t\t}\n\t\telse if ('alpha' in hArg) s.opacity = String(this.ctn.alpha);\n\n\t\tif ('width' in hArg) s.width = String(hArg.width ?? '0') +'px';\n\t\tif ('height' in hArg) s.height = String(hArg.height ?? '0') +'px';\n\t\tif ('pl' in hArg) s.paddingLeft = String(hArg.pl ?? '0') +'px';\n\t\tif ('pr' in hArg) s.paddingRight = String(hArg.pr ?? '0') +'px';\n\t\tif ('pt' in hArg) s.paddingTop = String(hArg.pt ?? '0') +'px';\n\t\tif ('pb' in hArg) s.paddingBottom = String(hArg.pb ?? '0') +'px';\n\t\tthis.#hyph.lay(hArg);\n\t\tthis.#lay_sub();\n//\t\tthis.#idc.sethArg(hArg);\n\n\t\t// CSS・インラインレイアウトで右や上にはみ出る分の余裕\n\t\tthis.#left = this.ctn.position.x;\n\t\t\t//-(CmnLib.isSafari && !CmnLib.isMobile && this.#isTategaki\n\t\t\t//\t? this.#infTL.pad_left +this.#infTL.pad_right\n\t\t\t//\t: 0);\t// 無効化 2022/02/09\n\t\ts.transformOrigin = `${String(this.ctn.pivot.x)}px ${String(this.ctn.pivot.y)}px`;\n\t\tthis.cvsResize();\n\t\ts.display = this.ctn.visible ?'inline' :'none';\n\n\t\t// パディングキャスト変更時・クリック待ち表示を追従させる(高速再描写)\n\t\tif (':redraw' in hArg && this.#lenHtmTxt > 0) {\n\t\t\tconst aSpan = [\n\t\t\t\tthis.#htmTxt.innerHTML.replaceAll(/(animation-delay: )\\d+ms/g, '$10ms'),\n\t\t\t\t'<span class=\\'sn_ch\\' data-add=\\'{\"ch_in_style\":\"default\"}\\'> </span>',\n\t\t\t];\n\t\t\tthis.#clearText();\t// 消去\n\t\t\tthis.goTxt(aSpan, true);\t// 高速 goTxt()\n\t\t}\n\t}\n\t// oxlint-disable-next-line no-unused-private-class-members\n\t#lh_half\t= 0;\t// 「g」などで下が欠ける問題対策\n\t#lay_sub() {\n\t\tconst s = this.#htmTxt.style;\n\t\tconst fs = parseFloat(s.fontSize || '0');\n\t\tthis.#infTL.fontsize = fs;\n\n\t\tthis.#infTL.pad_left = parseFloat(s.paddingLeft || '0');\n\t\tthis.#infTL.pad_right = parseFloat(s.paddingRight || '0');\n\t\tthis.#infTL.pad_top = parseFloat(s.paddingTop || '0');\n\t\tthis.#infTL.pad_bottom = parseFloat(s.paddingBottom || '0');\n\t\tthis.#infTL.$width = parseFloat(s.width || '0');\n\t\tthis.#infTL.$height = parseFloat(s.height || '0');\n\t\tthis.position.set(this.#infTL.pad_left, this.#infTL.pad_top);\n\n\t\tthis.#isTategaki = s.writingMode === 'vertical-rl';\n\n\t\tthis.#padTx4x = 0;\n\t\tthis.#padTx4y = 0;\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\tconst lh = s.lineHeight ?? '0';\n\t\tthis.#lh_half = this.#isTategaki\n\t\t\t? 0\n\t\t\t: (\tlh.endsWith('px')\n\t\t\t\t? parseFloat(lh)\n\t\t\t\t: fs *parseFloat(lh) -fs) /2;\n\t\t\t// globalThis.getComputedStyle(this.htmTxt)がチョイチョイ値を返さないので\n\t}\n\tcvsResize() {\n\t\tconst s = this.#htmTxt.style;\n\t\tconst cvsScale = this.sys.cvsScale;\n\t\ts.left = `${String(this.sys.ofsLeft4elm +this.#left *cvsScale)}px`;\n\t\ts.top = `${String(this.sys.ofsTop4elm +this.ctn.position.y *cvsScale)}px`;\n\t\ts.transform = `rotate(${String(this.ctn.angle)}deg) scale(${String(this.ctn.scale.x *cvsScale)}, ${String(this.ctn.scale.y *cvsScale)})`;\n\n//\t\tthis.#idc.cvsResize();\n//\t\tthis.#idcCh.cvsResize();\n\t}\n\t#left = 0;\n\t#isTategaki = false;\n\tget tategaki() {return this.#isTategaki}\n\t#padTx4x = 0;\n\t#padTx4y = 0;\n\n\tget\tinfTL(): T_InfTxLay {return this.#infTL}\n\tget\tgetWidth() {return this.#infTL.$width}\n\tget\tgetHeight() {return this.#infTL.$height}\n\n\tsetMySize(width: number, height: number) {\n\t\tthis.#infTL.$width = width;\n\t\tthis.#infTL.$height = height;\n\t\tthis.#htmTxt.style.width = String(this.#infTL.$width) +'px';\n\t\tthis.#htmTxt.style.height = String(this.#infTL.$height) +'px';\n\t}\n\n\n\t#aGoTxt\t: (()=> void)[] = [];\t// FIFO実行バッファ\n\tgoTxt(aSpan: string[], instant: boolean) {\n\t\tconst f = ()=> this.#goTxt_Proc(aSpan, instant);\n\t\tif (this.#aGoTxt.push(f) === 1) f();\t// len=1 で実行中を示す\n\t}\n\n\t#aRect\t: IChRect[]\t= [];\n\t#lenHtmTxt = 0;\n\tstatic\treadonly\t#SPAN_LAST = '<span class=\\'sn_ch sn_ch_last\\'> </span>';\n\t#goTxt_Proc(aSpan: string[], instant: boolean) {\n\t\tTxtStage.#cntBreak.visible = false;\n\n\t\tlet begin = this.#aRect.length;\n\t\tlet bkHtm = '';\n\t\tif (begin === 0) {\t// 初回\n\t\t\tif (TxtStage.#cfg.oCfg.debug.masume) {\n\t\t\t\tif (CmnLib.debugLog) console.log(`🍌 masume ${this.name\n\t\t\t\t} v:${String(this.visible)} l:${String(this.x)\n\t\t\t\t} t:${String(this.y)} a:${String(this.alpha)\n\t\t\t\t} pl:${String(this.#infTL.pad_left)\n\t\t\t\t} pr:${String(this.#infTL.pad_right)\n\t\t\t\t} pt:${String(this.#infTL.pad_top)\n\t\t\t\t} pb:${String(this.#infTL.pad_bottom)\n\t\t\t\t} w:${String(this.#infTL.$width)\n\t\t\t\t} h:${String(this.#infTL.$height)}`);\n\n\t\t\t\tthis.#grpDbgMasume.clear()\n\t\t\t\t.beginFill(0x33FF00, 0.2)\t// 文字レイヤ\n\t\t\t\t.lineStyle(1, 0x33FF00, 1)\n\t\t\t\t.drawRect(-this.#infTL.pad_left, -this.#infTL.pad_top, this.#infTL.$width, this.#infTL.$height)\n\t\t\t\t\t// 親の親の cntInsidePadding が padding ぶん水平移動してるので引く。\n\t\t\t\t.endFill()\n\n\t\t\t\t.beginFill(0x0033FF, 0.2)\t// cntInsidePadding\n\t\t\t\t.lineStyle(2, 0x0033FF, 1)\n\t\t\t\t.drawRect(0, 0,\n\t\t\t\tthis.#infTL.$width -this.#infTL.pad_left -this.#infTL.pad_right,\n\t\t\t\tthis.#infTL.$height -this.#infTL.pad_top -this.#infTL.pad_bottom)\n\t\t\t\t.endFill();\n\t\t\t}\n\n\t\t\tthis.#htmTxt.innerHTML = [...aSpan].join('').replaceAll(/[\\n\\t]/g, '') +TxtStage.#SPAN_LAST;\t// 末尾改行削除挙動対策\n\n\t\t\tif (! this.#hyph.break_fixed) {\n\t\t\t\tconst sty = globalThis.getComputedStyle(this.#htmTxt);\n\t\t\t\tconst rs = parseFloat(sty.fontSize);\n\t\t\t\tif (this.#isTategaki) {\n\t\t\t\t\tthis.#hyph.break_fixed_left = (this.#infTL.$width -this.#infTL.pad_left -this.#infTL.pad_right -rs *1.5) *this.sys.cvsScale;\n\t\t\t\t\tthis.#hyph.break_fixed_top = 0;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.#hyph.break_fixed_left = 0;\n\t\t\t\t\tthis.#hyph.break_fixed_top = rs /2 *this.sys.cvsScale;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tbkHtm = this.#htmTxt.innerHTML;\n\t\t\t// 末尾改行削除挙動対策\n\t\t\t--begin;\n//console.log(`fn:TxtStage.ts nm=${this.name} begin:${begin} bkHtm=${bkHtm}=`);\n\t\t\tthis.#htmTxt.getElementsByClassName('sn_ch_last').item(0)?.remove();\n\t\t\t\t// 前回の末尾を削除\n\n\t\t\tthis.#htmTxt.querySelectorAll(':scope > br').forEach(e=> e.remove());\t// 前回の禁則処理を一度削除\n\t\t\t\t// :scope - CSS: カスケーディングスタイルシート | MDN https://developer.mozilla.org/ja/docs/Web/CSS/:scope\n\t\t\tthis.#htmTxt.insertAdjacentHTML(\n\t\t\t\t'beforeend',\n\t\t\t\taSpan.slice(this.#lenHtmTxt).join('').replaceAll(/[\\n\\t]/g, '')\n\t\t\t\t+TxtStage.#SPAN_LAST\t// 末尾改行削除挙動対策\n\t\t\t);\n\t\t}\n\t\t\t// 後の禁則処理判定で誤判定するので、innerHTML 時にムダな改行やタブは削除\n\t\t\t// [r]は後述コメントのHTMLタグになってるので問題なし\n\n\t\t// ルビ付き文字に背景指定(style='background:')がある場合、「文字」と「ルビ」と「その二つを含んだ領域」の三つが個別に塗られるが、三つめは背景指定を削除する\n\t\tthis.#htmTxt.querySelectorAll('.sn_ch:has(> ruby)').forEach(v=> {(<HTMLElement>v).style.background = ''});\t// :has直前に空白厳禁\n\n\t\tthis.#lenHtmTxt = aSpan.length;\n//console.log(`fn:TxtStage.ts nm=${this.name} === ==${this.#htmTxt.innerHTML.slice(360)}==`);\n\n\t\t// this.#getChRects()使用準備\n\t\tconst cvsScale = this.sys.cvsScale;\n\t\tconst bcr = this.#htmTxt.getBoundingClientRect();\n\t\tconst sx = bcr.left +this.#infTL.pad_left;\n\t\tconst sy = bcr.top +this.#infTL.pad_top;\n\t\tlet cnvRect :(rng: Range, ch: string)=> Rectangle;\n\t\tif (cvsScale === 1) cnvRect = (rng, ch)=> {\n\t\t\tconst r = rng.getBoundingClientRect();\n\t\t\treturn new Rectangle(\n\t\t\t\tr.left -sx,\n\t\t\t\tr.top -sy,\n\t\t\t\tr.width,\n\t\t\t\tr.height +('gjqy'.includes(ch) ?this.#lh_half :0)\n\t\t\t);\n\t\t};\n\t\telse {\n\t\t\t// Resizeを意識してDOM位置をPIXIに変換\n\t\t\t// transform scale を一時的に変更する手もあるが、ややずれるしDOM影響大\n\t\t\tconst ox = this.sys.ofsPadLeft_Dom2PIXI +bcr.left *(1- cvsScale);\n\t\t\tconst oy = this.sys.ofsPadTop_Dom2PIXI +bcr.top *(1- cvsScale);\n\t\t\tcnvRect = (rng, ch)=> {\n\t\t\t\tconst r = rng.getBoundingClientRect();\n\t\t\t\treturn new Rectangle(\n\t\t\t\t\t(r.left -ox) /cvsScale -sx,\n\t\t\t\t\t(r.top -oy) /cvsScale -sy,\n\t\t\t\t\tr.width /cvsScale,\n\t\t\t\t\t(r.height +('gjqy'.includes(ch) ?this.#lh_half :0)) /cvsScale,\n\t\t\t\t);\n\t\t\t};\n\t\t}\n\n\t\tconst [a, len] = this.#hyph.hyph(this.#htmTxt, cnvRect, this.#isTategaki, begin, bkHtm);\n\t\tthis.#aRect = a;\n\n\t\tconst ease = CmnTween.ease(this.#fi_easing);\n\n\t\tfor (let i=begin; i<len; ++i) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tconst cr = this.#aRect[i]!;\n\t\t\tconst {elm: {dataset, parentElement}, rect} = cr;\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\tconst arg = JSON.parse(dataset.arg ?? '{\"delay\": 0}');\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\tconst add = JSON.parse(dataset.add ?? '{}');\n\t\t\tconst cis = TxtStage.#hChInStyle[add.ch_in_style];\n\t\t\tthis.#fncMasume(cr);\n\n\t\t\tif (dataset.cmd === 'grp') {\n\t\t\t\tconst cnt = new Container;\t// 親コンテナかまし、即spWork()\n\t\t\t\tthis.#cntTxt.addChild(cnt);\n\t\t\t\t\t// 次のcsv2Spritesが即終わる場合もあるので先に行なう\n\t\t\t\tnew SpritesMng(arg.pic, cnt, sp=> {\n\t\t\t\t\tthis.#spWork(cnt, arg, add, rect, ease, cis ?? {});\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\t\t\t\tif (! cnt.parent) cnt.removeChild(sp);\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (dataset.lnk) {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion, @typescript-eslint/no-non-null-assertion\n\t\t\t\tconst eCh = <HTMLElement>parentElement!.closest('[data-arg]')!;\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\tconst aLnk = JSON.parse(eCh.dataset.arg ?? '{}');\n\t\t\t\taLnk.key = `lnk=[${String(i)}] `+ this.name;\n\t\t\t\tconst sp = new Sprite;\n\t\t\t\tthis.#spWork(sp, aLnk, add, rect, ease, cis ?? {});\n\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\tconst st_normal = aLnk.style ?? '';\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\tconst st_hover = st_normal +(aLnk.style_hover ?? '');\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\tconst st_clicked = st_normal +(aLnk.style_clicked ?? '');\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\tconst st_r_normal = aLnk.r_style ?? '';\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\tconst st_r_hover = st_r_normal +(aLnk.r_style_hover ?? '');\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\tconst st_r_clicked = st_r_normal +(aLnk.r_style_clicked ?? '');\n\n\t\t\t\tconst nlRt = Array.from(eCh.getElementsByTagName('rt'));\n\t\t\t\tfor (const e of nlRt) e.dataset.st_r_bk = e.style.cssText;\n\t\t\t\tconst st_bk = eCh.style.cssText;\n\t\t\t\tconst fncStyle = (st: string, st_r: string)=> {\n\t\t\t\t\teCh.style.cssText = st_bk + st;\n\t\t\t\t\tfor (const e of nlRt) e.style.cssText = e.dataset.st_r_bk + st_r;\n\t\t\t\t};\n\n\t\t\t\tconst enabled = argChk_Boolean(aLnk, 'enabled', true);\n\t\t\t\tif (enabled) TxtStage.#evtMng.button(aLnk, sp,\n\t\t\t\t\t()=> fncStyle(st_normal, st_r_normal),\n\t\t\t\t\t()=> {\n\t\t\t\t\t\tif (! this.canFocus()) return false;\n\n\t\t\t\t\t\tfncStyle(st_hover, st_r_hover);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t},\n\t\t\t\t\t()=> fncStyle(st_clicked, st_r_clicked)\n\t\t\t\t);\n\t\t\t\telse fncStyle(\n\t\t\t\t\tst_normal +(aLnk.style_disable ?? 'color: gray;'),\n\t\t\t\t\tst_r_normal +(aLnk.r_style_disable ?? 'color: gray;')\n\t\t\t\t);\n\t\t\t\tthis.#cntTxt.addChild(sp);\n\t\t\t}\n\t\t}\n\n\t\t// 文字出現演出・開始〜終了\n\t\tconst chs = Array.from(<HTMLCollectionOf<HTMLElement>>this.#htmTxt.getElementsByClassName('sn_ch_yet'));\n// console.log(`fn:TxtStage.ts nm=${this.name} StartChIn <==`);\n\t\tthis.#fncEndChIn = ()=> {\n// console.log(`fn:TxtStage.ts nm=${this.name} fncEndChIn ==> '${lastElm?.textContent}' cls:${lastElm?.className}:`);\n\n\t\t\tthis.#fncEndChIn = ()=> false;\n\t\t\tfor (const v of chs) v.className = 'sn_ch';\n\t\t\tTxtStage.#cntBreak.position.set(\n\t\t\t\tthis.#hyph.break_fixed_left,\n\t\t\t\tthis.#hyph.break_fixed_top,\n\t\t\t);\n\t\t\tTxtStage.#cntBreak.visible = true;\n\t\t\t/*\n\t\t\t\tこれらはセットで確認すること。兼ね合いにより、いずれかが破綻する場合がある\n\t\t\t\t\t- 末尾文字表示でカーソルが次行先頭に来てしまうことのないよう\n\t\t\t\t\t- 改行→クリック待ち、の後で改行が消えないよう\n\t\t\t\t\t- 冒頭クリック待ち+改行での表示確認\n\t\t\t*/\n\t\t\tthis.noticeCompTxt();\n\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tconst f = this.#aGoTxt.shift()!;\t// 実行中の一個必ず入ってる(clearText注意)\n\t\t\tif (this.#aGoTxt.length > 0) f();\t// まだあれば実行待ちなので実行\n\n\t\t\treturn true;\n\t\t};\n\n\t\t// アニメ開始(sn_ch を置換しないよう注意)\n\t\tfor (const v of chs) v.className = v.className.replace('sn_ch_yet sn', 'go');\n\t\tif (begin > 0) ++begin;\t// 末尾改行削除挙動対策\n\n\t\t// 文字表示に時間をかける最後の文字を探す。末尾はダミー(#SPAN_LAST)\n\t\tlet lastElm: HTMLElement | undefined = undefined;\n\t\tfor (let i=len -2; i>=0; --i) {\t\t// 末尾の手前から\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tconst {elm} = this.#aRect[i]!;\n\t\t\tif (elm.tagName !== 'SPAN') continue;\t// ルビ以外\n\n//console.log(`fn:TxtStage.ts nm=${this.name} txt:${elm.textContent}: i:${i} begin:${begin} len:${len} elm:%o`, elm);\n\t\t\tlastElm = elm.parentElement?.tagName === 'RUBY'\n\t\t\t\t? elm.parentElement.parentElement ?? elm // [tcy]も[graph]も\n\t\t\t\t: elm;\n\t\t\tbreak;\n\t\t}\n\t\tif (! lastElm || instant || begin === len) {this.#fncEndChIn(); return}\n\t\t\t// 「animation-duration: 0ms;」だと animationend が発生しないので。\n\t\t\t// if 三項目の === は右クリック戻りで起こる\n\n\t\tconst fnc = ()=> {\n\t\t\tlastElm.removeEventListener('animationend', fnc);\n\t\t\t\t// {once: true} より、明示的な removeEventListener のほうがサクサク解放するようである。屋上屋を架す事になりにくく、未解放リソースグラフでも低く抑えられる。\n\t\t\tthis.#fncEndChIn();\n\t\t};\n\t\tlastElm.addEventListener('animationend', fnc, {once: true, signal: this.#ac.signal});\t// クリックキャンセル時は発生しない\n\t\t\t// 差し替えるので「()=> 」形式のままにすること\n\t}\n\t#fncEndChIn: ()=> boolean\t= ()=> false;\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t#spWork(sp: Container, arg: T_ChInOutStyle, add: any, rct: Rectangle, ease: (k: number)=> number, cis: any) {\n\t\tsp.alpha = 0;\n\t\tif (arg.x) rct.x = arg.x.startsWith('=')\n\t\t\t? rct.x +parseInt(arg.x.slice(1))\n\t\t\t: parseInt(arg.x);\n\t\tif (arg.y) rct.y = arg.y.startsWith('=')\n\t\t\t? rct.y +parseInt(arg.y.slice(1))\n\t\t\t: parseInt(arg.y);\n\t\tif (arg.width) rct.width = parseInt(arg.width);\n\t\tif (arg.height) rct.height = parseInt(arg.height);\n\t\tif (arg.wait) cis.wait = arg.wait;\n\t\tsp.width = rct.width;\n\t\tsp.height = rct.height;\n\t\tif (cis.x) sp.position.set(\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-call\n\t\t\tcis.x.startsWith('=') ?rct.x +sp.width *cis.nx :cis.nx,\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-call\n\t\t\tcis.y.startsWith('=') ?rct.y +sp.height *cis.ny :cis.ny\n\t\t);\n\t\telse sp.position.set(rct.x, rct.y,);\n\n\t\tconst tw = new Tween(sp)\n\t\t.to({ alpha: 1, x: rct.x, y: rct.y, width: rct.width, height: rct.height, angle: 0 }, cis.wait ?? 0)\n\t\t.easing(ease)\n\t\t.delay((add.wait ?? 0) +(arg.delay ?? 0))\n\t\t.onComplete(()=> {\n\t\t\tst.tw = undefined;\n\t\t\t//(略)\tif (rct.width === 0 || rct.height === 0) return;\n\t\t\t//if (sp instanceof Sprite) sp.cacheAsBitmap = true;\n\t\t\t// これを有効にすると[snapshot]で文字が出ない\n\t\t})\n\t\t.start();\n\t\tTxtStage.grp.add(tw);\n\n\t\tconst st: T_SpTw = {sp, tw};\n\t\tthis.#aSpTw.push(st);\n\t}\n\t#aSpTw\t\t: T_SpTw[]\t= [];\n\n\tskipChIn(): boolean {\t// true: 文字出現中だったので、停止する\n\t\tlet wasChInIng = this.#fncEndChIn();\n\t\tfor (const st of this.#aSpTw) {\t// Text Skip。stop() と end() は別!\n\t\t\tif (st.tw) {st.tw.stop().end(); wasChInIng = true}\n\t\t}\n\t\tthis.#aSpTw = [];\n\t\treturn wasChInIng;\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\tstatic\t#hChInStyle: {[nm: string]: T_ChInOutStyle}\t= Object.create(null);\n\tstatic\treadonly\t#REG_NG_CHSTYLE_NAME_CHR\t= /[{\\s.,*{]/;\n\t\t// https://regex101.com/r/APC91I/1\n\tstatic\tinitChStyle() {\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\tTxtStage.#hChInStyle = Object.create(null);\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\tTxtStage.#hChOutStyle = Object.create(null);\n\t}\n\tstatic\tgetChInStyle(name: string) {return TxtStage.#hChInStyle[name]}\n\tstatic\tch_in_style(hArg: TArg): T_ChInOutStyle {\n\t\tconst {name} = hArg;\n\t\tif (! name) throw 'nameは必須です';\n\t\tif (TxtStage.#REG_NG_CHSTYLE_NAME_CHR.test(name)) throw `name【${name}】に使えない文字が含まれます`;\n\t\tif (name in TxtStage.#hChInStyle) throw `name【${name}】はすでにあります`;\n\n\t\tconst x = String(hArg.x ?? '=0');\n\t\tconst y = String(hArg.y ?? '=0');\n\t\tconst ret = TxtStage.#hChInStyle[name] = {\n\t\t\twait\t: argChk_Num(hArg, 'wait', 500),\t// アニメ・FI時間\n\t\t\talpha\t: argChk_Num(hArg, 'alpha', 0),\n\t\t\tx,\t// 初期x値\n\t\t\ty,\t// [tsy]と同様に絶対・相対指定可能\n\t\t\t// {x:500}\t\t\tX位置を500に\n\t\t\t// {x:'=500'}\t\t現在のX位置に+500加算した位置\n\t\t\t// {x:'=-500'}\t\t現在のX位置に-500加算した位置\n\t\t\t// {x:'250,500'}\t+250から+500までの間でランダムな値をX位置に\n\t\t\t// {x:'=250,500'}\t+250から+500までの間でランダムな値を現在のX位置に加算\n\t\t\tnx\t\t: parseFloat(x.at(0) === '=' ? x.slice(1) : x),\n\t\t\tny\t\t: parseFloat(y.at(0) === '=' ? y.slice(1) : y),\n\t\t\tscale_x\t: argChk_Num(hArg, 'scale_x', 1),\n\t\t\tscale_y\t: argChk_Num(hArg, 'scale_y', 1),\n\t\t\trotate\t: argChk_Num(hArg, 'rotate', 0),\n\t\t\tjoin\t: argChk_Boolean(hArg, 'join', true),\n\t\t\t\t\t\t// 文字を順番に出すか(true)同時か(false)\n\t\t\tease\t: hArg.ease ?? 'ease-out',\n\t\t};\n\t\treturn ret;\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\tstatic\t#hChOutStyle: {[nm: string]: T_ChInOutStyle}= Object.create(null);\n\tstatic\tgetChOutStyle(name: string) {return TxtStage.#hChOutStyle[name]}\n\tstatic\tch_out_style(hArg: TArg): T_ChInOutStyle {\n\t\tconst {name} = hArg;\n\t\tif (! name) throw 'nameは必須です';\n\t\tif (TxtStage.#REG_NG_CHSTYLE_NAME_CHR.test(name)) throw `name【${name}】に使えない文字が含まれます`;\n\t\tif (name in TxtStage.#hChOutStyle) throw `name【${name}】はすでにあります`;\n\n\t\tconst x = String(hArg.x ?? '=0');\n\t\tconst y = String(hArg.y ?? '=0');\n\t\tconst ret = TxtStage.#hChOutStyle[name] = {\n\t\t\twait\t: argChk_Num(hArg, 'wait', 500),\t// アニメ・FI時間\n\t\t\talpha\t: argChk_Num(hArg, 'alpha', 0),\n\t\t\tx,\t// 初期x値\n\t\t\ty,\t// [tsy]と同様に絶対・相対指定可能\n\t\t\t// {x:500}\t\t\tX位置を500に\n\t\t\t// {x:'=500'}\t\t現在のX位置に+500加算した位置\n\t\t\t// {x:'=-500'}\t\t現在のX位置に-500加算した位置\n\t\t\t// {x:'250,500'}\t+250から+500までの間でランダムな値をX位置に\n\t\t\t// {x:'=250,500'}\t+250から+500までの間でランダムな値を現在のX位置に加算\n\t\t\tnx\t\t: parseFloat(x.at(0) === '=' ? x.slice(1) : x),\n\t\t\tny\t\t: parseFloat(y.at(0) === '=' ? y.slice(1) : y),\n\t\t\tscale_x\t: argChk_Num(hArg, 'scale_x', 1),\n\t\t\tscale_y\t: argChk_Num(hArg, 'scale_y', 1),\n\t\t\trotate\t: argChk_Num(hArg, 'rotate', 0),\n\t\t\tjoin\t: argChk_Boolean(hArg, 'join', false),\n\t\t\t\t\t\t// 文字を順番に出すか(true)同時か(false)\n\t\t\tease\t: hArg.ease ?? 'ease-out',\n\t\t};\n\t\treturn ret;\n\t}\n\n\tstatic\treadonly\t#cntBreak\t= new Container;\n\tstatic\t\t\t\t#spsBreak\t= new SpritesMng;\n\tdispBreak(o: T_cmdTxt_JSON) {\n\t\tTxtStage.delBreak();\n\n\t\tconst cnt = TxtStage.#cntBreak;\n\t\tcnt.visible = false;\n\t\tthis.addChild(cnt);\t// 次のcsv2Spritesが即終わる場合もあるので先に行なう\n\t\tTxtStage.#spsBreak.destroy();\n\t\tTxtStage.#spsBreak = new SpritesMng(o.pic, cnt, sp=> {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\t\tif (cnt.parent) {\n\t\t\t\tsp.x = argChk_Num(o, 'x', 0);\n\t\t\t\tsp.y = argChk_Num(o, 'y', 0);\n\t\t\t\tsp.width = argChk_Num(o, 'width', this.#infTL.fontsize);\n\t\t\t\tsp.height = argChk_Num(o, 'height', this.#infTL.fontsize);\n\t\t\t}\n\t\t\telse cnt.removeChild(sp);\n\t\t});\n\t}\n\tstatic\tdelBreak() {\n\t\tconst cnt = TxtStage.#cntBreak;\n\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\tcnt.parent?.removeChild(cnt);\t// 複数メッセージウインドウを想定\n\t\tTxtStage.#spsBreak.destroy();\n\t}\n\n\t#fi_easing\t= 'Quadratic.Out';\n\t#fo_easing\t= 'Quadratic.Out';\n\t#ac = new AbortController;\n\t#clearText() {\n\t\tthis.#grpDbgMasume.clear();\n\t\tthis.#aRect = [];\n\t\tthis.#lenHtmTxt = 0;\n\t\tthis.#aGoTxt = [];\n\t\tthis.#ac.abort();\n\t\tthis.#ac = new AbortController;\n\n\t\t//utils.clearTextureCache();\t// 改ページと思われるこのタイミングで\n\t\tthis.skipChIn();\n\t\tconst n = document.createElement('span');\n\t\tn.style.cssText = this.#htmTxt.style.cssText;\n\t\tn.classList.value = this.#htmTxt.classList.value;\n\t\t\t// 以下よりノード数の最大が下がる\n\t\t\t// const n = <HTMLSpanElement>this.#htmTxt.cloneNode(true);\n\t\t\t// n.textContent = '';\n\t\t\t// // this.htmTxt.innerHTML = '';\t// 上記のほうが早いらしい\n\t\tconst old = this.#htmTxt;\n\t\tconst a = Array.from(<HTMLCollectionOf<HTMLElement>>old.getElementsByClassName('sn_ch'));\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\told.parentElement!.insertBefore(n, old);\n\n\t\tlet sum_wait = 0;\n\t\ta.forEach(elm=> {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\tconst add = JSON.parse(\n\t\t\t\telm.dataset.add ??\t\t\t\t// 通常文字\n\t\t\t\telm.children[0]?.getAttribute('data-add') ??\t// ルビ\n\t\t\t\telm.children[0]?.children[0]\n\t\t\t\t\t?.getAttribute('data-add') ?? '{}'\t\t// 縦中横\n\t\t\t);\n\t\t\tif (! add.ch_out_style) return;\n\n\t\t\tconst cos = TxtStage.#hChOutStyle[add.ch_out_style];\n\t\t\tif (! cos) return;\n\t\t\tif (cos.wait === 0) {elm.style.display = 'none'; return}\n\n\t\t\tsum_wait += cos.wait;\n\t\t\tif (! cos.join) elm.style.animationDelay = '0ms';\n\t\t\telm.classList.add(`go_ch_out_${String(add.ch_out_style)}`);\n\t\t});\n\n\t\tconst end = ()=> {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\told.parentElement!.removeChild(old);\n\t\t\tfor (const c of this.#cntTxt.removeChildren()) {\n\t\t\t\tif (c instanceof Container) TxtStage.#evtMng.unButton(c);\n\t\t\t\tc.destroy();\n\t\t\t}\n\t\t};\n\t\tif (sum_wait === 0) {\n\t\t\tthis.#htmTxt.textContent = '';\n\t\t\tthis.#htmTxt = document.createElement('span');\n\t\t\tend();\n\t\t}\n\t\telse {\n\t\t\tconst h = old.lastElementChild;\n\t\t\tif (h) {\n\t\t\t\tconst fnc = ()=> {\n\t\t\t\t\th.removeEventListener('animationend', fnc);\n\t\t\t\t\t\t// {once: true} より、明示的な removeEventListener のほうがサクサク解放するようである。屋上屋を架す事になりにくく、未解放リソースグラフでも低く抑えられる。\n\t\t\t\t\tend();\n\t\t\t\t};\n\t\t\t\th.addEventListener('animationend', fnc, {once: true, signal: this.#ac.signal});\n\t\t\t}\n\t\t\telse end();\n\t\t}\n\n\t\tthis.#htmTxt = n;\n\t}\n\treNew(): TxtStage {\n\t\tthis.#clearText();\n\n\t\tconst to = new TxtStage(this.ctn, this.canFocus, this.sys);\n\t\t\t// ()=> this.canFocus() だとリソースリークになる\n\t\tto.#infTL = this.#infTL;\n\t\tto.#htmTxt.style.cssText = this.#htmTxt.style.cssText;\n\t\tto.#left = this.#left;\n\t\tto.name = this.name;\n\t\tto.#lay_sub();\n//\t\tto.#idc.sethArg(this.#idc.gethArg());\n\n\t\tto.#ch_filter = this.#ch_filter;\n\t\tto.#fi_easing = this.#fi_easing;\n\t\tto.#fo_easing = this.#fo_easing;\n\n\t\tthis.#hyph.reNew(to.#hyph);\n\n\t\tthis.destroy();\n\n\t\treturn to;\n\t}\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t#ch_filter\t: any[] | undefined = undefined;\t// 文字にかけるフィルター\n\n\n\trecord() {return {\n\t\tinfTL\t\t: this.#infTL,\n\n\t\tcssText\t\t: this.#htmTxt.style.cssText,\n\t\tleft\t\t: this.#left,\n//\t\tidc_hArg\t: this.#idc.gethArg(),\n\n\t\tch_filter\t: this.#ch_filter,\n\t\tfi_easing\t: this.#fi_easing,\n\t\tfo_easing\t: this.#fo_easing,\n\n\t\thyph\t\t: this.#hyph.record(),\n\t}}\n\tplayback(hLay: T_RP_layTxtStage) {\n\t\tthis.#infTL = hLay.infTL;\n\t\tthis.position.set(this.#infTL.pad_left, this.#infTL.pad_top);\n\n\t\tthis.#htmTxt.style.cssText = hLay.cssText;\n\t\tthis.#left = hLay.left;\n\t\tthis.#lay_sub();\n//\t\tthis.#idc.sethArg(hLay.idc_hArg);\n\n\t\tthis.#ch_filter\t= hLay.ch_filter;\n\t\tthis.#fi_easing\t= hLay.fi_easing;\n\t\tthis.#fo_easing\t= hLay.fo_easing;\n\n\t\tthis.#hyph.playback(hLay.hyph);\n\t}\n\n\tget cssText() {return this.#htmTxt.style.cssText}\n\tset cssText(ct: string) {this.#htmTxt.style.cssText = ct}\n\n\t#sss :Sprite | undefined = undefined;\n\tsnapshot(rnd: Renderer, re: ()=> void) {\n\t\thtm2tx(tx=> {\n\t\t\tthis.#sss = Sprite.from(tx);\t// Safariだけ文字影が映らない\n\t\t\tif (this.#isTategaki) {\n\t\t\t\tthis.#sss.x += CmnLib.stageW -(this.#left +this.#infTL.$width)\n\t\t\t\t//- ((CmnLib.isSafari && !CmnLib.isMobile)\t// 無効化 2022/02/09\n\t\t\t\t//\t? 0\n\t\t\t\t//\t: this.#infTL.pad_left +this.#infTL.pad_right);\n\t\t\t}\n\t\t\tthis.#sss.y -= this.#padTx4y;\n\t\t\tthis.#sss.texture.frame = new Rectangle(\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\tMath.min(this.#sss.width, this.#infTL.$width -this.#left),\n\t\t\t\tMath.min(this.#sss.height, this.#infTL.$height),\n\t\t\t);\t// これがないと画面サイズを超える\n\t\t\tthis.#cntTxt.addChild(this.#sss);\n\t\t\trnd.render(this.#sss, {clear: false});\n\t\t\tre();\n\t\t}, this.#htmTxt, this.#infTL, this.#padTx4x, this.#padTx4y, false);\n\t}\n\tsnapshot_end() {\n\t\tif (! this.#sss) return;\n\t\tthis.#cntTxt.removeChild(this.#sss);\n\t\tthis.#sss = undefined;\n\t}\n\n\tmakeDesignCast(_gdc: IMakeDesignCast) {\n//\tmakeDesignCast(gdc: IMakeDesignCast) {\n//\t\tgdc(this.#idc);\n\n//\t\tconst o = this.#idc.gethArg();\n//\t\tthis.#idcCh.sethArg({...o, ':id_dc': o[':id_tag'] +'_pad'});\n//\t\tgdc(this.#idcCh);\n\t}\n\tshowDesignCast() { /* empty */ }\n//\tshowDesignCast() {this.#idc.visible = true; this.#idcCh.visible = true}\n\n\tdump(): string {\n\t\tconst aStyle: string[] = [];\n\t\tconst s = this.#htmTxt.style;\n\t\tconst len = s.length;\n\t\tfor (let i=0; i<len; ++i) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\tconst key: any = s[i];\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\taStyle.push(`\"${String(key)}\":\"${s[key]!.replaceAll(/([\"\\\\])/g, '\\\\$1')}\"`);\n\t\t}\n\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion, @typescript-eslint/no-non-null-assertion\n\t\treturn `\"txt\":\"${this.#htmTxt.textContent!.replaceAll(/([\"\\\\])/g, '\\\\$1')\n\t\t}\", \"style\":{${aStyle.join(',')}}`;\n\t\t\t// 4Debug。++カウンターし、dump表示させても良さげ\n\t}\n\n\toverride destroy() {\n\t\tTxtStage.delBreak();\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tthis.#htmTxt.parentElement!.removeChild(this.#htmTxt);\n\t\t// this.#htmTxt.textContent = '';\t// 有効性が逆効果気味\n\t\tthis.#htmTxt = document.createElement('span');\t// リソース解放に有効\n\t\tthis.removeChild(this.#cntTxt);\n\t\tthis.removeChild(this.#grpDbgMasume);\n\n\t\tthis.#grpDbgMasume.clear();\n\t\tthis.#fncMasume = ()=> { /* empty */ };\t// リソース解放にやや有効?\n\t\tthis.#aGoTxt = [];\n\t\tthis.#aRect\t= [];\n\t\tthis.#lenHtmTxt = 0;\n\t\tthis.#aSpTw = [];\t// リソース解放に有効\n\t\tthis.#ac.abort();\t// 有効性が低い、が保険で\n\t\tthis.#ch_filter = undefined;\n\n\t\tsuper.destroy();\n\t}\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* ***** BEGIN LICENSE BLOCK *****\n\tCopyright (c) 2018-2025 Famibee (famibee.blog38.fc2.com)\n\n\tThis software is released under the MIT License.\n\thttp://opensource.org/licenses/mit-license.php\n** ***** END LICENSE BLOCK ***** */\n\nimport type {SysBase} from './SysBase';\nimport {Layer, type T_RecordPlayBack_lay} from './Layer';\nimport {uint, CmnLib, type IEvtMng, argChk_Boolean, argChk_Num, initStyle, addStyle, argChk_Color} from './CmnLib';\nimport type {T_HTag, TArg} from './Grammar';\nimport type {T_Variable, T_PutCh} from './CmnInterface';\nimport {type T_RP_layTxtStage, TxtStage} from './TxtStage';\nimport type {Config} from './Config';\nimport {RubySpliter} from './RubySpliter';\nimport {SpritesMng} from './SpritesMng';\nimport {Button} from './Button';\nimport type {IMakeDesignCast} from './LayerMng';\nimport {DebugMng} from './DebugMng';\nimport {SEARCH_PATH_ARG_EXT} from './ConfigBase';\nimport {Reading} from './Reading';\nimport type {ScriptIterator} from './ScriptIterator';\nimport type {T_LOG} from './Log';\n\nimport {Sprite, DisplayObject, Graphics, Container, Renderer, Application} from 'pixi.js';\n\n\nexport type T_RP_layTxt = T_RecordPlayBack_lay & {\n\tenabled\t\t: boolean;\n\tr_cssText\t: string;\n\tr_align\t\t: string;\n\ttxs\t\t\t: T_RP_layTxtStage;\n\tb_alpha\t\t: number;\n\tb_alpha_isfixed\t: boolean;\n\tb_do\t\t: string;\n\tb_pic\t\t: string;\n\tb_color\t\t: string;\n\tbtns\t\t: string[];\n}\n\nexport type T_cmdTxt_JSON = {\n\tid?\t\t\t: string;\n\n\t':link'?\t: string;\n\ttext?\t\t: string;\t// 4 ch\n\twait?\t\t: string;\t// 4 ch\n\t\t// JSON.stringify は数字でも文字にする(HArg と相違)\n\trecord?\t\t: boolean;\t// 4 ch\n\n\tpic?\t\t: string;\t// 4 graph\n\n\tfn?\t\t\t: string;\t// 4 link\n\tlabel?\t\t: string;\t// 4 link\n\turl?\t\t: string;\t// 4 link\n\n\tstyle?\t\t: string;\t// 4 tcy, link\n\tr_style?\t: string;\n\tstyle_hover\t\t: string;\t// 4 link\n\tstyle_clicked\t: string;\t// 4 link\n\tr_align?\t: string;\t// 4 pushSpan(), mergePushSpan()\n\n\tt?\t: string;\t// 4 tcy\n\tr?\t: string;\t// 4 tcy\n\n\tin_style?\t: string;\t// 4 set_ch_in\n\tout_style?\t: string;\t// 4 set_ch_out\n\n\n\tdelay?\t: number;\t// JSON 受け渡し後なので number でもいい\n}\n\n\nexport class TxtLayer extends Layer {\n\tstatic\t#cfg\t\t: Config;\n\tstatic\t#val\t\t: T_Variable;\n\tstatic\t#isPageFore\t: (me: TxtLayer)=> boolean;\n\tstatic\t#log\t\t: T_LOG;\n\tstatic\tinit(cfg: Config, hTag: T_HTag, val: T_Variable, log: T_LOG, isPageFore: (me: TxtLayer)=> boolean, appPixi: Application): void {\n\t\tthis.#cfg = cfg;\n\t\tTxtStage.init(cfg, appPixi);\n\t\tthis.#val = val;\n\t\tthis.#log = log;\n\t\tthis.#isPageFore = isPageFore;\n\n\t\tval.setDoRecProc(doRec=> this.chgDoRec(doRec));\n\n\t\thTag.autowc\t\t\t= o=> this.#autowc(o);\t// 文字を追加する\n\t\thTag.autowc({enabled: false, text: '', time: 0});\n\t\thTag.ch_in_style\t= o=> this.#ch_in_style(o);\t// 文字出現演出\n\t\thTag.ch_out_style\t= o=> this.#ch_out_style(o);\t// 文字消去演出\n\n\t\t// ギャラリーリロード用初期化\n\t\tTxtStage.initChStyle();\n\t\tinitStyle();\n\n\t\taddStyle(\n\t\t\tcfg.matchPath('.+', SEARCH_PATH_ARG_EXT.FONT)\n\t\t\t.flatMap(o=> Object.values(o).map(v=> `\n@font-face {\n\tfont-family: '${String(v)}';\n\tsrc: url('${this.#cfg.searchPath(String(v), SEARCH_PATH_ARG_EXT.FONT)}');\n}\n`)).join('')\n\n\t\t\t// 文字出現演出関係\n\t\t\t+`\n.sn_tx {\n\tpointer-events: none;\n\tuser-select: none;\n\t-webkit-touch-callout: none;\n\tbox-sizing: border-box;\n}\n.sn_ch {\n\tposition: relative;\n\tdisplay: inline-block;\n}\n`\t// 「sn_ch」と「sn_ch_in_〜」の中身が重複しているが、これは必須\n\t\t);\n\n\t\tthis.#ch_in_style({\n\t\t\tname\t: 'default',\n\t\t\twait\t: 500,\n\t\t\talpha\t: 0,\n\t\t\tx\t\t: '=0.3',\n\t\t\ty\t\t: '=0',\n\t\t\tscale_x\t: 1,\n\t\t\tscale_y\t: 1,\n\t\t\trotate\t: 0,\n\t\t\tjoin\t: true,\n\t\t\tease\t: 'ease-out',\n\t\t});\n\t\tthis.#ch_out_style({\n\t\t\tname\t: 'default',\n\t\t\twait\t: 0,\n\t\t\talpha\t: 0,\n\t\t\tx\t\t: '=0',\n\t\t\ty\t\t: '=0',\n\t\t\tscale_x\t: 1,\n\t\t\tscale_y\t: 1,\n\t\t\trotate\t: 0,\n\t\t\tjoin\t: false,\n\t\t\tease\t: 'ease-out',\n\t\t});\n\t}\n\n\t// 文字出現演出\n\tstatic\t#ch_in_style(hArg: TArg) {\n\t\tconst {x, y, nx, ny, alpha, wait, ease, rotate, scale_x, scale_y} = TxtStage.ch_in_style(hArg);\n\t\tconst x2 = x.startsWith('=') ?`${String(nx *100)}%` :`${String(nx)}px`;\n\t\tconst y2 = y.startsWith('=') ?`${String(ny *100)}%` :`${String(ny)}px`;\n\t\tconst {name=''} = hArg;\n\t\taddStyle(`\n.sn_ch_in_${name} {\n\tposition: relative;\n\tdisplay: inline-block;\n}\n.go_ch_in_${name} {\n\topacity: ${String(alpha)};\n\tposition: relative;\n\tdisplay: inline-block;\n\tanimation: sn_ch_in_${name} ${String(wait)}ms ${ease} 0s both;\n}\n@keyframes sn_ch_in_${name} {\n\tfrom {transform: rotate(${String(rotate)}deg) scale(${String(scale_x)}, ${String(scale_y)}) translate(${x2}, ${y2})}\n\tto {opacity: 1; transform: none;}\n}\n`);\n\n\t\treturn false;\n\t}\n\t// 文字消去演出\n\tstatic\t#ch_out_style(hArg: TArg) {\n\t\tconst {x, y, nx, ny, alpha, wait, ease, rotate, scale_x, scale_y} = TxtStage.ch_out_style(hArg);\n\t\tconst x2 = x.startsWith('=') ?`${String(nx *100)}%` :`${String(nx)}px`;\n\t\tconst y2 = y.startsWith('=') ?`${String(ny *100)}%` :`${String(ny)}px`;\n\t\tconst {name=''} = hArg;\n\t\taddStyle(`\n.go_ch_out_${name} {\n\tposition: relative;\n\tdisplay: inline-block;\n\tanimation: go_ch_out_${name} ${String(wait)}ms ${ease} 0s both;\n}\n@keyframes go_ch_out_${name} {\n\tto {\n\t\topacity: ${String(alpha)};\n\t\ttransform: rotate(${String(rotate)}deg) scale(${String(scale_x)}, ${String(scale_y)}) translate(${x2}, ${y2});\n\t}\n`);\n\n\t\treturn false;\n\t}\n\n\tstatic\t\t#msecChWait\t\t= 10;\n\tstatic set\tmsecChWait(mscw: number) {TxtLayer.#msecChWait = mscw}\n\tstatic get\tmsecChWait() {return TxtLayer.#msecChWait}\n\n\n\tstatic\t#evtMng\t: IEvtMng;\n\tstatic\t#sys\t: SysBase;\n\tstatic setEvtMng(evtMng: IEvtMng, sys: SysBase, scrItr: ScriptIterator) {\n\t\tthis.#evtMng = evtMng;\n\t\tthis.#sys = sys;\n\t\tTxtStage.setEvtMng(evtMng, scrItr);\n\t}\n\n\t// 文字ごとのウェイト\n\tstatic #doAutoWc\t= false;\n\tstatic #hAutoWc\t: {[ch: string]: number}\t= {};\n\tstatic #autowc(hArg: TArg) {\n\t\tthis.#doAutoWc = argChk_Boolean(hArg, 'enabled', this.#doAutoWc);\n\t\tthis.#val.setVal_Nochk('save', 'const.sn.autowc.enabled', this.#doAutoWc);\n\n\t\tconst {text} = hArg;\n\t\tif ('text' in hArg !== 'time' in hArg) throw '[autowc] textとtimeは同時指定必須です';\n\t\tthis.#val.setVal_Nochk('save', 'const.sn.autowc.text', text);\n\t\tif (! text) {\n\t\t\tthis.#val.setVal_Nochk('save', 'const.sn.autowc.time', '');\n\t\t\treturn false;\n\t\t}\n\n\t\tconst len = text.length;\n\t\tif (this.#doAutoWc && len === 0) throw '[autowc] enabled === false かつ text === \"\" は許されません';\n\n\t\tconst a = String(hArg.time).split(',');\n\t\tif (a.length !== len) throw '[autowc] text文字数とtimeに記述された待ち時間(コンマ区切り)は同数にして下さい';\n\t\tthis.#hAutoWc = {};\t// 毎回クリアを仕様とする\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tfor (let i=0; i<len; ++i) this.#hAutoWc[text[i]!] = uint(a[i]);\n\t\tthis.#val.setVal_Nochk('save', 'const.sn.autowc.time', hArg.time);\n\n\t\treturn false;\n\t}\n\n\n\t// バック\n\t#b_color\t\t\t= 0x000000;\n\t#b_alpha\t\t\t= 0;\n\t#b_alpha_isfixed\t= false;\n\t#b_do\t\t\t: DisplayObject | undefined\t= undefined;\n\t#b_pic\t\t\t= '';\t// 背景画像無し(=単色塗り)\n\n\t// 文字表示\n\t#txs\t= new TxtStage(this.ctn, ()=> this.canFocus(), TxtLayer.#sys);\n\n\treadonly\t#rbSpl\t= new RubySpliter;\n\treadonly\t#htmRb\t= document.createElement('span');// cssチェック・保存用\n\tstatic\treadonly\t#hWarnR_Style = {\n\t\t'text-align'\t\t: 0,\n\t\t'text-align-last'\t: 0,\n\t\t'height'\t: 0,\n\t\t'width'\t\t: 0,\n\t\t'padding-left'\t\t: 0,\n\t\t'padding-right'\t\t: 0,\n\t\t'padding-top'\t\t: 0,\n\t\t'padding-bottom'\t: 0,\n\t};\n\n\treadonly\t#cntBtn\t= new Container<Button>;\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.ctn.addChild(this.#txs);\n\n\t\tthis.#rbSpl.init(this.#putCh);\n\n\t\tthis.ctn.addChild(this.#cntBtn);\t// ボタンはpaddingの影響を受けない\n\t\tthis.#cntBtn.name = 'cntBtn';\n\n\t\tconst padding = 16;\t// 初期padding\n\t\tthis.lay({style: `width: ${String(CmnLib.stageW)}px; height: ${String(CmnLib.stageH)}px; font-family: 'Hiragino Sans', 'Hiragino Kaku Gothic ProN', '游ゴシック Medium', meiryo, sans-serif; color: white; font-size: 24px; line-height: 1.5; padding: ${String(padding)}px;`, in_style: 'default', out_style: 'default', back_clear: 'true'});\n\t}\n\toverride destroy() {\n\t\tif (this.#b_do) {this.ctn.removeChild(this.#b_do).destroy(); this.#b_do = undefined}\n\n\t\tTxtLayer.#log.pagebreak();\n\t\tthis.#txs.destroy();\n\t}\n\tstatic\tdestroy() {\n\t\tthis.#doAutoWc = false;\n\t\tthis.#hAutoWc = {};\n\n\t\tthis.#rec = tx=> tx;\n\t}\n\toverride set name(nm: string) {this.name_ = nm; this.#txs.name = nm}\n\toverride get name() {return this.name_}\t// getは継承しないらしい\n\n\n\toverride cvsResize() {this.#txs.cvsResize()}\n\toverride cvsResizeChildren() {\n\t\tfor (const b of this.#cntBtn.children) b.cvsResize();\n\t}\n\n\tprotected\toverride\tprocSetX(x: number) {this.#txs.lay({x})}\n\tprotected\toverride\tprocSetY(y: number) {this.#txs.lay({y})}\n\n\toverride lay(hArg: TArg) {\n\t\tsuper.lay(hArg);\n\t\tLayer.setXY(this.ctn, hArg, this.ctn);\n\n\t\thArg[':id_tag'] = this.name_.slice(0, -7);\t// Design用\n\t\tRubySpliter.setting(hArg);\n\t\tthis.#setFfs(hArg);\n\t\tthis.#txs.lay(hArg);\n\n\t\tif ('r_align' in hArg) this.#r_align = hArg.r_align ?? '';\n\t\tthis.#ruby_pd = CmnLib.isSafari\n\t\t? this.#txs.tategaki\t\t// Safariでは親文字幅 l は疑似値\n\t\t\t? (v, l)=> `text-align: start; height: ${String(l)}em; padding-top: ${v}; padding-bottom: ${v};`\n\t\t\t: (v, l)=> `text-align: start; width: ${String(l)}em; padding-left: ${v}; padding-right: ${v};`\n\t\t: this.#txs.tategaki\n\t\t\t? v=> `text-align: justify; text-align-last: justify; padding-top: ${v}; padding-bottom: ${v};`\n\t\t\t: v=> `text-align: justify; text-align-last: justify; padding-left: ${v}; padding-right: ${v};`;\n\t\t// eslint-disable-next-line @typescript-eslint/unbound-method\n\t\tif (CmnLib.isFirefox) this.#mkStyle_r_align = this.#mkStyle_r_align4ff;\n\n\t\tif ('r_style' in hArg) {\n\t\t\tif (hArg.r_style) {\n\t\t\t\tconst cln = document.createElement('span');\n\t\t\t\tcln.style.cssText = hArg.r_style;\n\t\t\t\tconst len = cln.style.length;\n\t\t\t\tconst s = this.#htmRb.style;\n\t\t\t\tfor (let i=0; i<len; ++i) {\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment\n\t\t\t\t\tconst key = <any>cln.style[i];\n\t\t\t\t\tif (key in TxtLayer.#hWarnR_Style) {\n\t\t\t\t\t\tDebugMng.myTrace(`${String(key)}は指定できません`, 'W');\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst v = cln.style[key];\n\t\t\t\t\tif (v) s[key] = v;\n\t\t\t\t}\n\t//\t\t\tif ((! cln.style.opacity) && ('alpha' in hArg)) s.opacity = String(this.spLay.alpha);\n\t\t\t}\n\t\t\telse this.#htmRb.style.cssText = '';\n\t\t}\n\n\t\tif ('alpha' in hArg) for (const b of this.#cntBtn.children) b.alpha = this.ctn.alpha;\n\n\t\tthis.#set_ch_in(hArg);\n\t\tthis.#set_ch_out(hArg);\n\n\t\tconst RPN_TXT_LAY = Reading.procID +`TxtLayer lay name:${this.name_}`;\n\t\tconst ret = this.#drawBack(hArg, isStop=> {\n\t\t\tif (isStop) Reading.endProc(RPN_TXT_LAY);\n\t\t});\n\t\tif (ret) Reading.beginProc(RPN_TXT_LAY);\n\t\treturn ret;\n\t}\n\t#set_ch_in(hArg: T_cmdTxt_JSON | TArg) {\n\t\tconst {in_style} = hArg;\n\t\tif (! in_style) return;\n\t\tconst cis = TxtStage.getChInStyle(in_style);\n\t\tif (! cis) throw `存在しないin_style【${in_style}】です`;\n\t\tthis.#$ch_in_style = in_style;\n\t\tthis.#ch_in_join = cis.join;\n\t}\n\t#$ch_in_style\t= '';\n\t#ch_in_join\t\t= true;\n\n\toverride get\twidth() {return this.#txs.getWidth}\n\toverride get\theight() {return this.#txs.getHeight}\n\n\t#set_ch_out(hArg: T_cmdTxt_JSON | TArg) {\n\t\tconst {out_style} = hArg;\n\t\tif (! out_style) return;\n\t\tconst cos = TxtStage.getChOutStyle(out_style);\n\t\tif (! cos) throw `存在しないout_style【${out_style}】です`;\n\t\tthis.#$ch_out_style = out_style;\n\t}\n\t#$ch_out_style\t= '';\n\n\t#sps\t= new SpritesMng;\n\t#drawBack(hArg: TArg, fncComp: (isStop: boolean)=> void): boolean {\n\t\tif ('back_clear' in hArg) {\n\t\t\tif (argChk_Boolean(hArg, 'back_clear', false)) {\n\t\t\t\tthis.#b_color = 0x000000;\n\t\t\t\tthis.#b_alpha = 0;\n\t\t\t\tthis.#b_alpha_isfixed = false;\n\t\t\t\tthis.#b_pic = '';\n\t\t\t}\n\t\t\tfncComp(false);\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.#b_alpha = argChk_Num(hArg, 'b_alpha', this.#b_alpha);\n\t\tthis.#b_alpha_isfixed = argChk_Boolean(hArg, 'b_alpha_isfixed', this.#b_alpha_isfixed);\n\t\tconst alpha = (this.#b_alpha_isfixed\n\t\t\t? 1\n\t\t\t: Number(TxtLayer.#val.getVal('sys:TextLayer.Back.Alpha'))\n\t\t) *this.#b_alpha;\n\t\tif (hArg.b_pic) {\n\t\t\tif (this.#b_pic !== hArg.b_pic) {\n\t\t\t\tthis.#b_pic = hArg.b_pic;\n\t\t\t\tif (this.#b_do) {\n\t\t\t\t\tthis.ctn.removeChild(this.#b_do);\t// Graphics かも\n\t\t\t\t\tthis.#b_do.destroy();\t// Graphics かも\n\t\t\t\t}\n\t\t\t\t//this.#sps.destroy();\t// Graphics かもなので使用不可\n\t\t\t\tthis.#sps = new SpritesMng(this.#b_pic, this.ctn, sp=> {\n\t\t\t\t\tthis.#b_do = sp;\n\t\t\t\t\tsp.name = 'back(pic)';\n\t\t\t\t\tsp.visible = alpha > 0;\n\t\t\t\t\tsp.alpha = alpha;\n\t\t\t\t\t//CmnLib.adjustRetinaSize(this.b_pic, sp);\n\t\t\t\t\tthis.#txs.setMySize(sp.width, sp.height);\n\t\t\t\t\t\t// ちなみに左上表示位置は本レイヤと同じ\n\t\t\t\t\tthis.ctn.setChildIndex(sp, 0);\n\t\t\t\t\tfncComp(true);\n\t\t\t\t});\n\t\t\t\treturn this.#sps.ret;\n\t\t\t}\n\t\t}\n\t\telse if ('b_color' in hArg) {\n\t\t\tthis.#b_color = argChk_Color(hArg, 'b_color', 0x000000);\n\t\t\tif (this.#b_do) {\n\t\t\t\tthis.ctn.removeChild(this.#b_do);\t// Graphics かも\n\t\t\t\tthis.#b_do.destroy();\t// Graphics かも\n\t\t\t\t//this.#sps.destroy();\t// Graphics かもなので使用不可\n\t\t\t}\n\t\t\tthis.#b_pic = '';\t// 忘れずクリア\n\t\t\tthis.ctn.addChildAt(\n\t\t\t\t(this.#b_do = new Graphics)\n\t\t\t\t.beginFill(this.#b_color, alpha)\n\t\t\t\t.lineStyle(undefined)\n\t\t\t\t.drawRect(0, 0, this.#txs.getWidth, this.#txs.getHeight)\n\t\t\t\t.endFill(), 0);\n\t\t\tthis.#b_do.name = 'back(color)';\n\t\t\t//cacheAsBitmap = true;\t// これを有効にするとスナップショットが撮れない??\n\t\t}\n\n\t\tif (this.#b_do) {\n\t\t\tthis.#b_do.visible = alpha > 0;\n\t\t\t\t// 透明の時は表示しない。こうしないと透明テキストレイヤ下のボタンが\n\t\t\t\t// 押せなくなる(透明だが塗りがあるという扱いなので)\n\t\t\tthis.#b_do.alpha = alpha;\n\t\t}\n\t\tfncComp(false);\n\n\t\treturn false;\n\t}\n\tchgBackAlpha(g_alpha: number): void {\n\t\tconst alpha = this.#b_alpha_isfixed\n\t\t\t? this.#b_alpha\n\t\t\t: g_alpha * this.#b_alpha;\n\t\tif (this.#b_do instanceof Graphics) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\t\tif (this.#b_do) {\n\t\t\t\tthis.ctn.removeChild(this.#b_do);\n\t\t\t\tthis.#b_do.destroy();\n\t\t\t}\n\t\t\tthis.ctn.addChildAt(\n\t\t\t\t(this.#b_do = new Graphics)\n\t\t\t\t.beginFill(this.#b_color, alpha)\n\t\t\t\t.lineStyle(undefined)\n\t\t\t\t.drawRect(0, 0, this.#txs.getWidth, this.#txs.getHeight)\n\t\t\t\t.endFill(), 0);\n\t\t\tthis.#b_do.name = 'back(color)';\n\t\t\t//cacheAsBitmap = true;\t// これを有効にするとスナップショットが撮れない??\n\t\t}\n\t\tif (this.#b_do) {\n\t\t\tthis.#b_do.visible = alpha > 0;\n\t\t\t\t// 透明の時は表示しない。こうしないと透明テキストレイヤ下のボタンが\n\t\t\t\t// 押せなくなる(透明だが塗りがあるという扱いなので)\n\t\t\tthis.#b_do.alpha = alpha;\n\t\t}\n\t}\n\n\t#setFfs(hArg: TArg) {\n\t\tif ('noffs' in hArg) {\n\t\t\tthis.#strNoFFS = hArg.noffs ?? '';\n\t\t\t// eslint-disable-next-line no-irregular-whitespace\n\t\t\tthis.#regNoFFS = new RegExp(`[ ${this.#strNoFFS}]`);\n\t\t}\n\t\tif (! ('ffs' in hArg)) return;\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\tthis.#ffs ??= '';\n\t\tthis.#fncFFSStyle = this.#ffs === ''\n\t\t\t? ()=> ''\n\t\t\t: ch=> this.#regNoFFS.test(ch)\n\t\t\t\t? ''\n\t\t\t\t: ` font-feature-settings: ${this.#ffs};`;\n\t}\n\t#ffs\t= '';\n\t#fncFFSStyle\t= (_ch: string)=> '';\n\t#strNoFFS\t= '';\n\t// eslint-disable-next-line no-irregular-whitespace\n\t#regNoFFS\t= /[ ]/;\n\t// Safariが全体に「font-feature-settings」した後、特定文字の「font-feature-settings: initial;」を受け付けてくれないのでわざわざ一つずつ指定\n\n\n\tstatic\tchgDoRec(doRec: boolean) {\n\t\tthis.#rec = doRec\n\t\t\t? tx=> tx\n\t\t\t: tx=> `<span class='offrec'>${tx}</span>`;\n\t\t\t\t// 囲んだ領域は履歴で非表示\n\t}\n\tstatic\t#rec = (tx: string)=> tx;\n\n\tisCur\t= false;\n\t#ruby_pd: (v: string, l: number)=> string = ()=> '';\n\t#mkStyle_r_align: (ch: string, rb: string, r_align: string, add_sty?: string)=> string = (ch, rb, r_align, add_sty='')=> {\n\t\tif (! r_align) return ` style='${add_sty}'`;\n\n\t\tconst len = ch.length *2;\n\t\tif (len -rb.length < 0) return ` style='text-align: ${r_align}; ${add_sty}'`;\n\n\t\tlet st = '';\n\t\tswitch (r_align) {\n\t\tcase 'justify':\n\t\t\tst = this.#ruby_pd('0', len);\tbreak;\n\t\tcase '121':\n\t\t\tst = this.#ruby_pd(`calc(${String((len -rb.length) /(rb.length *2))}em)`, len);\tbreak;\n\t\tcase 'even':\n\t\t\tst = this.#ruby_pd(`calc(${String((len -rb.length) /(rb.length +1))}em)`, len);\tbreak;\n\t\tcase '1ruby':\n\t\t\tst = this.#ruby_pd('1em', len);\tbreak;\n\t\tdefault:\n\t\t\tst = `text-align: ${r_align};`;\n\t\t}\n\t\treturn ` style='${st} ${add_sty}'`;\n\t};\n\t#r_align\t= '';\n\t#mkStyle_r_align4ff(ch: string, rb: string, r_align: string, add_sty=''): string {\n\t\tif (! r_align) return ` style='${add_sty}'`;\n\n\t\tconst len = ch.length *2;\n\t\tif (len -rb.length < 0) return ` style='text-align: ${r_align}; ${add_sty}'`;\n\n\t\tlet st = '';\n\t\tswitch (r_align) {\n\t\t\tcase 'left':\tst = 'ruby-align: start;';\tbreak;\n\t\t\tcase 'center':\tst = 'ruby-align: center;';\tbreak;\n\t\t\tcase 'right':\t// エレガントにサポートできていない\n\t\t\t\tst = 'ruby-align: start;';\tbreak;\n\t\t\tcase 'justify':\tst = 'ruby-align: space-between;';\tbreak;\n\t\t\tcase '121':\t\tst = 'ruby-align: space-around;';\tbreak;\n\t\t\tcase 'even':{\n\t\t\t\tconst ev = ` ${String((len -rb.length) /(rb.length +1))}em;`;\n\t\t\t\tst = 'ruby-align: space-between; '+\n\t\t\t\t(this.#txs.tategaki\n\t\t\t\t\t? `padding-top:${ev} padding-bottom:${ev}`\n\t\t\t\t\t: `padding-left:${ev} padding-right:${ev}`);\n\t\t\t}\tbreak;\n\t\t\tcase '1ruby':\tst = 'ruby-align: space-between; '+\n\t\t\t\t(this.#txs.tategaki\n\t\t\t\t\t? 'padding-top: 1em; padding-bottom: 1em;'\n\t\t\t\t\t: 'padding-left: 1em; padding-right: 1em;');\n\t\t\t\tbreak;\n\t\t\tdefault:\t\tst = `text-align: ${r_align};`;\n\t\t}\n\t\treturn ` style='${st} ${add_sty}'`;\n\t}\n\n\ttagCh(text: string): void {this.#rbSpl.putTxt(text)}\n\t#needGoTxt = false;\n\tget needGoTxt() {return this.#needGoTxt}\n\treadonly\t#putCh\t: T_PutCh = (ch, iruby)=> {\n\t\tlet ruby = iruby;\n\t\tif (TxtLayer.#cfg.oCfg.debug.putCh) console.log(`🖊 文字表示 text:\\`${ch}\\`(${ch.charCodeAt(0).toString(16)}) ruby:\\`${ruby}\\` name:\\`${this.name_}\\``);\n\n\t\tconst a_ruby = ruby.split('|');\n\t\tlet add_htm = '';\n\t\tconst [a0, ...a1_] = a_ruby;\n\t\tconst a1 = a1_.join('|');\n\t\tswitch (a_ruby.length) {\n\t\tcase 1:\t\t// 字or春《はる》\n\t\t\tthis.#needGoTxt = true;\n\t\t\tif (ch === '\\n') {\n\t\t\t\tif (this.#firstCh) {// 1文字目にルビが無い場合、不可視ルビで行揃え\n\t\t\t\t\tthis.#firstCh = false;\n\t\t\t\t\tadd_htm = '<ruby> <rt> </rt></ruby><br/>';\n\t\t\t\t}\n\t\t\t\telse add_htm = '<br/>';\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (this.#firstCh) {\t// 1文字目にルビが無い場合、不可視ルビで行揃え\n\t\t\t\tthis.#firstCh = false;\n\t\t\t\tif (ruby === '') ruby = ' ';\n\t\t\t}\n\t\t\tadd_htm = this.#tagCh_sub(ch, ruby, this.#r_align);\n\t\t\tbreak;\n\n\t\tdefault:\t// 《grp|{\"id\":\"break\",\"pic\":\"breakline\"}》\n\t\t\tswitch (a0) {\t// ルビ揃え指定と同時シリーズ\n\t\t\tcase 'start':\t// 初期値\n\t\t\tcase 'left':\t//(肩付き)先頭親文字から、ルビ間は密着\n\t\t\tcase 'center':\t//(中付き)センター合わせ、〃\n\t\t\tcase 'right':\t//(右/下揃え)末尾親文字から、〃\n\t\t\tcase 'justify':\t//(両端揃え)先頭から末尾親文字間に、ルビ間は均等にあける\n\t\t\tcase '121':\t\t//(1-2-1(JIS))ルビの前後を比率1、ルビ間を比率2であける\n\t\t\tcase 'even':\t//(均等アキ)ルビの前後、ルビ間も均等にあける\n\t\t\tcase '1ruby':\t//(1ルビ文字アキ)ルビの前後をルビ一文字空け、ルビ間は均等にあける\n\t\t\t\tthis.#firstCh = false;\n\t\t\t\tthis.#needGoTxt = true;\n\t\t\t\tadd_htm = this.#tagCh_sub(ch, a1, a0);\n\t\t\t\tbreak;\n\n\t\t\tcase 'gotxt':\n\t\t\t\tthis.#popSpan();\n\t\t\t\tif (this.#needGoTxt) {\n\t\t\t\t\tif (this.isCur) TxtLayer.#log.recText(\n\t\t\t\t\t\tthis.#aSpan.join('')\n\t\t\t\t\t\t.replace(/^<ruby> <rt> <\\/rt><\\/ruby>(<br\\/>)+/, '')\n\t\t\t\t\t\t\t// 前方の空行をtrim\n\t\t\t\t\t\t.replaceAll(/style='(anim\\S+ [^;]+;\\s*)+/g, 'style=\\'')\n\t\t\t\t\t\t\t// 2 matches (40 step, 205µs) https://regex101.com/r/u1H6v2/1\n\t\t\t\t\t\t.replaceAll(/( style=''| data-(add|arg|cmd)='[^']+'|\\n+|\\t+)/g, '')\n\t\t\t\t\t\t\t// 2 matches (94 step, 175µs) https://regex101.com/r/5DFUmv/1\n\t\t\t\t\t\t.replaceAll(/class='sn_ch[^']+/g, 'class=\\'sn_ch')\n\t\t\t\t\t\t\t// 不要情報削除\n\t\t\t\t\t\t\t// 2 matches (28 step, 280µs) https://regex101.com/r/XhBbYo/1\n\t\t\t\t\t\t.replaceAll('display: none;', '')\t// 履歴情報可視化\n\t\t\t\t\t\t.replaceAll('class=\\'offrec\\'', 'style=\\'display: none;\\'')\n\t\t\t\t\t);\t\t// 囲んだ領域は履歴で非表示\n\n\t\t\t\t\tthis.#txs.goTxt(this.#aSpan, this.#cumDelay === 0);\n\t\t\t\t\tthis.#needGoTxt = false;\n\t\t\t\t\tthis.#cumDelay = 0;\n\t\t\t\t}\n\t\t\t\telse if (this.isCur) this.#txs.noticeCompTxt();\n\t\t\t\treturn;\t// breakではない\n\n\t\t\tcase 'add':{\t// 文字幅を持たない汎用的な命令(必ずadd_closeすること)\n\t\t\t\tconst o = <T_cmdTxt_JSON>JSON.parse(a1);\n\n\t\t\t\tconst {style='', wait=null} = o;// wait=0にすると背景が最初から出る\n\t\t\t\tconst {cl, sty} = this.#o2domArg(true, wait ?uint(wait): null);\n\t\t\t\tthis.#aSpan.push(`<span${cl} style='${sty} display: inline; ${style}'>`);\t// display: inline; がないと前の改行が改行しなくなる\n\t\t\t\tdelete o.style;\t// 背景styleなどを[ch]で一塊とする\n\t\t\t\tthis.#pushSpan(o);\n\t\t\t}\treturn;\t// breakではない\n\t\t\tcase 'add_close':\n\t\t\t\tthis.#aSpan.push('</span>');\n\t\t\t\tthis.#popSpan();\n\t\t\t\treturn;\t// breakではない\n\n\t\t\tcase 'grp':\t//\t画像など 《grp|{\"id\":\"break\",\"pic\":\"breakline\"}》\n\t\t\t\tthis.#needGoTxt = true;\n\t\t\t{\n\t\t\t\tconst o = <T_cmdTxt_JSON>JSON.parse(a1);\n\t\t\t\t// 直後の dispBreak() のため oを更新\n\t\t\t\to.id ??= String(this.#aSpan.length);\n\t\t\t\tif (o.id === 'break') {\n\t\t\t\t\tthis.#txs.dispBreak(o);\n\t\t\t\t\treturn;\t// breakではない\n\t\t\t\t}\n\n\t\t\t\tthis.#firstCh = false;\n\t\t\t\t// 直後の JSON.stringify() のため oを更新\n\t\t\t\to.delay = this.#cumDelay;\t// 画像のスライドインで使う\n\t\t\t\to.r ??= '';\n\t\t\t\to.style ??= '';\n\t\t\t\to.r_style ??= '';\n\t\t\t\tconst {r, wait=null, r_style} = o;\n\t\t\t\tconst {cl, sty, lnk} = this.#o2domArg(true, wait ?uint(wait): null);\n\t\t\t\tadd_htm = `<span${cl} style='${sty} ${o.style\n\t\t\t\t}'><ruby><span data-cmd='grp' data-arg='${JSON.stringify(o)\n\t\t\t\t}'${lnk} style='${sty} display: inline;'> </span><rt${lnk}${\n\t\t\t\t\tthis.#mkStyle_r_align(' ', r, this.#r_align,\n\t\t\t\t\tthis.#htmRb.style.cssText\t// この並びで上書きされていく\n\t\t\t\t\t+ (this.#stkASpan.at(-1)?.o.r_style ?? '')\n\t\t\t\t\t+ r_style)\n\t\t\t\t}>${o.r}</rt></ruby></span>`;\n\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'tcy':\t// ルビ付き縦中横\n\t\t\t\tthis.#firstCh = false;\n\t\t\t\tthis.#needGoTxt = true;\n\t\t\t{\n\t\t\t\tconst {t='', r='', wait=null, style='', r_style=''} = <T_cmdTxt_JSON>JSON.parse(a1);\n\t\t\t\tif (TxtLayer.#val.doRecLog()) {\n\t\t\t\t\tthis.#page_text += ch +(ruby ?`《${ruby}》` :'');\n\t\t\t\t\tthis.#page_plain_text += t;\n\t\t\t\t}\n\n\t\t\t\tconst rb = CmnLib.isSafari\n\t\t\t\t\t? r.replaceAll(/[A-Za-z0-9]/g, s=> String.fromCharCode(s.charCodeAt(0) + 65248))\n\t\t\t\t\t\t// 英数字を全角に(Safariで縦中横ルビが半角文字だと、\n\t\t\t\t\t\t// 選択矩形が横倒しになる不具合対策)\n\t\t\t\t\t: r;\n\t\t\t\tconst {cl, sty, lnk} = this.#o2domArg(true, wait ?uint(wait): null);\n\t\t\t\tadd_htm = `<span${cl} style='${sty}${this.#fncFFSStyle(t)} ${style}'><ruby><span${lnk} style='${sty} display: inline; text-combine-upright: all;'>${t}</span><rt${lnk}${\n\t\t\t\t\tthis.#mkStyle_r_align(t, rb, this.#r_align,\n\t\t\t\t\tthis.#htmRb.style.cssText\t// この並びで上書きされていく\n\t\t\t\t\t+ (this.#stkASpan.at(-1)?.o.r_style ?? '')\n\t\t\t\t\t+ r_style)\n\t\t\t\t}>${rb}</rt></ruby></span>`;\n\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'del':\t//if (a1 !== 'break') throw '文字レイヤdelコマンドは、現在id=breakのみサポートします';\n\t\t\t\tTxtStage.delBreak();\n\t\t\t\treturn;\t// breakではない\n\n\t\t\tcase 'span':\n\t\t\t\tthis.#needGoTxt = true;\n\t\t\t\tthis.#mergePushSpan(<T_cmdTxt_JSON>JSON.parse(a1));\n\t\t\t\treturn;\t// breakではない\n\n\t\t\tcase 'link':\n\t\t\t\tthis.#needGoTxt = true;\n\t\t\t{\n\t\t\t\tconst o = <T_cmdTxt_JSON>JSON.parse(a1);\n\t\t\t\to[':link'] = ' data-lnk=\\'@\\'';\n\t\t\t\tconst {cl, sty, curpos} = this.#o2domArg(false, o.wait ?uint(o.wait): null);\n\t\t\t\tthis.#aSpan.push(`<span${cl} style='${sty} display: inline; ${o.style ?? ''}' ${curpos} data-arg='${a1}'>`);\n\t\t\t\t\t// display: inline; を削除するとルビもリンク背景に含まれる\n\t\t\t\t\t// ただし当たり判定は文字・ルビ上のみ\n\t\t\t\tdelete o.style;\n\t\t\t\tthis.#mergePushSpan(o);\n\t\t\t}\treturn;\t// breakではない\n\n\t\t\tcase 'endlink':\n\t\t\t\tthis.#needGoTxt = true;\n\t\t\t\tthis.#aSpan.push('</span>');\n\t\t\t\tthis.#popSpan();\n\t\t\t\treturn;\t// breakではない\n\n\t\t\tdefault:\t// ルビあり文字列\n\t\t\t\tthis.#needGoTxt = true;\n\t\t\t\tadd_htm = this.#tagCh_sub(ch, ruby, this.#r_align);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tthis.#aSpan.push(TxtLayer.#rec(add_htm));\n\t}\n\t#tagCh_sub(ch: string, rb: string, r_align: string): string {\n\t\tconst ht = ch===' ' ?' ' :ch===' ' ?' ' :ch;\n\t\tif (TxtLayer.#val.doRecLog()) {\n\t\t\tthis.#page_text += ht +(rb ?`《${rb}》` :'');\n\t\t\tif (ch !== ' ') this.#page_plain_text += ch;\n\t\t}\n\t\tconst {cl, sty, lnk} = this.#o2domArg(true, null, ch);\n\n\t\tif (rb) return `<span${cl} style='${sty} ${this.#fncFFSStyle(ch)\n\t\t//<ruby style='ruby-position:under;'>\t// 下付ルビ\n\t\t}'><ruby>${\t// 文字個別に出現させるため以下にも ${cl} が必要\n\t\t\tArray.from(ch).map((c, i)=> `<span${cl}${lnk} style='${\n\t\t\t\ti > 0 ?this.#o2domArg(true, null, ch).sty :sty\n\t\t\t} display: inline;'>${\n\t\t\t\tc===' ' ?' ' :c===' ' ?' ' :c\n\t\t\t}</span>`).join('')\n\t\t\t\t// display: inline; がないと[span]区間外のルビが浮く\n\t\t}<rt${lnk}${this.#mkStyle_r_align(ch, rb, r_align,\n\t\t\tthis.#htmRb.style.cssText\t// この並びで上書きされていく\n\t\t\t+ (this.#stkASpan.at(-1)?.o.r_style ?? ''))\n\t\t}>${rb}</rt></ruby></span>`;\t// <span>に入れないと崩れ一文字ずつ出ない\n\n\t\treturn `<span${cl} style='${sty} ${this.#fncFFSStyle(ch)}'${lnk}>${ht}</span>`;\n\t}\n\t#o2domArg(isAddWait: boolean, argWait: number | null, ch = '\\n') {\n\t\tconst wait = this.#ch_in_join ?argWait\n\t\t\t?? this.#stkASpan.at(0)?.o.wait\t// 親要素\n\t\t\t?? (TxtLayer.#doAutoWc\t// ()は必要\n\t\t\t\t? TxtLayer.#hAutoWc[ch.at(0) ?? ''] ?? 0\n\t\t\t\t: TxtLayer.msecChWait) :0;\n\t\tif (TxtLayer.#evtMng.isSkipping) this.#cumDelay = 0;\n\t\telse if (isAddWait && this.#ch_in_join) this.#cumDelay += uint(wait);\n\t\t\t// ... += uint(wait)*5\t// こうすると出現視認テストができる\n\t\tconst curpos = `data-add='{\"ch_in_style\":\"${this.#$ch_in_style}\", \"ch_out_style\":\"${this.#$ch_out_style}\"}'`;\n\n\t\treturn {\n\t\t\tcl\t: ` class='sn_ch sn_ch_yet sn_ch_in_${this.#$ch_in_style}'`,\t// TxtStage.goTxt()はこれ単位で文字出現させる\n\t\t\tsty\t: `animation-delay: ${String(this.#cumDelay)}ms;${\n\t\t\t\tthis.#stkASpan.at(-1)?.o.style ?? ''\n\t\t\t}`,\t\t// TxtStage.goTxt()はこれ単位で文字出現させる\n\t\t\tlnk\t: (this.#stkASpan.at(0)?.o[':link'] ?? '')+' '+ curpos,\n\t\t\tcurpos,\n\t\t};\n\t}\n\t#cumDelay\t= 0;\n\t#firstCh\t= true;\n\t#aSpan\t\t: string[]\t= [];\n\t#stkASpan\t: {\n\t\to\t\t: T_cmdTxt_JSON;\n\t\tr_align\t\t\t: string;\n\t\tch_in_style\t\t: string;\n\t\tch_out_style\t: string;\n\t}[] = [];\n\n\t#pushSpan(o :T_cmdTxt_JSON) {\n\t\tthis.#stkASpan.push({\n\t\t\to,\n\t\t\tr_align\t\t\t: this.#r_align,\n\t\t\tch_in_style\t\t: this.#$ch_in_style,\n\t\t\tch_out_style\t: this.#$ch_out_style,\n\t\t});\n\t\tif (o.r_align) this.#r_align = o.r_align;\n\t\tthis.#set_ch_in(o);\n\t\tthis.#set_ch_out(o);\n\t}\n\t#popSpan() {\n\t\tconst stk = this.#stkASpan.pop();\n\t\tif (! stk) return;\n\n\t\tthis.#r_align = stk.r_align;\n\t\tthis.#set_ch_in({in_style: stk.ch_in_style});\n\t\tthis.#set_ch_out({out_style: stk.ch_out_style});\n\t}\n\t#mergePushSpan(o :T_cmdTxt_JSON) {\n\t\tconst stk = this.#stkASpan.at(-1);\n\t\tif (! stk) {this.#pushSpan(o); return}\n\n\t\tstk.o = {...stk.o, ...o};\n\t\tif (! o.style && ! o.r_style) {stk.o.style = ''; stk.o.r_style = ''}\n\t\t\t// どちらも指定されてなければクリア\n\t\tif (o.r_align) this.#r_align = o.r_align;\n\t\tthis.#set_ch_in(o);\n\t\tthis.#set_ch_out(o);\n\t}\n\n\treadonly click = ()=> {\t// true: 文字出現中だったので、停止する\n\t\tif (! this.ctn.interactiveChildren || ! this.ctn.visible) return false;\n\t\treturn this.#txs.skipChIn();\n\t}\n\n\tclearText(): void {\n\t\tthis.ctn.removeChild(this.#txs);\n\t\tthis.ctn.addChild(this.#txs = this.#txs.reNew());\n\n\t\tthis.#cumDelay = 0;\n\t\tthis.#firstCh = true;\n\t\tthis.#aSpan = [];\n\t\tthis.#page_text = '';\n\t\tthis.#page_plain_text = '';\n\t\tTxtLayer.#log.pagebreak();\n\t}\n\t#page_text\t\t\t= '';\n\t#page_plain_text\t= '';\n\tget pageText() {return this.#page_text.replace('《 》', '')}\n\tget pagePlainText() {return this.#page_plain_text}\n\n\tget enabled() {return this.ctn.interactiveChildren}\n\tset enabled(e) {this.ctn.interactiveChildren = e}\n\n\treadonly\taddButton = (hArg: TArg)=> new Promise<void>(re=> {\n\t\t// 直後の JSON.stringify() のため hArg を更新\n\t\thArg.key = `btn=[${String(this.#cntBtn.children.length)}] `+ this.name_;\n\t\thArg[':id_tag'] = hArg.key.slice(0, -7);\t// Design用\n\t\targChk_Boolean(hArg, 'hint_tate', this.#txs.tategaki);\t// hint用\n\t\tconst btn = new Button(hArg, TxtLayer.#evtMng, ()=> re(), ()=> this.canFocus());\n\t\tbtn.name = JSON.stringify(hArg).replaceAll('\"', '\\'');// playback時に使用\n\t\tthis.#cntBtn.addChild(btn);\n\t});\n\tcanFocus(): boolean {\n\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\treturn (this.ctn.interactiveChildren ?? false)\n\t\t&& this.ctn.visible\n\t\t&& TxtLayer.#isPageFore(this);\n\t}\n\n\n\toverride clearLay(hArg: TArg): void {\n\t\tsuper.clearLay(hArg);\n\n\t\tthis.clearText();\n\t\t// 上で呼ばれる this.#evtMng.escapeHint();\t// Hintごとdestroyされるのを回避\n\t\tfor (const b of this.#cntBtn.removeChildren()) b.destroy();\n\t}\n\toverride readonly record = ()=> {return {...super.record(),\n\t\tenabled\t: this.enabled,\n\n\t\tr_cssText\t: this.#htmRb.style.cssText,\n\t\tr_align\t\t: this.#r_align,\n\n\t\t// バック\n\t\tb_do\t: this.#b_do === undefined\n\t\t\t\t\t? undefined\n\t\t\t\t\t: this.#b_do instanceof Sprite ?'Sprite' :'Graphics',\n\t\tb_pic\t: this.#b_pic,\n\t\tb_color\t: this.#b_color,\n\t\tb_alpha\t: this.#b_alpha,\n\t\tb_alpha_isfixed\t: this.#b_alpha_isfixed,\n\n\t\tffs\t\t: this.#ffs,\n\t\ttxs\t\t: this.#txs.record(),\n\t\tstrNoFFS: this.#strNoFFS,\n\n\t\tbtns\t: this.#cntBtn.children.map(b=> b.name),\n\t}};\n\toverride playback(hLay: T_RP_layTxt, aPrm: Promise<void>[]): void {\n\t\tsuper.playback(hLay, aPrm);\n\n\t\tthis.enabled\t= hLay.enabled;\n\n\t\tthis.#htmRb.style.cssText = hLay.r_cssText;\n\t\tthis.#r_align\t= hLay.r_align;\n\t\tthis.cvsResize();\n\n\t\tthis.#setFfs(hLay);\n\t\tthis.#txs.playback(hLay.txs);\n\t\t// 文字背景サイズは TxtStage を参照するのでこの順で\n\t\tthis.#b_alpha\t\t\t= hLay.b_alpha;\n\t\tthis.#b_alpha_isfixed\t= hLay.b_alpha_isfixed;\n\n\t\taPrm.push(\n\t\t\tnew Promise<void>(re=> {\n\t\t\t\tconst h: TArg = hLay.b_do\n\t\t\t\t\t? hLay.b_do === 'Sprite'\n\t\t\t\t\t\t? {b_pic: hLay.b_pic}\n\t\t\t\t\t\t: {b_color: hLay.b_color}\n\t\t\t\t\t: {b_pic: ''};\n\t\t\t\th.b_alpha = hLay.b_alpha;\n\t\t\t\th.b_alpha_isfixed = hLay.b_alpha_isfixed;\n\t\t\t\tif (! this.#drawBack(h, isStop=> {if (isStop) re()})) re();\n\t\t\t}),\n\t\t\t...hLay.btns.map(b=> this.addButton(<TArg>JSON.parse(b.replaceAll('\\'', '\"')))).flat(),\n\t\t);\n\t}\n\n\tget cssText() {return this.#txs.cssText}\n\tset cssText(ct: string) {this.#txs.cssText = ct}\n\n\toverride snapshot(rnd: Renderer, re: ()=> void) {\n\t\trnd.render(this.ctn, {clear: false});\n\t\tthis.#txs.snapshot(rnd, re);\n\t}\n\toverride snapshot_end() {this.#txs.snapshot_end()}\n\n\toverride makeDesignCast(gdc: IMakeDesignCast) {\n\t\tif (! this.ctn.visible) return;\n\t\tthis.#txs.makeDesignCast(gdc);\n\t}\n\toverride makeDesignCastChildren(gdc: IMakeDesignCast) {\n\t\tif (! this.ctn.visible) return;\n\t\tfor (const b of this.#cntBtn.children) b.makeDesignCast(gdc);\n\t}\n\n\toverride showDesignCast() {this.#txs.showDesignCast()}\n\toverride showDesignCastChildren() {\n\t\tfor (const b of this.#cntBtn.children) b.showDesignCast();\n\t}\n\n\toverride dump(): string {\n\t\tthis.#putCh('', 'gotxt|');\t// バッファの文字を印字してしまう\n\n\t\treturn super.dump() +`, \"enabled\":\"${String(this.enabled)\n\t\t}\", ${this.#txs.dump()\n\t\t}, \"b_pic\":\"${this.#b_pic}\", \"b_color\":\"${String(this.#b_color)\n\t\t}\", \"b_alpha\":${String(this.#b_alpha)\n\t\t}, \"b_alpha_isfixed\":\"${String(this.#b_alpha_isfixed)\n\t\t}\", \"width\":${String(this.#txs.getWidth)\n\t\t}, \"height\":${String(this.#txs.getHeight)\n\t\t}, \"pixi_obj\":[${\n\t\t\tthis.ctn.children.map(e=> `{\"class\":\"${\n\t\t\t\te instanceof Sprite ?'Sprite' :\n\t\t\t\t\te instanceof Graphics ?'Graphics' :\n\t\t\t\t\t\te instanceof Container ?'Container' :'?'\n\t\t\t}\", \"name\":\"${e.name}\", \"alpha\":${String(e.alpha)\n\t\t\t}, \"x\":${String(e.x)}, \"y\":${String(e.y)\n\t\t\t}, \"visible\":\"${String(e.visible)}\"}`).join(',')\n\t\t}], \"button\":[${\n\t\t\tthis.#cntBtn.children.map(b=> b.children[0]?.name ?? '{}').join(',')\n\t\t}]`;\n\t}\n\n}\n"],"mappings":"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"}
|