@famibee/skynovel 1.64.22 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/README.md +3 -3
  2. package/dist/Button.js +131 -163
  3. package/dist/Button.js.map +1 -1
  4. package/dist/CallStack.js +19 -22
  5. package/dist/CallStack.js.map +1 -1
  6. package/dist/CmnInterface.js +91 -0
  7. package/dist/CmnInterface.js.map +1 -0
  8. package/dist/CmnLib.js +94 -0
  9. package/dist/CmnLib.js.map +1 -0
  10. package/dist/Config.js +26 -0
  11. package/dist/Config.js.map +1 -0
  12. package/dist/ConfigBase.js +152 -0
  13. package/dist/ConfigBase.js.map +1 -0
  14. package/dist/DebugMng.js +89 -102
  15. package/dist/DebugMng.js.map +1 -1
  16. package/dist/EventListenerCtn.js +21 -0
  17. package/dist/EventListenerCtn.js.map +1 -0
  18. package/dist/EventMng.js +1435 -1577
  19. package/dist/EventMng.js.map +1 -1
  20. package/dist/Grammar.js +194 -0
  21. package/dist/Grammar.js.map +1 -0
  22. package/dist/GrpLayer.js +163 -195
  23. package/dist/GrpLayer.js.map +1 -1
  24. package/dist/Layer.js +260 -0
  25. package/dist/Layer.js.map +1 -0
  26. package/dist/LayerMng.js +810 -992
  27. package/dist/LayerMng.js.map +1 -1
  28. package/dist/Main.js +144 -393
  29. package/dist/Main.js.map +1 -1
  30. package/dist/PropParser.js +936 -834
  31. package/dist/PropParser.js.map +1 -1
  32. package/dist/Reading.js +918 -786
  33. package/dist/Reading.js.map +1 -1
  34. package/dist/RubySpliter.js +59 -89
  35. package/dist/RubySpliter.js.map +1 -1
  36. package/dist/ScriptIterator.js +805 -1035
  37. package/dist/ScriptIterator.js.map +1 -1
  38. package/dist/SndBuf.js +1097 -1326
  39. package/dist/SndBuf.js.map +1 -1
  40. package/dist/SoundMng.js +124 -135
  41. package/dist/SoundMng.js.map +1 -1
  42. package/dist/SpritesMng.js +220 -232
  43. package/dist/SpritesMng.js.map +1 -1
  44. package/dist/SysBase.js +1729 -0
  45. package/dist/SysBase.js.map +1 -0
  46. package/dist/TxtLayer.js +1212 -1398
  47. package/dist/TxtLayer.js.map +1 -1
  48. package/dist/Variable.js +398 -466
  49. package/dist/Variable.js.map +1 -1
  50. package/dist/chunk.js +18 -0
  51. package/dist/gamepad.js +723 -511
  52. package/dist/gamepad.js.map +1 -1
  53. package/dist/pixi.js +13422 -0
  54. package/dist/pixi.js.map +1 -0
  55. package/dist/platform.js +424 -369
  56. package/dist/platform.js.map +1 -1
  57. package/dist/sn/AnalyzeTagArg.d.ts +1 -1
  58. package/dist/sn/AnalyzeTagArg.d.ts.map +1 -1
  59. package/dist/sn/CmnInterface.d.ts +3 -1
  60. package/dist/sn/CmnInterface.d.ts.map +1 -1
  61. package/dist/sn/CmnLib.d.ts.map +1 -1
  62. package/dist/sn/CmnTween.d.ts +7 -7
  63. package/dist/sn/CmnTween.d.ts.map +1 -1
  64. package/dist/sn/EventMng.d.ts.map +1 -1
  65. package/dist/sn/FocusMng.d.ts.map +1 -1
  66. package/dist/sn/Grammar.d.ts +1 -1
  67. package/dist/sn/Grammar.d.ts.map +1 -1
  68. package/dist/sn/Log.d.ts.map +1 -1
  69. package/dist/sn/Main.d.ts.map +1 -1
  70. package/dist/sn/Pages.d.ts.map +1 -1
  71. package/dist/sn/PropParser.d.ts +2 -2
  72. package/dist/sn/PropParser.d.ts.map +1 -1
  73. package/dist/sn/Reading.d.ts +7 -0
  74. package/dist/sn/Reading.d.ts.map +1 -1
  75. package/dist/sn/RubySpliter.d.ts.map +1 -1
  76. package/dist/sn/ScriptIterator.d.ts.map +1 -1
  77. package/dist/sn/SndBuf.d.ts +27 -16
  78. package/dist/sn/SndBuf.d.ts.map +1 -1
  79. package/dist/sn/SoundMng.d.ts +4 -1
  80. package/dist/sn/SoundMng.d.ts.map +1 -1
  81. package/dist/sn/SysBase.d.ts.map +1 -1
  82. package/dist/sn/TxtStage.d.ts +4 -1
  83. package/dist/sn/TxtStage.d.ts.map +1 -1
  84. package/dist/test/ValTest.d.ts +1 -1
  85. package/dist/test/ValTest.d.ts.map +1 -1
  86. package/dist/web.js +653 -8
  87. package/dist/web.js.map +1 -1
  88. package/dist_app/Button.js +131 -163
  89. package/dist_app/Button.js.map +1 -1
  90. package/dist_app/CallStack.js +19 -22
  91. package/dist_app/CallStack.js.map +1 -1
  92. package/dist_app/CmnInterface.js +91 -0
  93. package/dist_app/CmnInterface.js.map +1 -0
  94. package/dist_app/CmnLib.js +94 -0
  95. package/dist_app/CmnLib.js.map +1 -0
  96. package/dist_app/Config.js +26 -0
  97. package/dist_app/Config.js.map +1 -0
  98. package/dist_app/ConfigBase.js +152 -0
  99. package/dist_app/ConfigBase.js.map +1 -0
  100. package/dist_app/DebugMng.js +92 -0
  101. package/dist_app/DebugMng.js.map +1 -0
  102. package/dist_app/EventListenerCtn.js +21 -0
  103. package/dist_app/EventListenerCtn.js.map +1 -0
  104. package/dist_app/EventMng.js +1435 -1577
  105. package/dist_app/EventMng.js.map +1 -1
  106. package/dist_app/Grammar.js +194 -0
  107. package/dist_app/Grammar.js.map +1 -0
  108. package/dist_app/GrpLayer.js +163 -195
  109. package/dist_app/GrpLayer.js.map +1 -1
  110. package/dist_app/Layer.js +260 -0
  111. package/dist_app/Layer.js.map +1 -0
  112. package/dist_app/LayerMng.js +810 -992
  113. package/dist_app/LayerMng.js.map +1 -1
  114. package/dist_app/Main.js +144 -392
  115. package/dist_app/Main.js.map +1 -1
  116. package/dist_app/PropParser.js +936 -834
  117. package/dist_app/PropParser.js.map +1 -1
  118. package/dist_app/Reading.js +918 -786
  119. package/dist_app/Reading.js.map +1 -1
  120. package/dist_app/RubySpliter.js +59 -89
  121. package/dist_app/RubySpliter.js.map +1 -1
  122. package/dist_app/ScriptIterator.js +805 -1034
  123. package/dist_app/ScriptIterator.js.map +1 -1
  124. package/dist_app/SndBuf.js +1097 -1326
  125. package/dist_app/SndBuf.js.map +1 -1
  126. package/dist_app/SoundMng.js +124 -135
  127. package/dist_app/SoundMng.js.map +1 -1
  128. package/dist_app/SpritesMng.js +220 -231
  129. package/dist_app/SpritesMng.js.map +1 -1
  130. package/dist_app/SysBase.js +1729 -0
  131. package/dist_app/SysBase.js.map +1 -0
  132. package/dist_app/TxtLayer.js +1212 -1397
  133. package/dist_app/TxtLayer.js.map +1 -1
  134. package/dist_app/Variable.js +398 -466
  135. package/dist_app/Variable.js.map +1 -1
  136. package/dist_app/app.js +211 -8
  137. package/dist_app/app.js.map +1 -1
  138. package/dist_app/appMain.js +20 -21
  139. package/dist_app/appMain.js.map +1 -1
  140. package/dist_app/chunk.js +18 -0
  141. package/dist_app/gamepad.js +723 -511
  142. package/dist_app/gamepad.js.map +1 -1
  143. package/dist_app/pixi.js +11181 -0
  144. package/dist_app/pixi.js.map +1 -0
  145. package/dist_app/platform.js +424 -369
  146. package/dist_app/platform.js.map +1 -1
  147. package/dist_app/preload.js +2 -2
  148. package/dist_app/preload.js.map +1 -1
  149. package/dist_app/sn/AnalyzeTagArg.d.ts +1 -1
  150. package/dist_app/sn/AnalyzeTagArg.d.ts.map +1 -1
  151. package/dist_app/sn/CmnInterface.d.ts +3 -1
  152. package/dist_app/sn/CmnInterface.d.ts.map +1 -1
  153. package/dist_app/sn/CmnLib.d.ts.map +1 -1
  154. package/dist_app/sn/CmnTween.d.ts +7 -7
  155. package/dist_app/sn/CmnTween.d.ts.map +1 -1
  156. package/dist_app/sn/EventMng.d.ts.map +1 -1
  157. package/dist_app/sn/FocusMng.d.ts.map +1 -1
  158. package/dist_app/sn/Grammar.d.ts +1 -1
  159. package/dist_app/sn/Grammar.d.ts.map +1 -1
  160. package/dist_app/sn/Log.d.ts.map +1 -1
  161. package/dist_app/sn/Main.d.ts.map +1 -1
  162. package/dist_app/sn/Pages.d.ts.map +1 -1
  163. package/dist_app/sn/PropParser.d.ts +2 -2
  164. package/dist_app/sn/PropParser.d.ts.map +1 -1
  165. package/dist_app/sn/Reading.d.ts +7 -0
  166. package/dist_app/sn/Reading.d.ts.map +1 -1
  167. package/dist_app/sn/RubySpliter.d.ts.map +1 -1
  168. package/dist_app/sn/ScriptIterator.d.ts.map +1 -1
  169. package/dist_app/sn/SndBuf.d.ts +27 -16
  170. package/dist_app/sn/SndBuf.d.ts.map +1 -1
  171. package/dist_app/sn/SoundMng.d.ts +4 -1
  172. package/dist_app/sn/SoundMng.d.ts.map +1 -1
  173. package/dist_app/sn/SysBase.d.ts.map +1 -1
  174. package/dist_app/sn/TxtStage.d.ts +4 -1
  175. package/dist_app/sn/TxtStage.d.ts.map +1 -1
  176. package/dist_app/test/ValTest.d.ts +1 -1
  177. package/dist_app/test/ValTest.d.ts.map +1 -1
  178. package/package.json +24 -14
  179. package/dist/CmnTween.js +0 -193
  180. package/dist/CmnTween.js.map +0 -1
  181. package/dist/web2.js +0 -21644
  182. package/dist/web2.js.map +0 -1
  183. package/dist_app/CmnTween.js +0 -193
  184. package/dist_app/CmnTween.js.map +0 -1
  185. package/dist_app/app2.js +0 -18547
  186. package/dist_app/app2.js.map +0 -1
