palt-typesetting 0.1.11 → 0.4.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 (45) hide show
  1. package/README.md +67 -23
  2. package/bundle/typesetter.min.js +1 -0
  3. package/dist/apply-style.d.ts +3 -2
  4. package/dist/apply-style.d.ts.map +1 -1
  5. package/dist/apply-style.js +37 -34
  6. package/dist/html-processor.d.ts +1 -1
  7. package/dist/html-processor.d.ts.map +1 -1
  8. package/dist/html-processor.js +88 -55
  9. package/dist/index.d.ts +3 -2
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +97 -61
  12. package/dist/insert-separators.d.ts +4 -4
  13. package/dist/insert-separators.d.ts.map +1 -1
  14. package/dist/insert-separators.js +41 -39
  15. package/dist/style/typesetting.css +27 -0
  16. package/dist/{utils-regex.d.ts → util-regex.d.ts} +3 -1
  17. package/dist/util-regex.d.ts.map +1 -0
  18. package/dist/util-regex.js +20 -0
  19. package/dist/util-tags.d.ts +9 -0
  20. package/dist/util-tags.d.ts.map +1 -0
  21. package/dist/util-tags.js +55 -0
  22. package/dist/{utils-text-classes.d.ts → util-text-classes.d.ts} +3 -2
  23. package/dist/util-text-classes.d.ts.map +1 -0
  24. package/dist/util-text-classes.js +98 -0
  25. package/dist/win-browser.js +4 -4
  26. package/dist/win.js +6 -6
  27. package/package.json +20 -12
  28. package/{dist/types → types}/index.d.ts +0 -5
  29. package/dist/apply-style.js.map +0 -1
  30. package/dist/html-processor.js.map +0 -1
  31. package/dist/index.js.map +0 -1
  32. package/dist/insert-separators.js.map +0 -1
  33. package/dist/utils-regex.d.ts.map +0 -1
  34. package/dist/utils-regex.js +0 -10
  35. package/dist/utils-regex.js.map +0 -1
  36. package/dist/utils-tags.d.ts +0 -8
  37. package/dist/utils-tags.d.ts.map +0 -1
  38. package/dist/utils-tags.js +0 -40
  39. package/dist/utils-tags.js.map +0 -1
  40. package/dist/utils-text-classes.d.ts.map +0 -1
  41. package/dist/utils-text-classes.js +0 -78
  42. package/dist/utils-text-classes.js.map +0 -1
  43. package/dist/win-browser.js.map +0 -1
  44. package/dist/win.js.map +0 -1
  45. /package/{dist/types → types}/linebreak.d.ts +0 -0
package/README.md CHANGED
@@ -2,14 +2,16 @@
2
2
 
3
3
  ## Typesetting Library for Proportional Spacing
4
4
 
5
- Palt Typesetting は、美しいテキスト表示を実現するための JavaScript ライブラリです。和欧混植、およびメトリクス詰め(`font-feature-settings: 'palt'`) の版面設計において、最大限の力を発揮します。
5
+ ![a demo of Palt Typesetting](assets/demo.gif)
6
+
7
+ Palt Typesetting は、美しいテキスト表示を実現するための JavaScript ライブラリです。和欧混植、およびツメ組み (`font-feature-settings: 'palt'`) の版面設計において、最大限の力を発揮します。
6
8
 
7
9
  四分アキの自動挿入、カーニングルールの適用、英語のような単語区切りでの改行など、洗練された組版機能を提供します。
8
10
 
9
11
  ## Demo
10
12
 
