@famibee/skynovel 1.64.21 → 1.64.22

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.
@@ -1 +1 @@
1
- {"version":3,"file":"TxtLayer.js","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 {htm2tx} from './htm2tx';\n\nimport {Container, Sprite, Graphics, Rectangle, Renderer, Application} from 'pixi.js';\nimport {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\t}\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\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=\"{&quot;ch_in_style&quot;:&quot;default&quot;, &quot;ch_out_style&quot;:&quot;default&quot;}\"/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\"}\\'>&emsp;</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\\'>&emsp;</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\tlastElm.addEventListener('animationend', ()=> this.#fncEndChIn(), {once: true});\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\t\tconst st: T_SpTw = {\n\t\t\tsp,\n\t\t\ttw: new Tween(sp)\n\t\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\t.easing(ease)\n\t\t\t.delay((add.wait ?? 0) +(arg.delay ?? 0))\n\t\t\t.onComplete(()=> {\n\t\t\t\tst.tw = undefined;\n\t\t\t\t//(略)\tif (rct.width === 0 || rct.height === 0) return;\n\t\t\t\t//if (sp instanceof Sprite) sp.cacheAsBitmap = true;\n\t\t\t\t// これを有効にすると[snapshot]で文字が出ない\n\t\t\t})\n\t\t\t.start(),\n\t\t};\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: TArg) {\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#clearText() {\n\t\tthis.#grpDbgMasume.clear();\n\t\tthis.#aRect = [];\n\t\tthis.#lenHtmTxt = 0;\n\t\tthis.#aGoTxt = [];\n\n\t\t//utils.clearTextureCache();\t// 改ページと思われるこのタイミングで\n\t\tthis.skipChIn();\n\t\tconst n = <HTMLSpanElement>this.#htmTxt.cloneNode(true);\n\t\t//this.htmTxt.innerHTML = '';\t\t以下の方が早いらしい\n\t\tn.textContent = '';\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) {this.#htmTxt.textContent = ''; end()}\n\t\telse old.lastElementChild?.addEventListener('animationend', end, {once: true});\n\n\t\tthis.#htmTxt = n;\n\n\t\t//this.#hyph.clear();\t// クリアはしない\n\t}\n\treNew(): TxtStage {\n\t\tthis.#clearText();\n\n\t\tconst to = new TxtStage(this.ctn, ()=> this.canFocus(), this.sys);\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\tthis.removeChild(this.#cntTxt);\n\t\tthis.removeChild(this.#grpDbgMasume);\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>&emsp;<rt>&emsp;</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 = '&emsp;';\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>&emsp;<rt>&emsp;<\\/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(<TArg>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;'>&emsp;</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===' ' ?'&nbsp;' :ch===' ' ?'&emsp;' :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===' ' ?'&nbsp;' :c===' ' ?'&emsp;' :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.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('《&emsp;》', '')}\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"],"names":["def行頭禁則","def行末禁則","def分割禁止","defぶら下げ","defReg行頭禁則","defReg行末禁則","defReg分割禁止","defRegぶら下げ","Hyphenation","#s行頭禁則","#s行末禁則","#s分割禁止","#sぶら下げ","#reg行頭禁則","#reg行末禁則","#reg分割禁止","#regぶら下げ","hArg","#chk禁則の競合_ぶら行末","#chk禁則の競合_ぶら分禁","argChk_Boolean","argChk_Num","len行末禁則","lenぶら下げ","i","c","len分割禁止","to","#genKinsoku","s行頭禁則","s行末禁則","s分割禁止","sぶら下げ","o","hLay","htmTxt","cnvRect","tategaki","begin","bkHtm","a","len","fncFirstChk","#getChRects","sl_xy","elm","rect","ch","xy","p_i","#i2pi","p_elm","p_rect","p_ch","sty","rs","oldI","cont","ins","elm2","pal","br","ppal","ret","v","rng","pos","end","ii","pp_i","pp_ch","j","p_j","last_ch","head_ch","ppp_i","ppp_ch","htm2tx","fnc","infTL","padTx4x","padTx4y","hidden","util","str","url","extension","parseExtension","mimes","dataAsUrl","isDataUrl","resolveUrl","getAndEncode","arrayLike","WOFF","JPEG","inliner","newInliner","fontFaces","newFontFaces","embedFonts","node","cssText","styleNode","baseUrl","doc","base","resolve","request","done","timeout","fail","encoder","content","message","type","URL_REGEX","inlineAll","shouldProcess","readUrls","result","match","inline","get","data","dataUrl","urlAsRegex","nothingToInline","urls","string","resolveAll","readAll","webFonts","webFont","cssStrings","getCssRules","selectWebFontRules","rules","newWebFont","cssRules","rule","styleSheets","sheet","e","webFontRule","cln","img","re","canvas","Texture","DebugMng","TxtStage","Container","ctn","canFocus","sys","#htmTxt","#appPixi","#cntTxt","#grpDbgMasume","fncMasumeLog","CmnLib","x","y","width","height","#fncMasume","#cfg","cr","Reading","RPN_COMP_CHIN","htm","fn","ln","#scrItr","id","cfg","appPixi","#evtMng","evtMng","scrItr","#hChInStyle","#hChOutStyle","Graphics","#hWarnStyle","#hyph","#infTL","s","key","#lay_sub","#left","#lenHtmTxt","aSpan","#clearText","#lh_half","fs","#isTategaki","#padTx4x","#padTx4y","lh","cvsScale","#aGoTxt","instant","f","#goTxt_Proc","#aRect","#SPAN_LAST","#cntBreak","bcr","sx","sy","r","Rectangle","ox","oy","ease","CmnTween","#fi_easing","dataset","parentElement","arg","add","cis","cnt","SpritesMng","sp","#spWork","eCh","aLnk","Sprite","st_normal","st_hover","st_clicked","st_r_normal","st_r_hover","st_r_clicked","nlRt","st_bk","fncStyle","st","st_r","chs","#fncEndChIn","lastElm","rct","Tween","#aSpTw","wasChInIng","#REG_NG_CHSTYLE_NAME_CHR","name","#spsBreak","#fo_easing","n","old","sum_wait","cos","#ch_filter","ct","#sss","rnd","tx","_gdc","aStyle","TxtLayer","Layer","#val","#isPageFore","#log","hTag","val","log","isPageFore","doRec","#autowc","#ch_in_style","#ch_out_style","initStyle","addStyle","SEARCH_PATH_ARG_EXT","nx","ny","alpha","wait","rotate","scale_x","scale_y","x2","y2","#msecChWait","mscw","#sys","#doAutoWc","#hAutoWc","text","uint","#b_color","#b_alpha","#b_alpha_isfixed","#b_do","#b_pic","#txs","#rbSpl","RubySpliter","#htmRb","#hWarnR_Style","#cntBtn","#putCh","#rec","nm","b","#setFfs","#r_align","#ruby_pd","l","#mkStyle_r_align","#mkStyle_r_align4ff","#set_ch_in","#set_ch_out","RPN_TXT_LAY","#drawBack","isStop","in_style","#$ch_in_style","#ch_in_join","out_style","#$ch_out_style","#sps","fncComp","argChk_Color","g_alpha","#strNoFFS","#regNoFFS","#ffs","#fncFFSStyle","_ch","rb","r_align","add_sty","ev","#needGoTxt","iruby","ruby","a_ruby","add_htm","a0","a1_","a1","#firstCh","#tagCh_sub","#popSpan","#aSpan","#cumDelay","style","cl","#o2domArg","#pushSpan","r_style","lnk","#stkASpan","t","#page_text","#page_plain_text","#mergePushSpan","curpos","ht","isAddWait","argWait","stk","btn","Button","aPrm","h","gdc"],"mappings":"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"}
1
+ {"version":3,"file":"TxtLayer.js","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 {htm2tx} from './htm2tx';\n\nimport {Container, Sprite, Graphics, Rectangle, Renderer, Application} from 'pixi.js';\nimport {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\t}\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\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=\"{&quot;ch_in_style&quot;:&quot;default&quot;, &quot;ch_out_style&quot;:&quot;default&quot;}\"/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\"}\\'>&emsp;</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\\'>&emsp;</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\t\tconst st: T_SpTw = {\n\t\t\tsp,\n\t\t\ttw: new Tween(sp)\n\t\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\t.easing(ease)\n\t\t\t.delay((add.wait ?? 0) +(arg.delay ?? 0))\n\t\t\t.onComplete(()=> {\n\t\t\t\tst.tw = undefined;\n\t\t\t\t//(略)\tif (rct.width === 0 || rct.height === 0) return;\n\t\t\t\t//if (sp instanceof Sprite) sp.cacheAsBitmap = true;\n\t\t\t\t// これを有効にすると[snapshot]で文字が出ない\n\t\t\t})\n\t\t\t.start(),\n\t\t};\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: TArg) {\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>&emsp;<rt>&emsp;</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 = '&emsp;';\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>&emsp;<rt>&emsp;<\\/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(<TArg>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;'>&emsp;</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===' ' ?'&nbsp;' :ch===' ' ?'&emsp;' :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===' ' ?'&nbsp;' :c===' ' ?'&emsp;' :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('《&emsp;》', '')}\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"],"names":["def行頭禁則","def行末禁則","def分割禁止","defぶら下げ","defReg行頭禁則","defReg行末禁則","defReg分割禁止","defRegぶら下げ","Hyphenation","#s行頭禁則","#s行末禁則","#s分割禁止","#sぶら下げ","#reg行頭禁則","#reg行末禁則","#reg分割禁止","#regぶら下げ","hArg","#chk禁則の競合_ぶら行末","#chk禁則の競合_ぶら分禁","argChk_Boolean","argChk_Num","len行末禁則","lenぶら下げ","i","c","len分割禁止","to","#genKinsoku","s行頭禁則","s行末禁則","s分割禁止","sぶら下げ","o","hLay","htmTxt","cnvRect","tategaki","begin","bkHtm","a","len","fncFirstChk","#getChRects","sl_xy","elm","rect","ch","xy","p_i","#i2pi","p_elm","p_rect","p_ch","sty","rs","oldI","cont","ins","elm2","pal","br","ppal","ret","v","rng","pos","end","ii","pp_i","pp_ch","j","p_j","last_ch","head_ch","ppp_i","ppp_ch","htm2tx","fnc","infTL","padTx4x","padTx4y","hidden","util","str","url","extension","parseExtension","mimes","dataAsUrl","isDataUrl","resolveUrl","getAndEncode","arrayLike","WOFF","JPEG","inliner","newInliner","fontFaces","newFontFaces","embedFonts","node","cssText","styleNode","baseUrl","doc","base","resolve","request","done","timeout","fail","encoder","content","message","type","URL_REGEX","inlineAll","shouldProcess","readUrls","result","match","inline","get","data","dataUrl","urlAsRegex","nothingToInline","urls","string","resolveAll","readAll","webFonts","webFont","cssStrings","getCssRules","selectWebFontRules","rules","newWebFont","cssRules","rule","styleSheets","sheet","e","webFontRule","cln","img","re","canvas","Texture","DebugMng","TxtStage","Container","ctn","canFocus","sys","#htmTxt","#appPixi","#cntTxt","#grpDbgMasume","fncMasumeLog","CmnLib","x","y","width","height","#fncMasume","#cfg","cr","Reading","RPN_COMP_CHIN","htm","fn","ln","#scrItr","id","cfg","appPixi","#evtMng","evtMng","scrItr","#hChInStyle","#hChOutStyle","Graphics","#hWarnStyle","#hyph","#infTL","s","key","#lay_sub","#left","#lenHtmTxt","aSpan","#clearText","#lh_half","fs","#isTategaki","#padTx4x","#padTx4y","lh","cvsScale","#aGoTxt","instant","f","#goTxt_Proc","#aRect","#SPAN_LAST","#cntBreak","bcr","sx","sy","r","Rectangle","ox","oy","ease","CmnTween","#fi_easing","dataset","parentElement","arg","add","cis","cnt","SpritesMng","sp","#spWork","eCh","aLnk","Sprite","st_normal","st_hover","st_clicked","st_r_normal","st_r_hover","st_r_clicked","nlRt","st_bk","fncStyle","st","st_r","chs","#fncEndChIn","lastElm","#ac","rct","Tween","#aSpTw","wasChInIng","#REG_NG_CHSTYLE_NAME_CHR","name","#spsBreak","#fo_easing","n","old","sum_wait","cos","h","#ch_filter","ct","#sss","rnd","tx","_gdc","aStyle","TxtLayer","Layer","#val","#isPageFore","#log","hTag","val","log","isPageFore","doRec","#autowc","#ch_in_style","#ch_out_style","initStyle","addStyle","SEARCH_PATH_ARG_EXT","nx","ny","alpha","wait","rotate","scale_x","scale_y","x2","y2","#msecChWait","mscw","#sys","#doAutoWc","#hAutoWc","text","uint","#b_color","#b_alpha","#b_alpha_isfixed","#b_do","#b_pic","#txs","#rbSpl","RubySpliter","#htmRb","#hWarnR_Style","#cntBtn","#putCh","#rec","nm","b","#setFfs","#r_align","#ruby_pd","l","#mkStyle_r_align","#mkStyle_r_align4ff","#set_ch_in","#set_ch_out","RPN_TXT_LAY","#drawBack","isStop","in_style","#$ch_in_style","#ch_in_join","out_style","#$ch_out_style","#sps","fncComp","argChk_Color","g_alpha","#strNoFFS","#regNoFFS","#ffs","#fncFFSStyle","_ch","rb","r_align","add_sty","ev","#needGoTxt","iruby","ruby","a_ruby","add_htm","a0","a1_","a1","#firstCh","#tagCh_sub","#popSpan","#aSpan","#cumDelay","style","cl","#o2domArg","#pushSpan","r_style","lnk","#stkASpan","t","#page_text","#page_plain_text","#mergePushSpan","curpos","ht","isAddWait","argWait","stk","btn","Button","aPrm","gdc"],"mappings":"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"}