@@ -1,90 +1,60 @@
1
- class o {
2
- static #s = "ヽ";
3
- static setting(t) {
4
- t.sesame && (o.#s = t.sesame);
5
- }
6
- static getSesame() {
7
- return o.#s;
8
- }
9
- static destroy() {
10
- o.#s = "ヽ";
11
- }
12
- #t = () => {
13
- };
14
- init(t) {
15
- this.#t = t;
16
- }
17
- /*
18
- ★Unicodeで「漢字」の正規表現 ものかの http://tama-san.com/kanji-regex/
19
- 2E80..2FDF CJK部首補助+康熙部首
20
- 3005 々(漢字の踊り字)
21
- 3007 〇(漢数字のゼロ)
22
- 303B 〻(漢字の踊り字)
23
- 3400..4DBF CJK統合漢字拡張A
24
- 4E00..9FFF CJK統合漢字
25
- F900..FAFF CJK互換漢字
26
- 20000..2FFFF CJK統合漢字拡張B〜F+CJK互換漢字追加+念のためU+2FFFFまで
27
-
28
- [\x{2E80}-\x{2FDF}々〇〻\x{3400}-\x{4DBF}\x{4E00}-\x{9FFF}\x{F900}-\x{FAFF}\x{20000}-\x{2FFFF}]
29
- [\u2E80-\u2FDF々〇〻\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF\u20000-\u2FFFF]
30
- [⺀-⿟々〇〻㐀-䶿一-鿿豈-﫿\u20000-\u2FFFF] // 含まれない文字がある
31
- [⺀-⿟々〇〻㐀-鿿豈-﫿\u20000-\u2FFFF] // ヽ--30FD が変に引っかかる。多分\u2000-\u2FFF解釈
32
- \\u{20000}-\\u{2FFFF} // 五桁だとエラー
33
-
34
- 【2022/10/03】ruby正規表現のUnicode プロパティ(とPOSIX文字クラス) - Qiita https://qiita.com/Takayuki_Nakano/items/8d38beaddb84b488d683
35
- > このHiraganaプロパティ、長音記号は含まれていません。
36
- > \p{Han}…簡体字や繁体字、韓国語の漢字…ベトナム語の漢字にもマッチ
37
-
38
- ・Unicode文字一覧表 - instant tools https://tools.m-bsys.com/ex/unicode_table.php
39
- */
40
- static #n;
41
- static setEscape(t) {
42
- o.#n = new RegExp(
43
- (t ? `(?<ce>\\${t}\\S)|` : "") + "|(?<str>[^《\\n]+)《(?<ruby>[^》\\n]+)》|(?:(?<kan>[⺀-⿟々〇〻㐀-鿿豈-﫿]+[ぁ-ヿ]*|[^ |《》\\n])《(?<kan_ruby>[^》\\n]+)》)|(?<txt>[\uD800-\uDBFF][\uDC00-\uDFFF]|[^|《》]+?|.)",
44
- "gs"
45
- );
46
- }
47
- putTxt(t) {
48
- for (const { groups: s } of t.matchAll(o.#n)) {
49
- const { ruby: c, kan_ruby: e, kan: r = "", ce: i, txt: f = "", str: n = "" } = s;
50
- if (c) {
51
- this.putTxtRb(decodeURIComponent(n), c);
52
- continue;
53
- }
54
- if (e) {
55
- this.putTxtRb(r, e);
56
- continue;
57
- }
58
- if (i) {
59
- this.#t(i.slice(1), "");
60
- continue;
61
- }
62
- for (const a of Array.from(f)) this.#t(a, "");
63
- }
64
- }
65
- putTxtRb(t, s) {
66
- if (/^\w+|{"/.test(s)) {
67
- this.#t(t, s);
68
- return;
69
- }
70
- const c = Array.from(t), e = c.length;
71
- if (/^\*.?$/.test(s)) {
72
- const n = "center|" + (s === "*" ? o.#s : s.charAt(1));
73
- for (let a = 0; a < e; ++a) this.#t(c[a], n);
74
- return;
75
- }
76
- if (e === 1 || !s.includes(" ")) {
77
- this.#t(t, decodeURIComponent(s));
78
- return;
79
- }
80
- const r = s.split(" "), i = r.length, f = i > e ? i : e;
81
- for (let n = 0; n < f; ++n) this.#t(
82
- n < e ? c[n] : "",
83
- n < i ? decodeURIComponent(r[n]) : ""
84
- );
85
- }
86
- }
87
- export {
88
- o as R
1
+ var RubySpliter = class e {
2
+ static #e = "ヽ";
3
+ static setting(t) {
4
+ t.sesame && (e.#e = t.sesame);
5
+ }
6
+ static getSesame() {
7
+ return e.#e;
8
+ }
9
+ static destroy() {
10
+ e.#e = "ヽ";
11
+ }
12
+ #t = () => {};
13
+ init(e) {
14
+ this.#t = e;
15
+ }
16
+ static #n;
17
+ static setEscape(t) {
18
+ e.#n = RegExp((t ? `(?<ce>\\${t}\\S)|` : "") + "|(?<str>[^《\\n]+)《(?<ruby>[^》\\n]+)》|(?:(?<kan>[⺀-⿟々〇〻㐀-鿿豈-﫿]+[ぁ-ヿ]*|[^ |《》\\n])《(?<kan_ruby>[^》\\n]+)》)|(?<txt>[�d800-�dbff][�dc00-�dfff]|[^|《》]+?|.)", "gs");
19
+ }
20
+ putTxt(t) {
21
+ for (let { groups: n } of t.matchAll(e.#n)) {
22
+ if (!n) break;
23
+ let { ruby: e, kan_ruby: t, kan: r = "", ce: i, txt: a = "", str: o = "" } = n;
24
+ if (e) {
25
+ this.putTxtRb(decodeURIComponent(o), e);
26
+ continue;
27
+ }
28
+ if (t) {
29
+ this.putTxtRb(r, t);
30
+ continue;
31
+ }
32
+ if (i) {
33
+ this.#t(i.slice(1), "");
34
+ continue;
35
+ }
36
+ for (let e of Array.from(a)) this.#t(e, "");
37
+ }
38
+ }
39
+ putTxtRb(t, n) {
40
+ if (/^\w+|{"/.test(n)) {
41
+ this.#t(t, n);
42
+ return;
43
+ }
44
+ let r = Array.from(t), i = r.length;
45
+ if (/^\*.?$/.test(n)) {
46
+ let t = "center|" + (n === "*" ? e.#e : n.charAt(1));
47
+ for (let e of r) this.#t(e, t);
48
+ return;
49
+ }
50
+ if (i === 1 || !n.includes(" ")) {
51
+ this.#t(t, decodeURIComponent(n));
52
+ return;
53
+ }
54
+ let a = n.split(" "), o = a.length, s = o > i ? o : i;
55
+ for (let e = 0; e < s; ++e) this.#t(e < i ? r[e] : "", e < o ? decodeURIComponent(a[e]) : "");
56
+ }
89
57
  };
90
- //# sourceMappingURL=RubySpliter.js.map
58
+ export { RubySpliter as t };
59
+
60
+ //# sourceMappingURL=RubySpliter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RubySpliter.js","sources":["../src/sn/RubySpliter.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/* eslint-disable no-irregular-whitespace */\n/* ***** BEGIN LICENSE BLOCK *****\n\tCopyright (c) 2018-2025 Famibee (famibee.blog38.fc2.com)\n\n\tThis software is released under the MIT License.\n\thttp://opensource.org/licenses/mit-license.php\n** ***** END LICENSE BLOCK ***** */\n\nimport type {TArg} from './Grammar';\nimport type {T_PutCh} from './CmnInterface';\n\nexport type IAutoPage = (idx: number, str: string) => void;\n\n\nexport class RubySpliter {\n\tstatic\t#sesame\t\t= 'ヽ';\n\tstatic\tsetting(hArg: TArg) {if (hArg.sesame) RubySpliter.#sesame = hArg.sesame}\n\tstatic\tgetSesame() {return RubySpliter.#sesame}\n\n\tstatic\tdestroy() {RubySpliter.#sesame = 'ヽ'}\n\n\t#putCh\t: T_PutCh\t= ()=> { /* empty */ };\n\tinit(putCh: T_PutCh) {this.#putCh = putCh}\n\n/*\n\t\t★Unicodeで「漢字」の正規表現 – ものかの http://tama-san.com/kanji-regex/\n\t\t2E80..2FDF CJK部首補助+康熙部首\n\t\t3005々(漢字の踊り字)\n\t\t3007〇(漢数字のゼロ)\n\t\t303B〻(漢字の踊り字)\n\t\t3400..4DBF CJK統合漢字拡張A\n\t\t4E00..9FFF CJK統合漢字\n\t\tF900..FAFF CJK互換漢字\n\t\t20000..2FFFF CJK統合漢字拡張B〜F+CJK互換漢字追加+念のためU+2FFFFまで\n\n\t\t[\\x{2E80}-\\x{2FDF}々〇〻\\x{3400}-\\x{4DBF}\\x{4E00}-\\x{9FFF}\\x{F900}-\\x{FAFF}\\x{20000}-\\x{2FFFF}]\n\t\t[\\u2E80-\\u2FDF々〇〻\\u3400-\\u4DBF\\u4E00-\\u9FFF\\uF900-\\uFAFF\\u20000-\\u2FFFF]\n\t\t[⺀-⿟々〇〻㐀-䶿一-鿿豈-﫿\\u20000-\\u2FFFF]\t\t// 含まれない文字がある\n\t\t[⺀-⿟々〇〻㐀-鿿豈-﫿\\u20000-\\u2FFFF]\t\t\t// ヽ--30FD が変に引っかかる。多分\\u2000-\\u2FFF解釈\n\t\t\\\\u{20000}-\\\\u{2FFFF}\t// 五桁だとエラー\n\n\t\t【2022/10/03】ruby正規表現のUnicode プロパティ(とPOSIX文字クラス) - Qiita https://qiita.com/Takayuki_Nakano/items/8d38beaddb84b488d683\n\t\t\t> このHiraganaプロパティ、長音記号は含まれていません。\n\t\t\t> \\p{Han}…簡体字や繁体字、韓国語の漢字…ベトナム語の漢字にもマッチ\n\n\t\t・Unicode文字一覧表 - instant tools https://tools.m-bsys.com/ex/unicode_table.php\n*/\n\tstatic\t#REG_RUBY\t: RegExp;\n\tstatic\tsetEscape(ce: string) {\n\t\t// 830 match 11293 step(1.7ms) PCRE2 https://regex101.com/r/BBrQtC/1\n\t\t/*\n(?<txt4>\\\\\\S)\n|\t|(?<str>[^《\\n]+)《(?<ruby>[^》\\n]+)》\n|\t(?: (?<kan>[⺀-⿟々〇〻㐀-鿿豈-﫿]+ [ぁ-ヿ]* | [^ |《》\\n])\n\t\t《(?<kan_ruby>[^》\\n]+)》)\n|\t(?<txt>\n\t[\\xD800-\\xDBFF][\\xDC00-\\xDFFF]\n|\t[^|《》]+?\n|\t.)\n\t\t*/\n\t\t// (new RegExp(\"~\")) の場合は、バックスラッシュは2つ必要\n\t\tRubySpliter.#REG_RUBY = new RegExp(\n\t\t\t(ce ?`(?<ce>\\\\${ce}\\\\S)|` :'')+\n\t\t\t'|(?<str>[^《\\\\n]+)《(?<ruby>[^》\\\\n]+)》'+\n\t\t\t'|(?:(?<kan>[⺀-⿟々〇〻㐀-鿿豈-﫿]+[ぁ-ヿ]*|[^ |《》\\\\n])'+\n\t\t\t'《(?<kan_ruby>[^》\\\\n]+)》)'+\n\t\t\t'|(?<txt>'+\n\t\t\t'[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]'+\t// 上位 + 下位サロゲート\n\t\t\t'|[^|《》]+?'+\t\t// 不要だが細切れにしないほうが後々効率で有利\n\t\t\t'|.)',\n\t\t\t'gs'\n\t\t);\n\t}\n\n\tputTxt(text: string) {\n\t\tfor (const {groups} of text.matchAll(RubySpliter.#REG_RUBY)) {\n\t\t\tconst {ruby, kan_ruby, kan='', ce, txt='', str=''} = groups!;\n\t\t\tif (ruby) {this.putTxtRb(decodeURIComponent(str), ruby); continue}\n\n\t\t\tif (kan_ruby) {this.putTxtRb(kan, kan_ruby); continue}\n\t\t\tif (ce) {this.#putCh(ce.slice(1), ''); continue}\n\n\t\t\tfor (const v of Array.from(txt)) this.#putCh(v, '');\n\t\t\t\t// txt.split('')や [...txt] はサロゲートペアで問題\n\t\t}\n\t}\n\n\tputTxtRb(text: string, ruby: string) {\t// テスト用にpublic\n\t\t// 自動区切りを行わない(内部的 json文法)\n\t\tif (/^\\w+|{\"/.test(ruby)) {this.#putCh(text, ruby); return}\n\n\t\tconst a: string[] = Array.from(text);\n\t\tconst len = a.length;\n\t\tif (/^\\*.?$/.test(ruby)) {\t// 傍点文法\n\t\t\tconst rb_ses = 'center|'+ (ruby === '*' ?RubySpliter.#sesame :ruby.charAt(1));\n\t\t\tfor (let i=0; i<len; ++i) this.#putCh(a[i]!, rb_ses);\n\t\t\treturn;\n\t\t}\n\n\t\t// 自動区切りを行わない(単漢字など)\n\t\tif (len === 1 || ! ruby.includes(' ')) {\n\t\t\tthis.#putCh(text, decodeURIComponent(ruby));\n\t\t\treturn;\n\t\t}\n\n\t\t// 空白がある場合はユーザが区切りを指定しているものと見なす\n\t\tconst aR = ruby.split(' ');\n\t\tconst lenR = aR.length;\n\t\tconst len_max = lenR > len ?lenR :len;\n\t\tfor (let i=0; i<len_max; ++i) this.#putCh(\n\t\t\ti < len ? a[i]! : '',\n\t\t\ti < lenR ? decodeURIComponent(aR[i]!) : ''\n\t\t);\n\t}\n\n}\n"],"names":["RubySpliter","#sesame","hArg","#putCh","putCh","#REG_RUBY","ce","text","groups","ruby","kan_ruby","kan","txt","str","v","a","len","rb_ses","i","aR","lenR","len_max"],"mappings":"AAeO,MAAMA,EAAY;AAAA,EACxB,OAAOC,KAAW;AAAA,EAClB,OAAO,QAAQC,GAAY;AAAC,IAAIA,EAAK,WAAQF,EAAYC,KAAUC,EAAK;AAAA,EAAM;AAAA,EAC9E,OAAO,YAAY;AAAC,WAAOF,EAAYC;AAAA,EAAO;AAAA,EAE9C,OAAO,UAAU;AAAC,IAAAD,EAAYC,KAAU;AAAA,EAAG;AAAA,EAE3CE,KAAmB,MAAK;AAAA,EAAc;AAAA,EACtC,KAAKC,GAAgB;AAAC,SAAKD,KAASC;AAAA,EAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyBzC,OAAOC;AAAA,EACP,OAAO,UAAUC,GAAY;AAa5B,IAAAN,EAAYK,KAAY,IAAI;AAAA,OAC1BC,IAAI,WAAWA,CAAE,UAAS,MAC3B;AAAA,MAOA;AAAA,IAAA;AAAA,EAEF;AAAA,EAEA,OAAOC,GAAc;AACpB,eAAW,EAAC,QAAAC,OAAWD,EAAK,SAASP,EAAYK,EAAS,GAAG;AAC5D,YAAM,EAAC,MAAAI,GAAM,UAAAC,GAAU,KAAAC,IAAI,IAAI,IAAAL,GAAI,KAAAM,IAAI,IAAI,KAAAC,IAAI,GAAA,IAAML;AACrD,UAAIC,GAAM;AAAC,aAAK,SAAS,mBAAmBI,CAAG,GAAGJ,CAAI;AAAG;AAAA,MAAQ;AAEjE,UAAIC,GAAU;AAAC,aAAK,SAASC,GAAKD,CAAQ;AAAG;AAAA,MAAQ;AACrD,UAAIJ,GAAI;AAAC,aAAKH,GAAOG,EAAG,MAAM,CAAC,GAAG,EAAE;AAAG;AAAA,MAAQ;AAE/C,iBAAWQ,KAAK,MAAM,KAAKF,CAAG,EAAG,MAAKT,GAAOW,GAAG,EAAE;AAAA,IAEnD;AAAA,EACD;AAAA,EAEA,SAASP,GAAcE,GAAc;AAEpC,QAAI,UAAU,KAAKA,CAAI,GAAG;AAAC,WAAKN,GAAOI,GAAME,CAAI;AAAG;AAAA,IAAM;AAE1D,UAAMM,IAAc,MAAM,KAAKR,CAAI,GAC7BS,IAAMD,EAAE;AACd,QAAI,SAAS,KAAKN,CAAI,GAAG;AACxB,YAAMQ,IAAS,aAAYR,MAAS,MAAKT,EAAYC,KAASQ,EAAK,OAAO,CAAC;AAC3E,eAASS,IAAE,GAAGA,IAAEF,GAAK,EAAEE,EAAG,MAAKf,GAAOY,EAAEG,CAAC,GAAID,CAAM;AACnD;AAAA,IACD;AAGA,QAAID,MAAQ,KAAK,CAAEP,EAAK,SAAS,GAAG,GAAG;AACtC,WAAKN,GAAOI,GAAM,mBAAmBE,CAAI,CAAC;AAC1C;AAAA,IACD;AAGA,UAAMU,IAAKV,EAAK,MAAM,GAAG,GACnBW,IAAOD,EAAG,QACVE,IAAUD,IAAOJ,IAAKI,IAAMJ;AAClC,aAASE,IAAE,GAAGA,IAAEG,GAAS,EAAEH,EAAG,MAAKf;AAAA,MAClCe,IAAIF,IAAMD,EAAEG,CAAC,IAAK;AAAA,MAClBA,IAAIE,IAAO,mBAAmBD,EAAGD,CAAC,CAAE,IAAI;AAAA,IAAA;AAAA,EAE1C;AAED;"}
1
+ {"version":3,"file":"RubySpliter.js","names":["#sesame","#putCh","#REG_RUBY","a: string[]"],"sources":["../src/sn/RubySpliter.ts"],"sourcesContent":["/* eslint-disable no-irregular-whitespace */\n/* ***** BEGIN LICENSE BLOCK *****\n\tCopyright (c) 2018-2025 Famibee (famibee.blog38.fc2.com)\n\n\tThis software is released under the MIT License.\n\thttp://opensource.org/licenses/mit-license.php\n** ***** END LICENSE BLOCK ***** */\n\nimport type {TArg} from './Grammar';\nimport type {T_PutCh} from './CmnInterface';\n\nexport type IAutoPage = (idx: number, str: string) => void;\n\n\nexport class RubySpliter {\n\tstatic\t#sesame\t\t= 'ヽ';\n\tstatic\tsetting(hArg: TArg) {if (hArg.sesame) RubySpliter.#sesame = hArg.sesame}\n\tstatic\tgetSesame() {return RubySpliter.#sesame}\n\n\tstatic\tdestroy() {RubySpliter.#sesame = 'ヽ'}\n\n\t#putCh\t: T_PutCh\t= ()=> { /* empty */ };\n\tinit(putCh: T_PutCh) {this.#putCh = putCh}\n\n/*\n\t\t★Unicodeで「漢字」の正規表現 – ものかの http://tama-san.com/kanji-regex/\n\t\t2E80..2FDF\tCJK部首補助+康熙部首\n\t\t3005\t\t々(漢字の踊り字)\n\t\t3007\t\t〇(漢数字のゼロ)\n\t\t303B\t\t〻(漢字の踊り字)\n\t\t3400..4DBF\t\tCJK統合漢字拡張A\n\t\t4E00..9FFF\t\tCJK統合漢字\n\t\tF900..FAFF\t\tCJK互換漢字\n\t\t20000..2FFFF\tCJK統合漢字拡張B〜F+CJK互換漢字追加+念のためU+2FFFFまで\n\n\t\t[\\x{2E80}-\\x{2FDF}々〇〻\\x{3400}-\\x{4DBF}\\x{4E00}-\\x{9FFF}\\x{F900}-\\x{FAFF}\\x{20000}-\\x{2FFFF}]\n\t\t[\\u2E80-\\u2FDF々〇〻\\u3400-\\u4DBF\\u4E00-\\u9FFF\\uF900-\\uFAFF\\u20000-\\u2FFFF]\n\t\t[⺀-⿟々〇〻㐀-䶿一-鿿豈-﫿\\u20000-\\u2FFFF]\t\t// 含まれない文字がある\n\t\t[⺀-⿟々〇〻㐀-鿿豈-﫿\\u20000-\\u2FFFF]\t\t\t// ヽ--30FD が変に引っかかる。多分\\u2000-\\u2FFF解釈\n\t\t\\\\u{20000}-\\\\u{2FFFF}\t// 五桁だとエラー\n\n\t\t【2022/10/03】ruby正規表現のUnicode プロパティ(とPOSIX文字クラス) - Qiita https://qiita.com/Takayuki_Nakano/items/8d38beaddb84b488d683\n\t\t\t> このHiraganaプロパティ、長音記号は含まれていません。\n\t\t\t> \\p{Han}…簡体字や繁体字、韓国語の漢字…ベトナム語の漢字にもマッチ\n\n\t\t・Unicode文字一覧表 - instant tools https://tools.m-bsys.com/ex/unicode_table.php\n*/\n\tstatic\t#REG_RUBY\t: RegExp;\n\tstatic\tsetEscape(ce: string) {\n\t\t// 830 match 11293 step(1.7ms) PCRE2 https://regex101.com/r/BBrQtC/1\n\t\t/*\n(?<txt4>\\\\\\S)\n|\t|(?<str>[^《\\n]+)《(?<ruby>[^》\\n]+)》\n|\t(?: (?<kan>[⺀-⿟々〇〻㐀-鿿豈-﫿]+ [ぁ-ヿ]* | [^ |《》\\n])\n\t\t《(?<kan_ruby>[^》\\n]+)》)\n|\t(?<txt>\n\t[\\xD800-\\xDBFF][\\xDC00-\\xDFFF]\n|\t[^|《》]+?\n|\t.)\n\t\t*/\n\t\t// (new RegExp(\"~\")) の場合は、バックスラッシュは2つ必要\n\t\tRubySpliter.#REG_RUBY = new RegExp(\n\t\t\t(ce ?`(?<ce>\\\\${ce}\\\\S)|` :'')+\n\t\t\t'|(?<str>[^《\\\\n]+)《(?<ruby>[^》\\\\n]+)》'+\n\t\t\t'|(?:(?<kan>[⺀-⿟々〇〻㐀-鿿豈-﫿]+[ぁ-ヿ]*|[^ |《》\\\\n])'+\n\t\t\t'《(?<kan_ruby>[^》\\\\n]+)》)'+\n\t\t\t'|(?<txt>'+\n\t\t\t'[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]'+\t// 上位 + 下位サロゲート\n\t\t\t'|[^|《》]+?'+\t\t// 不要だが細切れにしないほうが後々効率で有利\n\t\t\t'|.)',\n\t\t\t'gs'\n\t\t);\n\t}\n\n\tputTxt(text: string) {\n\t\tfor (const {groups} of text.matchAll(RubySpliter.#REG_RUBY)) {\n\t\t\tif (! groups) break;\n\t\t\tconst {ruby, kan_ruby, kan='', ce, txt='', str=''} = groups;\n\t\t\tif (ruby) {this.putTxtRb(decodeURIComponent(str), ruby); continue}\n\n\t\t\tif (kan_ruby) {this.putTxtRb(kan, kan_ruby); continue}\n\t\t\tif (ce) {this.#putCh(ce.slice(1), ''); continue}\n\n\t\t\tfor (const v of Array.from(txt)) this.#putCh(v, '');\n\t\t\t\t// txt.split('')や [...txt] はサロゲートペアで問題\n\t\t}\n\t}\n\n\tputTxtRb(text: string, ruby: string) {\t// テスト用にpublic\n\t\t// 自動区切りを行わない(内部的 json文法)\n\t\tif (/^\\w+|{\"/.test(ruby)) {this.#putCh(text, ruby); return}\n\n\t\tconst a: string[] = Array.from(text);\n\t\tconst len = a.length;\n\t\tif (/^\\*.?$/.test(ruby)) {\t// 傍点文法\n\t\t\tconst rb_ses = 'center|'+ (ruby === '*' ?RubySpliter.#sesame :ruby.charAt(1));\n\t\t\tfor (const s of a) this.#putCh(s, rb_ses);\n\t\t\treturn;\n\t\t}\n\n\t\t// 自動区切りを行わない(単漢字など)\n\t\tif (len === 1 || ! ruby.includes(' ')) {\n\t\t\tthis.#putCh(text, decodeURIComponent(ruby));\n\t\t\treturn;\n\t\t}\n\n\t\t// 空白がある場合はユーザが区切りを指定しているものと見なす\n\t\tconst aR = ruby.split(' ');\n\t\tconst lenR = aR.length;\n\t\tconst len_max = lenR > len ?lenR :len;\n\t\tfor (let i=0; i<len_max; ++i) this.#putCh(\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\ti < len ? a[i]! : '',\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\ti < lenR ? decodeURIComponent(aR[i]!) : ''\n\t\t);\n\t}\n\n}\n"],"mappings":"AAcA,IAAa,cAAb,MAAa,EAAY;CACxB,QAAA,IAAkB;CAClB,OAAO,QAAQ,GAAY;AAAC,EAAI,EAAK,WAAQ,GAAA,IAAsB,EAAK;;CACxE,OAAO,YAAY;AAAC,SAAO,GAAA;;CAE3B,OAAO,UAAU;AAAC,KAAA,IAAsB;;CAExC,WAAwB;CACxB,KAAK,GAAgB;AAAC,QAAA,IAAc;;CAyBpC,QAAA;CACA,OAAO,UAAU,GAAY;AAa5B,KAAA,IAA4B,QAC1B,IAAI,WAAW,EAAG,SAAQ,MAC3B,0JAOA,KACA;;CAGF,OAAO,GAAc;AACpB,OAAK,IAAM,EAAC,eAAW,EAAK,SAAS,GAAA,EAAsB,EAAE;AAC5D,OAAI,CAAE,EAAQ;GACd,IAAM,EAAC,SAAM,aAAU,SAAI,IAAI,OAAI,SAAI,IAAI,SAAI,OAAM;AACrD,OAAI,GAAM;AAAC,SAAK,SAAS,mBAAmB,EAAI,EAAE,EAAK;AAAE;;AAEzD,OAAI,GAAU;AAAC,SAAK,SAAS,GAAK,EAAS;AAAE;;AAC7C,OAAI,GAAI;AAAC,UAAA,EAAY,EAAG,MAAM,EAAE,EAAE,GAAG;AAAE;;AAEvC,QAAK,IAAM,KAAK,MAAM,KAAK,EAAI,CAAE,OAAA,EAAY,GAAG,GAAG;;;CAKrD,SAAS,GAAc,GAAc;AAEpC,MAAI,UAAU,KAAK,EAAK,EAAE;AAAC,SAAA,EAAY,GAAM,EAAK;AAAE;;EAEpD,IAAMG,IAAc,MAAM,KAAK,EAAK,EAC9B,IAAM,EAAE;AACd,MAAI,SAAS,KAAK,EAAK,EAAE;GACxB,IAAM,IAAS,aAAY,MAAS,MAAK,GAAA,IAAqB,EAAK,OAAO,EAAE;AAC5E,QAAK,IAAM,KAAK,EAAG,OAAA,EAAY,GAAG,EAAO;AACzC;;AAID,MAAI,MAAQ,KAAK,CAAE,EAAK,SAAS,IAAI,EAAE;AACtC,SAAA,EAAY,GAAM,mBAAmB,EAAK,CAAC;AAC3C;;EAID,IAAM,IAAK,EAAK,MAAM,IAAI,EACpB,IAAO,EAAG,QACV,IAAU,IAAO,IAAK,IAAM;AAClC,OAAK,IAAI,IAAE,GAAG,IAAE,GAAS,EAAE,EAAG,OAAA,EAE7B,IAAI,IAAM,EAAE,KAAM,IAElB,IAAI,IAAO,mBAAmB,EAAG,GAAI,GAAG,GACxC"}