11
13
  - [Interactive Demo](https://palt.typesetting.jp)
12
- - [Simple Demo in CodeSandbox](https://codesandbox.io/p/sandbox/a-simple-demo-of-palt-typesetting-rptqm7?file=%2Fsrc%2Findex.js%3A12%2C1)
14
+ - [Try on CodePen](https://codepen.io/yamatoiizuka-the-animator/pen/PoLGrZe)
13
15
 
14
16
  ## Getting Started
15
17
 
@@ -29,23 +31,67 @@ const typesetter = new Typesetter()
29
31
  typesetter.renderToSelector('.my-class')
30
32
  ```
31
33
 
32
- ### Apply CSS
34
+ ### Use Typesetter from CDN
35
+
36
+ ```html
37
+ <script src="https://unpkg.com/palt-typesetting@0.4.0/bundle/typesetter.min.js"></script>
38
+ ```
39
+
40
+ ```html
41
+ <script>
42
+ // Typesetter のインスタンスを作成
43
+ const typesetter = new Typesetter()
44
+
45
+ // セレクターにマッチする要素に対して組版を適用
46
+ typesetter.renderToSelector('.my-class')
47
+ </script>
48
+ ```
49
+
50
+ ### Apply CSS (Example)
33
51
 
34
52
  ```css
35
- /* 共通のスタイリング */
53
+ /*
54
+ * 共通のスタイリング(例)
55
+ */
36
56
  .typeset {
57
+ /* プロポーショナルメトリクス(ツメ組み)の設定 */
37
58
  font-feature-settings: 'palt';
38
- letter-spacing: 0.1em;
59
+
60
+ /* 行間 */
39
61
  line-height: 1.8;
62
+
63
+ /* 文字間 */
64
+ letter-spacing: 0.1em;
65
+
66
+ /*
67
+ * Safari のフォントレンダリング対策。
68
+ * 英数(.typeset-latin)で -webkit-text-stroke を使う場合は必須。
69
+ * text-stroke-weight > 0, text-stroke-color: transparent
70
+ */
71
+ -webkit-text-stroke: 0.01em transparent;
40
72
  }
41
73
 
42
- /* 英数のみのスタイリング */
74
+ /*
75
+ * 英数のみのスタイリング(例)
76
+ */
43
77
  .typeset-latin {
78
+ /* フォントの拡大・縮小 */
79
+ font-size: 105%;
80
+
81
+ /* ベースラインの調整 */
82
+ vertical-align: 0.02em;
83
+
84
+ /*
85
+ * 行間の調整。親要素 .typeset の行間と視覚的に合わせます。
86
+ * [.typeset の line-height] ÷ [フォントの拡大率] - [ベースラインの調整値の絶対値] × 2
87
+ */
88
+ line-height: calc(1.8 / 1.05 - 0.02 * 2);
89
+
90
+ /* 文字間の調整 */
44
91
  letter-spacing: 0.05em;
45
92
 
46
- /* 必要に応じて */
47
- font-size: 105%;
48
- line-height: calc(1.8 / 1.05);
93
+ /* 文字の細らせ・太らせ */
94
+ -webkit-text-stroke: 0.01em #000;
49
95
  }
50
96
  ```
51
97
 
@@ -69,7 +115,7 @@ typesetter.renderToElements(elements)
69
115
  // 組版を適用した HTML の取得
70
116
  const srcHtml = '「日本語」とEnglish'
71
117
  console.log(typesetter.render(srcHtml))
72
- // <span class="typeset" /* 中略 */>「日本語」<span class="typeset-thin-space" style="font-size: 50%;" /* 中略 */> </span><wbr>と<span class="typeset-thin-space" style="font-size: 50%;" /* 中略 */> </span><wbr><span class="typeset-latin">English</span></span>
118
+ // <span class="typeset" /* 中略 */>「日本語」<span class="typeset-thin-space" style="font-size: 100%;" /* 中略 */> </span><wbr>と<span class="typeset-thin-space" style="font-size: 100%;" /* 中略 */> </span><wbr><span class="typeset-latin">English</span></span>
73
119
  ```
74
120
 
75
121
  ### Constructor
@@ -92,9 +138,6 @@ console.log(typesetter.render(srcHtml))
92
138
 
93
139
  ```javascript
94
140
  const options = {
95
- // ライブラリで使用される CSS クラス名のプレフィックスを指定します。
96
- classNamePrefix: 'typeset',
97
-
98
141
  // 単語や助詞など、単語区切りでの改行を行います。
99
142
  useWordBreak: true,
100
143
 
@@ -108,17 +151,17 @@ const options = {
108
151
  insertThinSpaces: true,
109
152
 
110
153
  // 四分アキスペースの幅を設定します。
111
- thinSpaceWidth: '50%',
154
+ thinSpaceWidth: '0.2em',
112
155
 
113
156
  // 特定の文字間のカーニングルールを設定します。
114
157
  kerningRules: [
115
158
  {
116
- between: ['す', '。'],
117
- value: '-80',
159
+ between: ['し', 'ま'],
160
+ value: '60',
118
161
  },
119
162
  {
120
- between: ['で', '、'],
121
- value: '-120',
163
+ between: ['す', '。'],
164
+ value: '-80',
122
165
  },
123
166
  ],
124
167
  }
@@ -131,12 +174,11 @@ typesetter.renderToSelector('.my-class')
131
174
 
132
175
  | オプション名 | 説明 | 型 | デフォルト値 |
133
176
  | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------- | ------------ |
134
- | `classNamePrefix` | ライブラリで使用される CSS クラス名のプレフィックスを指定します。 | `string` | `'typeset' ` |
135
177
  | `useWordBreak` | 単語や助詞など、単語区切りでの改行を行います。 | `boolean` | `true` |
136
178
  | `wrapLatin` | 英数を `span.typeset-latin` でラップします。<br>`useWordBreak` が `true` の場合にのみ有効です。 | `boolean` | `true` |
137
179
  | `noSpaceBetweenNoBreaks` | 罫線などの分離禁則文字を `span.typeset-no-breaks` でラップし、文字間を 0 に設定します。<br>`useWordBreak` が `true` の場合にのみ有効です。 | `boolean` | `true` |
138
180
  | `insertThinSpaces` | 四分アキスペースを自動で挿入します。 | `boolean` | `true` |
139
- | `thinSpaceWidth` | 四分アキスペースの幅を設定します。<br>`insertThinSpaces` が `true` の場合にのみ有効です。 | `string` | `'50%' ` |
181
+ | `thinSpaceWidth` | 四分アキスペースの幅を設定します。<br>`insertThinSpaces` が `true` の場合にのみ有効です。 | `string` | `'100%' ` |
140
182
  | `kerningRules` | 特定の文字間のカーニングルールを設定します。 | `{between: [string, string], value: string \| number}[]` | `[]` |
141
183
 
142
184
  ## Notes
@@ -148,9 +190,11 @@ Palt Typesetting ライブラリは、テキストを言語固有のセグメン
148
190
  - Node.js: 16.0.0 以上
149
191
  - ブラウザ: Intl.Segmenter をサポートしているブラウザ
150
192
 
151
- クライアントサイドで実行する場合、この機能は一部のブラウザで利用できません。Palt Typesetting ライブラリは、`Intl.Segmenter` がサポートされていない環境では組版処理をスキップし、元のテキストをそのまま返します。
193
+ クライアントサイドで実行する場合、この機能は一部のブラウザで利用できません。Palt Typesetting ライブラリは、Firefox などの `Intl.Segmenter` がサポートされていない環境[^1] では組版処理をスキップし、元のテキストをそのまま返します。全てのモダンブラウザで同様の見え方を再現するには、サーバーサイドでの処理(SSG など)が必要になります。
194
+
195
+ `Intl.Segmenter` の対応状況については、[Can I use...](https://caniuse.com/?search=Intl.Segmenter) で確認できます。
152
196
 
153
- `Intl.Segmenter` の対応状況については、[MDN Web Docs](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter) で確認できます。
197
+ [^1]: Firefox では、バージョン 125 から Intl.Segmenter のサポートが予定されています。
154
198
 
155
199
  ### 注意事項
156
200
 
@@ -158,4 +202,4 @@ Palt Typesetting ライブラリは HTML 入力をサポートしていますが
158
202
 
159
203
  ## Author
160
204
 
161
- 飯塚 大和 (Yamato Iizuka)
205
+ [飯塚 大和 (Yamato Iizuka)](https://yamatoiizuka.com)
@@ -0,0 +1 @@
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.Typesetter=t():e.Typesetter=t()}(this,(()=>(()=>{var e={954:(e,t)=>{!function(e){"use strict";var t="undefined"!=typeof Uint8Array?Uint8Array:Array,r="+".charCodeAt(0),n="/".charCodeAt(0),u="0".charCodeAt(0),o="a".charCodeAt(0),a="A".charCodeAt(0),s="-".charCodeAt(0),i="_".charCodeAt(0);function A(e){var t=e.charCodeAt(0);return t===r||t===s?62:t===n||t===i?63:t<u?-1:t<u+10?t-u+26+26:t<a+26?t-a:t<o+26?t-o+26:void 0}e.toByteArray=function(e){var r,n,u,o,a,s;if(e.length%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var i=e.length;a="="===e.charAt(i-2)?2:"="===e.charAt(i-1)?1:0,s=new t(3*e.length/4-a),u=a>0?e.length-4:e.length;var c=0;function f(e){s[c++]=e}for(r=0,n=0;r<u;r+=4,n+=3)f((16711680&(o=A(e.charAt(r))<<18|A(e.charAt(r+1))<<12|A(e.charAt(r+2))<<6|A(e.charAt(r+3))))>>16),f((65280&o)>>8),f(255&o);return 2===a?f(255&(o=A(e.charAt(r))<<2|A(e.charAt(r+1))>>4)):1===a&&(f((o=A(e.charAt(r))<<10|A(e.charAt(r+1))<<4|A(e.charAt(r+2))>>2)>>8&255),f(255&o)),s},e.fromByteArray=function(e){var t,r,n,u,o=e.length%3,a="";function s(e){return"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(e)}for(t=0,n=e.length-o;t<n;t+=3)a+=s((u=r=(e[t]<<16)+(e[t+1]<<8)+e[t+2])>>18&63)+s(u>>12&63)+s(u>>6&63)+s(63&u);switch(o){case 1:a+=s((r=e[e.length-1])>>2),a+=s(r<<4&63),a+="==";break;case 2:a+=s((r=(e[e.length-2]<<8)+e[e.length-1])>>10),a+=s(r>>4&63),a+=s(r<<2&63),a+="="}return a}}(t)},297:(e,t,r)=>{"use strict";r.d(t,{A:()=>l});var n=r(601),u=r.n(n),o=r(314),a=r.n(o),s=r(417),i=r.n(s),A=new URL(r(539),r.b),c=a()(u()),f=i()(A);c.push([e.id,`@font-face {\n /* \n * カスタムフォント: 1/10000 UPM 幅のスペースとノンブレーキングスペースを定義。\n * 注意:完全なゼロ幅スペースを使用すると、Safari では letter-spacing が無視される。\n * @sharapeco による貢献に感謝します。{@link https://gist.github.com/sharapeco/1dd7f4433dad07648e1325e1fa5926ee}\n */\n font-family: ling-one;\n src: url(${f})\n format('woff2');\n}\n\n.typeset-word-break {\n word-break: keep-all;\n overflow-wrap: anywhere;\n}\n\n.typeset-thin-space,\n.typeset-kerning {\n font-family: ling-one; /* カスタムフォントのスペースを使用します。 */\n line-height: 0; /* 空白による行の高さの影響を無視します。 */\n letter-spacing: 0; /* 親要素から継承される letter-spacing の影響を無視します。 */\n user-select: none; /* ユーザーによるテキストのコピーを無効にします。 */\n}\n\n.typeset-no-breaks {\n letter-spacing: 0; /* 親要素から継承される letter-spacing の影響を無視します。 */\n}\n`,""]);const l=c},314:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var r="",n=void 0!==t[5];return t[4]&&(r+="@supports (".concat(t[4],") {")),t[2]&&(r+="@media ".concat(t[2]," {")),n&&(r+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),r+=e(t),n&&(r+="}"),t[2]&&(r+="}"),t[4]&&(r+="}"),r})).join("")},t.i=function(e,r,n,u,o){"string"==typeof e&&(e=[[null,e,void 0]]);var a={};if(n)for(var s=0;s<this.length;s++){var i=this[s][0];null!=i&&(a[i]=!0)}for(var A=0;A<e.length;A++){var c=[].concat(e[A]);n&&a[c[0]]||(void 0!==o&&(void 0===c[5]||(c[1]="@layer".concat(c[5].length>0?" ".concat(c[5]):""," {").concat(c[1],"}")),c[5]=o),r&&(c[2]?(c[1]="@media ".concat(c[2]," {").concat(c[1],"}"),c[2]=r):c[2]=r),u&&(c[4]?(c[1]="@supports (".concat(c[4],") {").concat(c[1],"}"),c[4]=u):c[4]="".concat(u)),t.push(c))}},t}},417:e=>{"use strict";e.exports=function(e,t){return t||(t={}),e?(e=String(e.__esModule?e.default:e),/^['"].*['"]$/.test(e)&&(e=e.slice(1,-1)),t.hash&&(e+=t.hash),/["'() \t\n]|(%20)/.test(e)||t.needQuotes?'"'.concat(e.replace(/"/g,'\\"').replace(/\n/g,"\\n"),'"'):e):e}},601:e=>{"use strict";e.exports=function(e){return e[1]}},72:e=>{"use strict";var t=[];function r(e){for(var r=-1,n=0;n<t.length;n++)if(t[n].identifier===e){r=n;break}return r}function n(e,n){for(var o={},a=[],s=0;s<e.length;s++){var i=e[s],A=n.base?i[0]+n.base:i[0],c=o[A]||0,f="".concat(A," ").concat(c);o[A]=c+1;var l=r(f),p={css:i[1],media:i[2],sourceMap:i[3],supports:i[4],layer:i[5]};if(-1!==l)t[l].references++,t[l].updater(p);else{var h=u(p,n);n.byIndex=s,t.splice(s,0,{identifier:f,updater:h,references:1})}a.push(f)}return a}function u(e,t){var r=t.domAPI(t);return r.update(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap&&t.supports===e.supports&&t.layer===e.layer)return;r.update(e=t)}else r.remove()}}e.exports=function(e,u){var o=n(e=e||[],u=u||{});return function(e){e=e||[];for(var a=0;a<o.length;a++){var s=r(o[a]);t[s].references--}for(var i=n(e,u),A=0;A<o.length;A++){var c=r(o[A]);0===t[c].references&&(t[c].updater(),t.splice(c,1))}o=i}}},659:e=>{"use strict";var t={};e.exports=function(e,r){var n=function(e){if(void 0===t[e]){var r=document.querySelector(e);if(window.HTMLIFrameElement&&r instanceof window.HTMLIFrameElement)try{r=r.contentDocument.head}catch(e){r=null}t[e]=r}return t[e]}(e);if(!n)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");n.appendChild(r)}},540:e=>{"use strict";e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},56:(e,t,r)=>{"use strict";e.exports=function(e){var t=r.nc;t&&e.setAttribute("nonce",t)}},825:e=>{"use strict";e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(r){!function(e,t,r){var n="";r.supports&&(n+="@supports (".concat(r.supports,") {")),r.media&&(n+="@media ".concat(r.media," {"));var u=void 0!==r.layer;u&&(n+="@layer".concat(r.layer.length>0?" ".concat(r.layer):""," {")),n+=r.css,u&&(n+="}"),r.media&&(n+="}"),r.supports&&(n+="}");var o=r.sourceMap;o&&"undefined"!=typeof btoa&&(n+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),t.styleTagTransform(n,e,t.options)}(t,e,r)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},113:e=>{"use strict";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},741:e=>{function t(){this.table=new Uint16Array(16),this.trans=new Uint16Array(288)}function r(e,r){this.source=e,this.sourceIndex=0,this.tag=0,this.bitcount=0,this.dest=r,this.destLen=0,this.ltree=new t,this.dtree=new t}var n=new t,u=new t,o=new Uint8Array(30),a=new Uint16Array(30),s=new Uint8Array(30),i=new Uint16Array(30),A=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),c=new t,f=new Uint8Array(320);function l(e,t,r,n){var u,o;for(u=0;u<r;++u)e[u]=0;for(u=0;u<30-r;++u)e[u+r]=u/r|0;for(o=n,u=0;u<30;++u)t[u]=o,o+=1<<e[u]}var p=new Uint16Array(16);function h(e,t,r,n){var u,o;for(u=0;u<16;++u)e.table[u]=0;for(u=0;u<n;++u)e.table[t[r+u]]++;for(e.table[0]=0,o=0,u=0;u<16;++u)p[u]=o,o+=e.table[u];for(u=0;u<n;++u)t[r+u]&&(e.trans[p[t[r+u]]++]=u)}function d(e){e.bitcount--||(e.tag=e.source[e.sourceIndex++],e.bitcount=7);var t=1&e.tag;return e.tag>>>=1,t}function b(e,t,r){if(!t)return r;for(;e.bitcount<24;)e.tag|=e.source[e.sourceIndex++]<<e.bitcount,e.bitcount+=8;var n=e.tag&65535>>>16-t;return e.tag>>>=t,e.bitcount-=t,n+r}function v(e,t){for(;e.bitcount<24;)e.tag|=e.source[e.sourceIndex++]<<e.bitcount,e.bitcount+=8;var r=0,n=0,u=0,o=e.tag;do{n=2*n+(1&o),o>>>=1,++u,r+=t.table[u],n-=t.table[u]}while(n>=0);return e.tag=o,e.bitcount-=u,t.trans[r+n]}function y(e,t,r){var n,u,o,a,s,i;for(n=b(e,5,257),u=b(e,5,1),o=b(e,4,4),a=0;a<19;++a)f[a]=0;for(a=0;a<o;++a){var l=b(e,3,0);f[A[a]]=l}for(h(c,f,0,19),s=0;s<n+u;){var p=v(e,c);switch(p){case 16:var d=f[s-1];for(i=b(e,2,3);i;--i)f[s++]=d;break;case 17:for(i=b(e,3,3);i;--i)f[s++]=0;break;case 18:for(i=b(e,7,11);i;--i)f[s++]=0;break;default:f[s++]=p}}h(t,f,0,n),h(r,f,n,u)}function g(e,t,r){for(;;){var n,u,A,c,f=v(e,t);if(256===f)return 0;if(f<256)e.dest[e.destLen++]=f;else for(n=b(e,o[f-=257],a[f]),u=v(e,r),c=A=e.destLen-b(e,s[u],i[u]);c<A+n;++c)e.dest[e.destLen++]=e.dest[c]}}function D(e){for(var t,r;e.bitcount>8;)e.sourceIndex--,e.bitcount-=8;if((t=256*(t=e.source[e.sourceIndex+1])+e.source[e.sourceIndex])!==(65535&~(256*e.source[e.sourceIndex+3]+e.source[e.sourceIndex+2])))return-3;for(e.sourceIndex+=4,r=t;r;--r)e.dest[e.destLen++]=e.source[e.sourceIndex++];return e.bitcount=0,0}!function(e,t){var r;for(r=0;r<7;++r)e.table[r]=0;for(e.table[7]=24,e.table[8]=152,e.table[9]=112,r=0;r<24;++r)e.trans[r]=256+r;for(r=0;r<144;++r)e.trans[24+r]=r;for(r=0;r<8;++r)e.trans[168+r]=280+r;for(r=0;r<112;++r)e.trans[176+r]=144+r;for(r=0;r<5;++r)t.table[r]=0;for(t.table[5]=32,r=0;r<32;++r)t.trans[r]=r}(n,u),l(o,a,4,3),l(s,i,2,1),o[28]=0,a[28]=258,e.exports=function(e,t){var o,a,s=new r(e,t);do{switch(o=d(s),b(s,2,0)){case 0:a=D(s);break;case 1:a=g(s,n,u);break;case 2:y(s,s.ltree,s.dtree),a=g(s,s.ltree,s.dtree);break;default:a=-3}if(0!==a)throw new Error("Data error")}while(!o);return s.destLen<s.dest.length?"function"==typeof s.dest.slice?s.dest.slice(0,s.destLen):s.dest.subarray(0,s.destLen):s.dest}},667:(e,t,r)=>{const n=r(741),{swap32LE:u}=r(288);e.exports=class{constructor(e){const t="function"==typeof e.readUInt32BE&&"function"==typeof e.slice;if(t||e instanceof Uint8Array){let r;if(t)this.highStart=e.readUInt32LE(0),this.errorValue=e.readUInt32LE(4),r=e.readUInt32LE(8),e=e.slice(12);else{const t=new DataView(e.buffer);this.highStart=t.getUint32(0,!0),this.errorValue=t.getUint32(4,!0),r=t.getUint32(8,!0),e=e.subarray(12)}e=n(e,new Uint8Array(r)),e=n(e,new Uint8Array(r)),u(e),this.data=new Uint32Array(e.buffer)}else({data:this.data,highStart:this.highStart,errorValue:this.errorValue}=e)}get(e){let t;return e<0||e>1114111?this.errorValue:e<55296||e>56319&&e<=65535?(t=(this.data[e>>5]<<2)+(31&e),this.data[t]):e<=65535?(t=(this.data[2048+(e-55296>>5)]<<2)+(31&e),this.data[t]):e<this.highStart?(t=this.data[2080+(e>>11)],t=this.data[t+(e>>5&63)],t=(t<<2)+(31&e),this.data[t]):this.data[this.data.length-4]}}},288:e=>{const t=18===new Uint8Array(new Uint32Array([305419896]).buffer)[0],r=(e,t,r)=>{let n=e[t];e[t]=e[r],e[r]=n};e.exports={swap32LE:e=>{t&&(e=>{const t=e.length;for(let n=0;n<t;n+=4)r(e,n,n+3),r(e,n+1,n+2)})(e)}}},539:e=>{"use strict";e.exports="data:font/woff2;base64,AAEAAAAKAIAAAwAgT1MvMhG03xcAAAEoAAAAYGNtYXAADABzAAABkAAAADRnbHlmJAM2GwAAAcwAAAAYaGVhZCLbfFwAAACsAAAANmhoZWEnEvkrAAAA5AAAACRobXR4AAEAAAAAAYgAAAAIbG9jYQAMABgAAAHEAAAACG1heHAAcQAiAAABCAAAACBuYW1lBbsdPAAAAeQAAACKcG9zdHQrY6cAAAJwAAAALQABAAAAAQAAsWqD8F8PPPUAAycQAAAAAOHcugAAAAAA4edeTwAAAAAAAQABAAAABwACAAAAAAAAAAEAACcQ+DAAAAB9AAAAfAABAAEAAAAAAAAAAAAAAAAAAAABAAEAAAADAAMAAQAAAAAAAQACAB4ABgAAAGQAAAAAAAAAAwB9AZAABQAIGWQXcAAAAu4ZZBdwAAANrAAyC7gAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc3N6bQBAACAAIB9A+DAH0CcQB9AAAAABAAAAABOIG1gAAAAgAAAAAQAAAAAAAAAAAAIAAAADAAAAFAADAAEAAAAUAAQAIAAAAAQABAABAAAAIP//AAAAIP///+EAAQAAAAAAAAAMAAwADAABAAAAAAABAAEAAgAANRcjAQEBAQAAAAAAAAYATgADAAEECQABAAgAAAADAAEECQACAAIACAADAAEECQADAB4ACgADAAEECQAEAAwAKAADAAEECQAFAAgANAADAAEECQAGAAwAKABMAGkAbgBnADEAMQAuADAAOwBzAHMAegBtADsATABpAG4AZwAtADEATABpAG4AZwAtADEAdgAxAC4AMAAAAAIAAAAAAAD/tQAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMBAgRuYnNwAAAA"}},t={};function r(n){var u=t[n];if(void 0!==u)return u.exports;var o=t[n]={id:n,exports:{}};return e[n](o,o.exports,r),o.exports}r.m=e,r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.b=document.baseURI||self.location.href,r.nc=void 0;var n={};return(()=>{"use strict";r.d(n,{default:()=>ae});var e=window;function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t(e)}function u(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,o(n.key),n)}}function o(e){var r=function(e,r){if("object"!=t(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var u=n.call(e,"string");if("object"!=t(u))return u;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==t(r)?r:String(r)}var a,s=function(){function t(r,n){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),this.replaceNode=function(t,r){var n=e.document.createRange();n.selectNode(t);var u=n.createContextualFragment(r);t.parentNode&&(t.parentNode.insertBefore(u,t),t.parentNode.removeChild(t))},this.transformFunctions=r,this.options=n}var r,n;return r=t,(n=[{key:"processHtmlWithFunctions",value:function(e){var t=this;return""===e?e:this.transformFunctions.reduce((function(e,r){return t.processHtml(e,r)}),e)}},{key:"processHtml",value:function(e,t){var r=this;if(""===e)return e;var n=i(e),u=A(n.body);return u.forEach((function(e,n){var o=u[n+1]||null,a=r.getTransformedHtml(e,o,t);r.replaceNode(e,a)})),n.body.innerHTML}},{key:"getTransformedHtml",value:function(e,t,r){return r(e.nodeValue||"",t&&t.nodeValue||"",this.options)}}])&&u(r.prototype,n),Object.defineProperty(r,"prototype",{writable:!1}),t}(),i=function(t){return(new e.DOMParser).parseFromString(t,"text/html")},A=function(t){for(var r=e.document.createTreeWalker(t,e.NodeFilter.SHOW_TEXT),n=r.nextNode(),u=[];n;)n.nodeValue&&""!==n.nodeValue.trim()&&u.push(n),n=r.nextNode();return u},c=s,f=r(667),l=r(954);const p=[[4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4],[0,4,4,1,1,4,4,4,4,1,1,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[0,4,4,1,1,4,4,4,4,1,1,1,1,1,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[4,4,4,1,1,1,4,4,4,1,1,1,1,1,1,1,1,1,1,1,4,2,4,1,1,1,1,1,1,1,1,1,1],[1,4,4,1,1,1,4,4,4,1,1,1,1,1,1,1,1,1,1,1,4,2,4,1,1,1,1,1,1,1,1,1,1],[0,4,4,1,1,1,4,4,4,0,0,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[0,4,4,1,1,1,4,4,4,0,0,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[0,4,4,1,1,1,4,4,4,0,0,1,0,1,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[0,4,4,1,1,1,4,4,4,0,0,1,1,1,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[1,4,4,1,1,1,4,4,4,0,0,1,1,1,1,1,1,1,0,0,4,2,4,1,1,1,1,1,0,1,1,1,0],[1,4,4,1,1,1,4,4,4,0,0,1,1,1,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[1,4,4,1,1,1,4,4,4,1,1,1,1,1,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[1,4,4,1,1,1,4,4,4,1,1,1,1,1,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[1,4,4,1,1,1,4,4,4,1,1,1,1,1,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[0,4,4,1,1,1,4,4,4,0,1,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[0,4,4,1,1,1,4,4,4,0,0,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[0,4,4,1,0,1,4,4,4,0,0,1,0,0,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[0,4,4,1,0,1,4,4,4,0,0,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[1,4,4,1,1,1,4,4,4,1,1,1,1,1,1,1,1,1,1,1,4,2,4,1,1,1,1,1,1,1,1,1,0],[0,4,4,1,1,1,4,4,4,0,0,0,0,0,0,1,1,1,0,4,4,2,4,0,0,0,0,0,0,0,0,1,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0],[1,4,4,1,1,1,4,4,4,1,1,1,1,1,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[1,4,4,1,1,1,4,4,4,1,1,1,1,1,1,1,1,1,1,1,4,2,4,1,1,1,1,1,1,1,1,1,1],[0,4,4,1,1,1,4,4,4,0,1,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,1,1,0,0,0,1,0],[0,4,4,1,1,1,4,4,4,0,1,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,0,1,0,0,0,1,0],[0,4,4,1,1,1,4,4,4,0,1,0,0,0,0,1,1,1,0,0,4,2,4,1,1,1,1,0,0,0,0,1,0],[0,4,4,1,1,1,4,4,4,0,1,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,1,1,0,0,0,1,0],[0,4,4,1,1,1,4,4,4,0,1,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,0,1,0,0,0,1,0],[0,4,4,1,1,1,4,4,4,0,0,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,0,0,1,0,0,1,0],[0,4,4,1,1,1,4,4,4,0,1,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,1,1,0],[0,4,4,1,1,1,4,4,4,0,1,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[1,4,4,1,1,1,4,4,4,1,1,1,1,1,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[0,4,4,1,1,0,4,4,4,0,0,0,0,0,0,0,0,0,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0]],h=new f(l.toByteArray("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")),d=function(e){switch(e){case 33:case 39:case 40:case 42:return 12;case 35:return 5;default:return e}},b=function(e){switch(e){case 37:case 38:return 34;case 41:return 22;default:return e}};class v{constructor(e,t=!1){this.position=e,this.required=t}}a=class{nextCodePoint(){const e=this.string.charCodeAt(this.pos++),t=this.string.charCodeAt(this.pos);return 55296<=e&&e<=56319&&56320<=t&&t<=57343?(this.pos++,1024*(e-55296)+(t-56320)+65536):e}nextCharClass(){return d(h.get(this.nextCodePoint()))}getSimpleBreak(){switch(this.nextClass){case 41:return!1;case 34:case 37:case 38:return this.curClass=34,!1;case 36:return this.curClass=36,!1}return null}getPairTableBreak(e){let t=!1;switch(p[this.curClass][this.nextClass]){case 0:t=!0;break;case 1:t=41===e;break;case 2:if(t=41===e,!t)return t=!1,t;break;case 3:if(41!==e)return t}return this.LB8a&&(t=!1),!this.LB21a||16!==this.curClass&&17!==this.curClass?this.LB21a=13===this.curClass:(t=!1,this.LB21a=!1),28===this.curClass?(this.LB30a++,2==this.LB30a&&28===this.nextClass&&(t=!0,this.LB30a=0)):this.LB30a=0,this.curClass=this.nextClass,t}nextBreak(){if(null==this.curClass){let e=this.nextCharClass();this.curClass=b(e),this.nextClass=e,this.LB8a=31===e,this.LB30a=0}for(;this.pos<this.string.length;){this.lastPos=this.pos;const e=this.nextClass;if(this.nextClass=this.nextCharClass(),34===this.curClass||36===this.curClass&&37!==this.nextClass)return this.curClass=b(d(this.nextClass)),new v(this.lastPos,!0);let t=this.getSimpleBreak();if(null===t&&(t=this.getPairTableBreak(e)),this.LB8a=31===this.nextClass,t)return new v(this.lastPos)}return this.lastPos<this.string.length?(this.lastPos=this.string.length,new v(this.string.length)):null}constructor(e){this.string=e,this.pos=0,this.lastPos=0,this.curClass=null,this.nextClass=null,this.LB8a=!1,this.LB21a=!1,this.LB30a=0}};var y=/(?:[\t-\r -~\xA0-\xA5\xAA\xAC\xB1-\xB3\xB9\xBA\xBF-\u02B8\u02E0-\u02E4\u0363-\u036F\u0485\u0486\u0951\u0952\u10FB\u1680\u1D00-\u1D25\u1D2C-\u1D5C\u1D62-\u1D65\u1D6B-\u1D77\u1D79-\u1DBE\u1E00-\u1EFF\u2000-\u200A\u2018\u2019\u201C\u201D\u2028\u2029\u202F\u2030\u205F\u2070\u2071\u2074-\u208E\u2090-\u209C\u20AC\u20F0\u212A\u212B\u2132\u214E\u2160-\u2188\u2202\u2205\u220F\u2211\u2212\u221A\u221E\u222B\u2248\u2260\u2264\u2265\u2C60-\u2C7F\u3000\uA700-\uA707\uA722-\uA787\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA7FF\uA92E\uAB30-\uAB5A\uAB5C-\uAB64\uAB66-\uAB69\uFB00-\uFB06\uFEFF\uFF21-\uFF3A\uFF41-\uFF5A]|\uD801[\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD837[\uDF00-\uDF1E\uDF25-\uDF2A])+/,g=/(?:[\|\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u3001-\u3003\u3005-\u3011\u3013-\u301F\u3021-\u302D\u3030-\u3035\u3037-\u303F\u3041-\u3096\u3099-\u30FF\u3190-\u319F\u31C0-\u31E3\u31F0-\u31FF\u3220-\u3247\u3280-\u32B0\u32C0-\u32CB\u32D0-\u3370\u337B-\u337F\u33E0-\u33FE\u3400-\u4DBF\u4E00-\u9FFF\uA700-\uA707\uF900-\uFA6D\uFA70-\uFAD9\uFE45\uFE46\uFF61-\uFF9F]|\uD81B[\uDFE2\uDFE3\uDFF0\uDFF1]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67]|\uD834[\uDF60-\uDF71]|\uD83C[\uDE00\uDE50\uDE51]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD887][\uDC00-\uDFFF]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF39\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0\uDFF0-\uDFFF]|\uD87B[\uDC00-\uDE5D]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD888[\uDC00-\uDFAF])+/,D=/(|[|{|〔|〈|《|「|『|【|〘|〖|“|‘/,m=/)|]|}|〕|〉|》|」|』|】|〙|〗|”|’/,F=/・|:|;/,w=/、|,/,B=/。|./,C=new RegExp("[".concat("—‥…_",String.fromCharCode(9472),"-").concat(String.fromCharCode(9599),"]+")),E={isLatin:function(e){return y.test(e)},isJapanese:function(e){return g.test(e)},hasLanguageTransition:function(e,t){return E.isJapanese(e)!==E.isJapanese(t)},shouldAddThinSpace:function(e,t){return E.hasLanguageTransition(e,t)&&(r=t,!new RegExp("^[".concat(B.source).concat(w.source,"]")).test(r));var r}},P=r(72),x=r.n(P),S=r(825),O=r.n(S),L=r(659),j=r.n(L),H=r(56),T=r.n(H),k=r(540),X=r.n(k),I=r(113),U=r.n(I),W=r(297),z={};z.styleTagTransform=U(),z.setAttributes=T(),z.insert=j().bind(null,"head"),z.domAPI=O(),z.insertStyleElement=X(),x()(W.A,z),W.A&&W.A.locals&&W.A.locals;var N=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],u=r?' style="'.concat(r,'"'):"",o=n?' aria-hidden="true" data-nosnippet=""':"";return'<span class="'.concat(t,'"').concat(u).concat(o,">").concat(e,"</span>")},V=function(e){var t=new Intl.Segmenter("ja-JP",{granularity:"word"});return Array.from(t.segment(e),(function(e){return e.segment}))},Q=function(e,t){return E.shouldAddThinSpace(e,t)||function(e,t){for(var r=new RegExp("(".concat(m.source,"|").concat(w.source,"|").concat(B.source,")")),n={spaceBefore:{regex:D,hasSpaceBefore:!0,hasSpaceAfter:!1},spaceAfter:{regex:r,hasSpaceBefore:!1,hasSpaceAfter:!0},spaceBoth:{regex:F,hasSpaceBefore:!0,hasSpaceAfter:!0}},u=0,o=Object.values(n);u<o.length;u++){var a=o[u],s=a.regex,i=a.hasSpaceBefore,A=a.hasSpaceAfter;if(i&&s.test(t)&&!s.test(e))return!0;if(A&&s.test(e)&&!s.test(t))return!0}return!1}(e,t)},M=function(e,t){var r=e.slice(-1)+t.slice(0,1),n=new a(r).nextBreak();return!!n&&1===n.position},Z=function(e,t,r){var n=V(e),u=V(t);return n.reduce((function(e,t,n,o){return e+function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r=arguments.length>2?arguments[2]:void 0;if(!t)return e;var n=r.insertThinSpaces&&Q(e,t),u=M(e,t);return n?e+function(e,t){var r=t?" ":"&nbsp;",n="letter-spacing: ".concat(e,";");return N(r,"typeset-thin-space",n,!0)}(r.thinSpaceWidth,u):r.useWordBreak&&u?e+"<wbr>":e}(t,o[n+1]||u[0],r)}),"")};function R(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}var G=function(e,t,r){return" "===e?e:(n=e,u="typeset",o=r.useWordBreak?"".concat(u," ").concat("typeset-word-break"):u,N(n,o));var n,u,o},q=function(e,t,r){return" "===e?e:r.wrapLatin&&E.isLatin(e)?e.replace(y,(function(e){return N(e,"typeset-latin")})):r.noSpaceBetweenNoBreaks&&(n=e,C.test(n))?e.replace(C,(function(e){return N(e,"typeset-no-breaks")})):e;var n},K=function(e,t,r){var n,u=function(e){if(Array.isArray(e))return R(e)}(n=e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(n)||function(e,t){if(e){if("string"==typeof e)return R(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?R(e,t):void 0}}(n)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}();return u.map((function(e,n){var o=u[n+1]||t[0]||"",a=r.kerningRules.find((function(t){return t.between[0]===e&&t.between[1]===o}));if(a){var s="number"==typeof a.value?a.value:parseInt(a.value,10),i=!r.useWordBreak&&M(e,o);return e+function(e,t){if(0===e)return"";var r="typeset-kerning";if(e<0){var n="margin: ".concat(e/1e3/2+"em",";");return N("",r,n,!0)}var u=t?" ":"&nbsp;",o="letter-spacing: ".concat(e/1e3+"em",";");return N(u,r,o,!0)}(s,i)}return e})).join("")};function J(e){return J="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},J(e)}function Y(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function _(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Y(Object(r),!0).forEach((function(t){var n,u,o;n=e,u=t,o=r[t],(u=ee(u))in n?Object.defineProperty(n,u,{value:o,enumerable:!0,configurable:!0,writable:!0}):n[u]=o})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Y(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function $(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,ee(n.key),n)}}function ee(e){var t=function(e,t){if("object"!=J(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,"string");if("object"!=J(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==J(t)?t:String(t)}function te(e,t,r){return t=ne(t),function(e,t){if(t&&("object"===J(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,re()?Reflect.construct(t,r||[],ne(e).constructor):t.apply(e,r))}function re(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(re=function(){return!!e})()}function ne(e){return ne=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},ne(e)}function ue(e,t){return ue=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},ue(e,t)}var oe=function(t){function r(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,r);var n=[G,Z,q,K],u=r.validateOptions(t);return(e=te(this,r,[n,u])).isIntlSegmenterSupported=void 0!==Intl.Segmenter,e.isIntlSegmenterSupported||console.warn("\n Intl.Segmenter is not supported in this environment. \n The original HTML string will be returned. \n For more information, see: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter\n "),e}var n,u,o;return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&ue(e,t)}(r,t),n=r,o=[{key:"getDefaultOptions",value:function(){return{useWordBreak:!0,wrapLatin:!0,noSpaceBetweenNoBreaks:!0,insertThinSpaces:!0,thinSpaceWidth:"0.2em",kerningRules:[]}}},{key:"validateOptions",value:function(e){return e.kerningRules&&(e.kerningRules=e.kerningRules.filter(r.isValidKerningRule)),_(_({},r.getDefaultOptions()),e)}},{key:"isValidKerningRule",value:function(e){return 1===e.between[0].length&&1===e.between[1].length||(console.warn("Kerning rule between '".concat(e.between[0],"' and '").concat(e.between[1],"' must be single characters.")),!1)}}],(u=[{key:"render",value:function(e){return this.isIntlSegmenterSupported&&e?this.processHtmlWithFunctions(e):e}},{key:"renderToElements",value:function(e){var t=this;this.isIntlSegmenterSupported&&e&&(Array.isArray(e)||(e=[e]),e.forEach((function(e){var r=t.render(e.innerHTML);e.innerHTML=r})))}},{key:"renderToSelector",value:function(t){if(this.isIntlSegmenterSupported&&t){var r=e.document.querySelectorAll(t);this.renderToElements(Array.from(r))}}}])&&$(n.prototype,u),o&&$(n,o),Object.defineProperty(n,"prototype",{writable:!1}),r}(c),ae=oe})(),n.default})()));
@@ -1,5 +1,6 @@
1
- import { TypesettingOptions } from './types';
1
+ import { TypesettingOptions } from '../types';
2
2
  declare const applyStyleToText: (currentNodeValue: string, nextNodeValue: string, options: TypesettingOptions) => string;
3
3
  declare const applyStyleToSegment: (currentSegment: string, nextSegment: string, options: TypesettingOptions) => string;
4
- export { applyStyleToText, applyStyleToSegment };
4
+ declare const applyKerningToSegment: (currentSegment: string, nextSegment: string, options: TypesettingOptions) => string;
5
+ export { applyStyleToText, applyStyleToSegment, applyKerningToSegment };
5
6
  //# sourceMappingURL=apply-style.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"apply-style.d.ts","sourceRoot":"","sources":["../src/apply-style.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAQ5C,QAAA,MAAM,gBAAgB,qBAAsB,MAAM,iBAAiB,MAAM,WAAW,kBAAkB,KAAG,MAOxG,CAAA;AAUD,QAAA,MAAM,mBAAmB,mBAAoB,MAAM,eAAe,MAAM,WAAW,kBAAkB,KAAG,MAmBvG,CAAA;AA8BD,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,CAAA"}
1
+ {"version":3,"file":"apply-style.d.ts","sourceRoot":"","sources":["../src/apply-style.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAQ7C,QAAA,MAAM,gBAAgB,qBAAsB,MAAM,iBAAiB,MAAM,WAAW,kBAAkB,KAAG,MAOxG,CAAA;AAUD,QAAA,MAAM,mBAAmB,mBAAoB,MAAM,eAAe,MAAM,WAAW,kBAAkB,KAAG,MAiBvG,CAAA;AAUD,QAAA,MAAM,qBAAqB,mBAAoB,MAAM,eAAe,MAAM,WAAW,kBAAkB,KAAG,MAmBzG,CAAA;AAED,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,CAAA"}
@@ -1,40 +1,43 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.applyStyleToSegment = exports.applyStyleToText = void 0;
4
- const utils_text_classes_1 = require("./utils-text-classes");
5
- const utils_tags_1 = require("./utils-tags");
1
+ import { isBreakable } from "./insert-separators";
2
+ import { CharClass, LanguageClass } from "./util-text-classes";
3
+ import { applyWrapperStyle, applyLatinStyle, applyNoBreaksStyle, createKerning } from "./util-tags";
4
+ import * as util from "./util-regex";
6
5
  const applyStyleToText = (currentNodeValue, nextNodeValue, options) => {
7
- if (currentNodeValue === ' ') {
8
- return currentNodeValue;
9
- }
10
- return (0, utils_tags_1.applyWrapperStyle)(currentNodeValue, options.classNamePrefix, options.useWordBreak);
6
+ if (currentNodeValue === " ") {
7
+ return currentNodeValue;
8
+ }
9
+ return applyWrapperStyle(currentNodeValue, options.useWordBreak);
11
10
  };
12
- exports.applyStyleToText = applyStyleToText;
13
11
  const applyStyleToSegment = (currentSegment, nextSegment, options) => {
14
- if (currentSegment === ' ') {
15
- return currentSegment;
16
- }
17
- const kernedSegment = applyKerningToSegment(currentSegment, nextSegment, options);
18
- if (options.wrapLatin && utils_text_classes_1.LanguageClass.isLatin(currentSegment)) {
19
- return (0, utils_tags_1.applyLatinStyle)(kernedSegment, options.classNamePrefix);
20
- }
21
- if (options.noSpaceBetweenNoBreaks && utils_text_classes_1.CharClass.shouldNotBreak(currentSegment)) {
22
- return (0, utils_tags_1.applyNoBreakStyle)(kernedSegment, options.classNamePrefix);
23
- }
24
- return kernedSegment;
12
+ if (currentSegment === " ") {
13
+ return currentSegment;
14
+ }
15
+ if (options.wrapLatin && LanguageClass.isLatin(currentSegment)) {
16
+ return currentSegment.replace(util.latinRegex, (match) => applyLatinStyle(match));
17
+ }
18
+ if (options.noSpaceBetweenNoBreaks && CharClass.shouldNotBreak(currentSegment)) {
19
+ return currentSegment.replace(util.noBreakRulesRegex, (match) => applyNoBreaksStyle(match));
20
+ }
21
+ return currentSegment;
25
22
  };
26
- exports.applyStyleToSegment = applyStyleToSegment;
27
23
  const applyKerningToSegment = (currentSegment, nextSegment, options) => {
28
- const chars = [...currentSegment];
29
- const kernedChars = chars.map((currentChar, i) => {
30
- const nextChar = chars[i + 1] || nextSegment[0] || '';
31
- const kerningRule = options.kerningRules.find(rule => rule.between[0] === currentChar && rule.between[1] === nextChar);
32
- if (kerningRule) {
33
- const kerningValue = typeof kerningRule.value === 'number' ? kerningRule.value : parseInt(kerningRule.value, 10);
34
- return (0, utils_tags_1.applyKerning)(currentChar, kerningValue, options.classNamePrefix);
35
- }
36
- return currentChar;
37
- });
38
- return kernedChars.join('');
24
+ const chars = [...currentSegment];
25
+ const kernedChars = chars.map((currentChar, i) => {
26
+ const nextChar = chars[i + 1] || nextSegment[0] || "";
27
+ const kerningRule = options.kerningRules.find(
28
+ (rule) => rule.between[0] === currentChar && rule.between[1] === nextChar
29
+ );
30
+ if (kerningRule) {
31
+ const kerningValue = typeof kerningRule.value === "number" ? kerningRule.value : parseInt(kerningRule.value, 10);
32
+ const breakable = options.useWordBreak ? false : isBreakable(currentChar, nextChar);
33
+ return currentChar + createKerning(kerningValue, breakable);
34
+ }
35
+ return currentChar;
36
+ });
37
+ return kernedChars.join("");
38
+ };
39
+ export {
40
+ applyKerningToSegment,
41
+ applyStyleToSegment,
42
+ applyStyleToText
39
43
  };
40
- //# sourceMappingURL=apply-style.js.map
@@ -1,4 +1,4 @@
1
- import type { TransformFunction, TypesettingOptions } from './types';
1
+ import type { TransformFunction, TypesettingOptions } from '../types';
2
2
  declare class HTMLProcessor {
3
3
  private transformFunctions;
4
4
  private options;
@@ -1 +1 @@
1
- {"version":3,"file":"html-processor.d.ts","sourceRoot":"","sources":["../src/html-processor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAOpE,cAAM,aAAa;IACjB,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,OAAO,CAAoB;gBAEvB,kBAAkB,EAAE,iBAAiB,EAAE,EAAE,OAAO,EAAE,kBAAkB;IAahF,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAmBjD,OAAO,CAAC,WAAW;IAyBnB,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,WAAW,CASlB;CACF;AAQD,QAAA,MAAM,eAAe,SAAU,MAAM,aAEpC,CAAA;AAQD,QAAA,MAAM,YAAY,YAAa,WAAW,KAAG,IAAI,EAahD,CAAA;AAED,eAAe,aAAa,CAAA;AAC5B,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,CAAA"}
1
+ {"version":3,"file":"html-processor.d.ts","sourceRoot":"","sources":["../src/html-processor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAOrE,cAAM,aAAa;IACjB,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,OAAO,CAAoB;gBAEvB,kBAAkB,EAAE,iBAAiB,EAAE,EAAE,OAAO,EAAE,kBAAkB;IAahF,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAmBjD,OAAO,CAAC,WAAW;IAyBnB,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,WAAW,CASlB;CACF;AAQD,QAAA,MAAM,eAAe,SAAU,MAAM,aAEpC,CAAA;AAQD,QAAA,MAAM,YAAY,YAAa,WAAW,KAAG,IAAI,EAahD,CAAA;AAED,eAAe,aAAa,CAAA;AAC5B,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,CAAA"}
@@ -1,64 +1,97 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getTextNodes = exports.parseFromString = void 0;
7
- const win_1 = __importDefault(require("./win"));
1
+ import win from "./win";
8
2
  class HTMLProcessor {
9
- constructor(transformFunctions, options) {
10
- this.replaceNode = (node, transformedHtml) => {
11
- const range = win_1.default.document.createRange();
12
- range.selectNode(node);
13
- const fragment = range.createContextualFragment(transformedHtml);
14
- if (node.parentNode) {
15
- node.parentNode.insertBefore(fragment, node);
16
- node.parentNode.removeChild(node);
17
- }
18
- };
19
- this.transformFunctions = transformFunctions;
20
- this.options = options;
21
- }
22
- processHtmlWithFunctions(srcHtml) {
23
- if (srcHtml === '') {
24
- return srcHtml;
25
- }
26
- return this.transformFunctions.reduce((currentHtml, transformFunction) => this.processHtml(currentHtml, transformFunction), srcHtml);
3
+ constructor(transformFunctions, options) {
4
+ /**
5
+ * 指定されたノードを、新しいHTMLコンテンツで置き換えます。
6
+ *
7
+ * @param node - 置き換えるノード。
8
+ * @param transformedHtml - ノードに挿入される変換後のHTMLコンテンツ。
9
+ */
10
+ this.replaceNode = (node, transformedHtml) => {
11
+ const range = win.document.createRange();
12
+ range.selectNode(node);
13
+ const fragment = range.createContextualFragment(transformedHtml);
14
+ if (node.parentNode) {
15
+ node.parentNode.insertBefore(fragment, node);
16
+ node.parentNode.removeChild(node);
17
+ }
18
+ };
19
+ this.transformFunctions = transformFunctions;
20
+ this.options = options;
21
+ }
22
+ /**
23
+ * 与えられたHTML文字列に対して、指定された変換関数の配列を順番に適用し、
24
+ * 変換されたHTMLを生成します。
25
+ *
26
+ * @param srcHtml - 変換を適用する元のHTML文字列。
27
+ * @param functions - 順番に適用する変換関数の配列。
28
+ * @return 変換後のHTML文字列。
29
+ */
30
+ processHtmlWithFunctions(srcHtml) {
31
+ if (srcHtml === "") {
32
+ return srcHtml;
27
33
  }
28
- processHtml(html, transformFunction) {
29
- if (html === '') {
30
- return html;
31
- }
32
- const doc = parseFromString(html);
33
- const textNodes = getTextNodes(doc.body);
34
- textNodes.forEach((currentNode, index) => {
35
- const nextNode = textNodes[index + 1] || null;
36
- const transformedHtml = this.getTransformedHtml(currentNode, nextNode, transformFunction);
37
- this.replaceNode(currentNode, transformedHtml);
38
- });
39
- return doc.body.innerHTML;
40
- }
41
- getTransformedHtml(currentNode, nextNode, transformFunction) {
42
- const transformedHtml = transformFunction(currentNode.nodeValue || '', nextNode ? nextNode.nodeValue || '' : '', this.options);
43
- return transformedHtml;
34
+ return this.transformFunctions.reduce(
35
+ (currentHtml, transformFunction) => this.processHtml(currentHtml, transformFunction),
36
+ srcHtml
37
+ );
38
+ }
39
+ /**
40
+ * HTML文字列を解析し、特定の変換関数を使用してその内容を変換し、
41
+ * 変換されたHTMLを文字列として返します。
42
+ *
43
+ * @param html - 解析および変換するHTML文字列。
44
+ * @param transformFunction - 各テキストノードに適用される変換関数。
45
+ * @return 変換後のHTML内容を含む文字列。テキストが空の場合は、そのまま返されます。
46
+ */
47
+ processHtml(html, transformFunction) {
48
+ if (html === "") {
49
+ return html;
44
50
  }
51
+ const doc = parseFromString(html);
52
+ const textNodes = getTextNodes(doc.body);
53
+ textNodes.forEach((currentNode, index) => {
54
+ const nextNode = textNodes[index + 1] || null;
55
+ const transformedHtml = this.getTransformedHtml(currentNode, nextNode, transformFunction);
56
+ this.replaceNode(currentNode, transformedHtml);
57
+ });
58
+ return doc.body.innerHTML;
59
+ }
60
+ /**
61
+ * 与えられたノードと、その次のノードに基づいて変換されたHTMLを生成します。
62
+ *
63
+ * @param currentNode - 現在のノード。
64
+ * @param nextNode - 次のノード、または存在しない場合は null。
65
+ * @param transformFunction - ノードの値を変換するための関数。
66
+ * @return 変換されたHTMLコンテンツを含む文字列。
67
+ */
68
+ getTransformedHtml(currentNode, nextNode, transformFunction) {
69
+ const transformedHtml = transformFunction(
70
+ currentNode.nodeValue || "",
71
+ nextNode ? nextNode.nodeValue || "" : "",
72
+ this.options
73
+ );
74
+ return transformedHtml;
75
+ }
45
76
  }
46
77
  const parseFromString = (html) => {
47
- return new win_1.default.DOMParser().parseFromString(html, 'text/html');
78
+ return new win.DOMParser().parseFromString(html, "text/html");
48
79
  };
49
- exports.parseFromString = parseFromString;
50
80
  const getTextNodes = (element) => {
51
- const walk = win_1.default.document.createTreeWalker(element, win_1.default.NodeFilter.SHOW_TEXT);
52
- let textNode = walk.nextNode();
53
- const textNodes = [];
54
- while (textNode) {
55
- if (textNode.nodeValue && textNode.nodeValue.trim() !== '') {
56
- textNodes.push(textNode);
57
- }
58
- textNode = walk.nextNode();
81
+ const walk = win.document.createTreeWalker(element, win.NodeFilter.SHOW_TEXT);
82
+ let textNode = walk.nextNode();
83
+ const textNodes = [];
84
+ while (textNode) {
85
+ if (textNode.nodeValue && textNode.nodeValue.trim() !== "") {
86
+ textNodes.push(textNode);
59
87
  }
60
- return textNodes;
88
+ textNode = walk.nextNode();
89
+ }
90
+ return textNodes;
91
+ };
92
+ var html_processor_default = HTMLProcessor;
93
+ export {
94
+ html_processor_default as default,
95
+ getTextNodes,
96
+ parseFromString
61
97
  };
62
- exports.getTextNodes = getTextNodes;
63
- exports.default = HTMLProcessor;
64
- //# sourceMappingURL=html-processor.js.map
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import HTMLProcessor from './html-processor';
2
- import type { TypesettingOptions } from './types';
2
+ import type { TypesettingOptions } from '../types';
3
3
  declare class Typesetter extends HTMLProcessor {
4
- static defaultOptions: TypesettingOptions;
4
+ static getDefaultOptions(): TypesettingOptions;
5
5
  private isIntlSegmenterSupported;
6
6
  constructor(options?: Partial<TypesettingOptions>);
7
7
  private static validateOptions;
@@ -11,4 +11,5 @@ declare class Typesetter extends HTMLProcessor {
11
11
  renderToSelector(selector: string | null): void;
12
12
  }
13
13
  export default Typesetter;
14
+ export type { TypesettingOptions, KerningRule } from '../types';
14
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,kBAAkB,CAAA;AAI5C,OAAO,KAAK,EAAE,kBAAkB,EAAe,MAAM,SAAS,CAAA;AAM9D,cAAM,UAAW,SAAQ,aAAa;IAIpC,MAAM,CAAC,cAAc,EAAE,kBAAkB,CAQxC;IAKD,OAAO,CAAC,wBAAwB,CAAS;gBAE7B,OAAO,GAAE,OAAO,CAAC,kBAAkB,CAAM;IA2BrD,OAAO,CAAC,MAAM,CAAC,eAAe;IAkB9B,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAiBjC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAc/B,gBAAgB,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,IAAI,GAAG,IAAI;IAqB5D,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;CAQhD;AAED,eAAe,UAAU,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,kBAAkB,CAAA;AAI5C,OAAO,KAAK,EAAE,kBAAkB,EAAe,MAAM,UAAU,CAAA;AAM/D,cAAM,UAAW,SAAQ,aAAa;IAIpC,MAAM,CAAC,iBAAiB,IAAI,kBAAkB;IAc9C,OAAO,CAAC,wBAAwB,CAAS;gBAE7B,OAAO,GAAE,OAAO,CAAC,kBAAkB,CAAM;IA2BrD,OAAO,CAAC,MAAM,CAAC,eAAe;IAkB9B,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAiBjC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAc/B,gBAAgB,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,IAAI,GAAG,IAAI;IAqB5D,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;CAQhD;AAED,eAAe,UAAU,CAAA;AACzB,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA"}