palt-typesetting 0.8.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -43,12 +43,12 @@ WordPress や jQuery などの環境で使用する場合
43
43
  ```html
44
44
  <head>
45
45
  <!-- head タグ内でスタイルの読み込み -->
46
- <link rel="stylesheet" type="text/css" href="https://unpkg.com/palt-typesetting@0.8.0/bundle/typesetter.min.css" />
46
+ <link rel="stylesheet" type="text/css" href="https://unpkg.com/palt-typesetting@0.9.0/bundle/typesetter.min.css" />
47
47
  </head>
48
48
 
49
49
  <body>
50
50
  <!-- body 閉じタグの前でスクリプトの読み込み -->
51
- <script src="https://unpkg.com/palt-typesetting@0.8.0/bundle/typesetter.min.js"></script>
51
+ <script src="https://unpkg.com/palt-typesetting@0.9.0/bundle/typesetter.min.js"></script>
52
52
  </body>
53
53
  ```
54
54
 
@@ -133,6 +133,20 @@ const options = {
133
133
  // 英数を `.typesetting-latin` でラップします。
134
134
  wrapLatin: true,
135
135
 
136
+ // 特例文字 `char` を `.typesetting-char-[label]` でラップします。
137
+ wrapChars: [
138
+ {
139
+ char: 'あ',
140
+ label: 'hira-a',
141
+ // output: <span class="typesetting-char-hira-a">あ</span>
142
+ },
143
+ {
144
+ char: '」',
145
+ // output: <span class="typesetting-char-」">」</span>
146
+ // label が未指定の場合は、char の値がそのまま label として使用されます。
147
+ },
148
+ ],
149
+
136
150
  // 罫線などの分離禁則文字を `.typesetting-no-breaks` でラップし、文字間を 0 に設定します。
137
151
  noSpaceBetweenNoBreaks: true,
138
152
 
@@ -182,7 +196,7 @@ typesetter.renderToElements(elements)
182
196
  */
183
197
  const srcHtml = '「日本語」とEnglish'
184
198
  console.log('output: ' + typesetter.render(srcHtml))
185
- // output: <span class="typeset typesetting-wrapper typesetting-word-break">「日本語」<span class="typesetting-thin-space" style="letter-spacing: 0.2em;" data-content=" "></span>と<span class="typesetting-thin-space" style="letter-spacing: 0.2em;" data-content=" "></span><span class="typesetting-latin">English </span></span>
199
+ // output: <span class="typeset typesetting-wrapper typesetting-word-break">「日本語<span class="typesetting-char-」">」</span><span class="typesetting-thin-space" style="letter-spacing: 0.2em;" data-content=" "></span>と<span class="typesetting-thin-space" style="letter-spacing: 0.2em;" data-content=" "></span><span class="typesetting-latin">English </span></span>
186
200
  ```
187
201
 
188
202
  ### コンストラクタ
@@ -201,25 +215,27 @@ console.log('output: ' + typesetter.render(srcHtml))
201
215
 
202
216
  ### オプション
203
217
 
204
- | オプション名 | 説明 | オプションの型 | デフォルト値 |
205
- | ------------------------ | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | ------------ |
206
- | `useWordBreak` | 単語や助詞など、単語区切りでの改行を行います。 | `boolean` | `true` |
207
- | `wrapLatin` | 英数を `span.typesetting-latin` でラップします。 | `boolean` | `true` |
208
- | `noSpaceBetweenNoBreaks` | 罫線などの分離禁則文字を `span.typesetting-no-breaks` でラップし、文字間を 0 に設定します。 | `boolean` | `true` |
209
- | `insertThinSpaces` | 四分アキスペースを自動で挿入します。 | `boolean` | `true` |
210
- | `thinSpaceWidth` | 四分アキスペースの幅を設定します。 <br>※四分アキは本来 0.25em ですが、視覚上の補正としてデフォルト値を 0.2 em に設定しています。 | `string` | `'0.2em'` |
211
- | `kerningRules` | 特定の文字間のカーニングルールを設定します。 | `{between: [string, string], value: string \| number}[]` | `[]` |
218
+ | オプション名 | 説明 | オプションの型 | デフォルト値 |
219
+ | ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | ------------ |
220
+ | `useWordBreak` | 単語や助詞など、単語区切りでの改行を行います。 | `boolean` | `true` |
221
+ | `wrapLatin` | 英数を `span.typesetting-latin` でラップします。 | `boolean` | `true` |
222
+ | `wrapChars` | 特例文字の設定です。指定された文字 `char` をラッピングし、`<span>` タグで囲みます。ラッピングされた文字には、`typesetting-char-[label]` の形式で CSS クラスが付与されます。<br>※ `label` が未指定の場合は、`char` の値がそのままクラス名に使用されます。 | `{char: string, label?: string}[]` | `[]` |
223
+ | `noSpaceBetweenNoBreaks` | 罫線などの分離禁則文字を `span.typesetting-no-breaks` でラップし、文字間を 0 に設定します。 | `boolean` | `true` |
224
+ | `insertThinSpaces` | 四分アキスペースを自動で挿入します。 | `boolean` | `true` |
225
+ | `thinSpaceWidth` | 四分アキスペースの幅を設定します。<br>※四分アキは本来 0.25em ですが、視覚上の補正としてデフォルト値を 0.2em に設定しています。 | `string` | `'0.2em'` |
226
+ | `kerningRules` | 特定の文字間のカーニングルールを設定します。 | `{between: [string, string], value: string \| number}[]` | `[]` |
212
227
 
213
228
  ### 生成される CSS クラス
214
229
 
215
- | CSS クラス名 | 説明 |
216
- | ------------------------- | ----------------------------------------------------------------------------------------------------------- |
217
- | `.typesetting-wrapper` | HTML 文字列中のテキストコンテンツをラップします。<br>オプションの指定に関わらず、常に生成されます。 |
218
- | `.typesetting-word-break` | HTML 文字列中のテキストコンテンツをラップします。<br>`useWordBreak: true` のときに生成されます。 |
219
- | `.typesetting-latin` | テキストコンテンツ中の英数をラップします。<br>`wrapLatin: true` のときに生成されます。 |
220
- | `.typesetting-no-breaks` | テキストコンテンツ中の分離禁則文字をラップします。<br>`noSpaceBetweenNoBreaks: true` のときに生成されます。 |
221
- | `.typesetting-thin-space` | 挿入される四分アキスペースエレメントの CSS クラスです。<br>`insertThinSpaces: true` のときに生成されます。 |
222
- | `.typesetting-kerning` | 挿入されるカーニングエレメントの CSS クラスです。<br>有効な `kerningRules` が存在するときに生成されます。 |
230
+ | CSS クラス名 | 説明 |
231
+ | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
232
+ | `.typesetting-wrapper` | HTML 文字列中のテキストコンテンツをラップします。<br>オプションの指定に関わらず、常に生成されます。 |
233
+ | `.typesetting-word-break` | HTML 文字列中のテキストコンテンツをラップします。<br>`useWordBreak: true` のときに生成されます。 |
234
+ | `.typesetting-latin` | テキストコンテンツ中の英数をラップします。<br>`wrapLatin: true` のときに生成されます。 |
235
+ | `.typesetting-char-[label]` | `wrapChars` で指定された特例文字に付与されるクラスです。<br>※ `label` が未指定の場合、`char` の値を `label` として使用します。 |
236
+ | `.typesetting-no-breaks` | テキストコンテンツ中の分離禁則文字をラップします。<br>`noSpaceBetweenNoBreaks: true` のときに生成されます。 |
237
+ | `.typesetting-thin-space` | 挿入される四分アキスペースエレメントの CSS クラスです。<br>`insertThinSpaces: true` のときに生成されます。 |
238
+ | `.typesetting-kerning` | 挿入されるカーニングエレメントの CSS クラスです。<br>有効な `kerningRules` が存在するときに生成されます。 |
223
239
 
224
240
  ---
225
241
 
@@ -231,9 +247,16 @@ TypeScript の型定義を提供しています。完全な型定義は[こち
231
247
 
232
248
  ```typescript
233
249
  import Typesetter from 'palt-typesetting'
234
- import type { TypesettingOptions, KerningRule } from 'palt-typesetting/types'
250
+ import type { TypesettingOptions, KerningRule, WrapChar } from 'palt-typesetting/types'
235
251
  import 'palt-typesetting/dist/typesetter.css'
236
252
 
253
+ const chars: WrapChar[] = [
254
+ {
255
+ char: 'あ',
256
+ label: 'hira-a',
257
+ },
258
+ ]
259
+
237
260
  const kerning: KerningRule[] = [
238
261
  {
239
262
  between: ['し', 'ま'],
@@ -244,6 +267,7 @@ const kerning: KerningRule[] = [
244
267
  const options: TypesettingOptions = {
245
268
  thinSpaceWidth: '0.25em',
246
269
  kerningRules: kerning,
270
+ wrapChars: chars,
247
271
  }
248
272
 
249
273
  const typeset = new Typesetter(options)
@@ -1 +1 @@
1
- !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Typesetter=e():t.Typesetter=e()}(this,(()=>(()=>{var t={954:(t,e)=>{!function(t){"use strict";var e="undefined"!=typeof Uint8Array?Uint8Array:Array,r="+".charCodeAt(0),n="/".charCodeAt(0),o="0".charCodeAt(0),a="a".charCodeAt(0),u="A".charCodeAt(0),i="-".charCodeAt(0),s="_".charCodeAt(0);function c(t){var e=t.charCodeAt(0);return e===r||e===i?62:e===n||e===s?63:e<o?-1:e<o+10?e-o+26+26:e<u+26?e-u:e<a+26?e-a+26:void 0}t.toByteArray=function(t){var r,n,o,a,u,i;if(t.length%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var s=t.length;u="="===t.charAt(s-2)?2:"="===t.charAt(s-1)?1:0,i=new e(3*t.length/4-u),o=u>0?t.length-4:t.length;var f=0;function l(t){i[f++]=t}for(r=0,n=0;r<o;r+=4,n+=3)l((16711680&(a=c(t.charAt(r))<<18|c(t.charAt(r+1))<<12|c(t.charAt(r+2))<<6|c(t.charAt(r+3))))>>16),l((65280&a)>>8),l(255&a);return 2===u?l(255&(a=c(t.charAt(r))<<2|c(t.charAt(r+1))>>4)):1===u&&(l((a=c(t.charAt(r))<<10|c(t.charAt(r+1))<<4|c(t.charAt(r+2))>>2)>>8&255),l(255&a)),i},t.fromByteArray=function(t){var e,r,n,o,a=t.length%3,u="";function i(t){return"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(t)}for(e=0,n=t.length-a;e<n;e+=3)u+=i((o=r=(t[e]<<16)+(t[e+1]<<8)+t[e+2])>>18&63)+i(o>>12&63)+i(o>>6&63)+i(63&o);switch(a){case 1:u+=i((r=t[t.length-1])>>2),u+=i(r<<4&63),u+="==";break;case 2:u+=i((r=(t[t.length-2]<<8)+t[t.length-1])>>10),u+=i(r>>4&63),u+=i(r<<2&63),u+="="}return u}}(e)},741:t=>{function e(){this.table=new Uint16Array(16),this.trans=new Uint16Array(288)}function r(t,r){this.source=t,this.sourceIndex=0,this.tag=0,this.bitcount=0,this.dest=r,this.destLen=0,this.ltree=new e,this.dtree=new e}var n=new e,o=new e,a=new Uint8Array(30),u=new Uint16Array(30),i=new Uint8Array(30),s=new Uint16Array(30),c=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),f=new e,l=new Uint8Array(320);function h(t,e,r,n){var o,a;for(o=0;o<r;++o)t[o]=0;for(o=0;o<30-r;++o)t[o+r]=o/r|0;for(a=n,o=0;o<30;++o)e[o]=a,a+=1<<t[o]}var p=new Uint16Array(16);function b(t,e,r,n){var o,a;for(o=0;o<16;++o)t.table[o]=0;for(o=0;o<n;++o)t.table[e[r+o]]++;for(t.table[0]=0,a=0,o=0;o<16;++o)p[o]=a,a+=t.table[o];for(o=0;o<n;++o)e[r+o]&&(t.trans[p[e[r+o]]++]=o)}function d(t){t.bitcount--||(t.tag=t.source[t.sourceIndex++],t.bitcount=7);var e=1&t.tag;return t.tag>>>=1,e}function v(t,e,r){if(!e)return r;for(;t.bitcount<24;)t.tag|=t.source[t.sourceIndex++]<<t.bitcount,t.bitcount+=8;var n=t.tag&65535>>>16-e;return t.tag>>>=e,t.bitcount-=e,n+r}function y(t,e){for(;t.bitcount<24;)t.tag|=t.source[t.sourceIndex++]<<t.bitcount,t.bitcount+=8;var r=0,n=0,o=0,a=t.tag;do{n=2*n+(1&a),a>>>=1,++o,r+=e.table[o],n-=e.table[o]}while(n>=0);return t.tag=a,t.bitcount-=o,e.trans[r+n]}function g(t,e,r){var n,o,a,u,i,s;for(n=v(t,5,257),o=v(t,5,1),a=v(t,4,4),u=0;u<19;++u)l[u]=0;for(u=0;u<a;++u){var h=v(t,3,0);l[c[u]]=h}for(b(f,l,0,19),i=0;i<n+o;){var p=y(t,f);switch(p){case 16:var d=l[i-1];for(s=v(t,2,3);s;--s)l[i++]=d;break;case 17:for(s=v(t,3,3);s;--s)l[i++]=0;break;case 18:for(s=v(t,7,11);s;--s)l[i++]=0;break;default:l[i++]=p}}b(e,l,0,n),b(r,l,n,o)}function A(t,e,r){for(;;){var n,o,c,f,l=y(t,e);if(256===l)return 0;if(l<256)t.dest[t.destLen++]=l;else for(n=v(t,a[l-=257],u[l]),o=y(t,r),f=c=t.destLen-v(t,i[o],s[o]);f<c+n;++f)t.dest[t.destLen++]=t.dest[f]}}function w(t){for(var e,r;t.bitcount>8;)t.sourceIndex--,t.bitcount-=8;if((e=256*(e=t.source[t.sourceIndex+1])+t.source[t.sourceIndex])!==(65535&~(256*t.source[t.sourceIndex+3]+t.source[t.sourceIndex+2])))return-3;for(t.sourceIndex+=4,r=e;r;--r)t.dest[t.destLen++]=t.source[t.sourceIndex++];return t.bitcount=0,0}!function(t,e){var r;for(r=0;r<7;++r)t.table[r]=0;for(t.table[7]=24,t.table[8]=152,t.table[9]=112,r=0;r<24;++r)t.trans[r]=256+r;for(r=0;r<144;++r)t.trans[24+r]=r;for(r=0;r<8;++r)t.trans[168+r]=280+r;for(r=0;r<112;++r)t.trans[176+r]=144+r;for(r=0;r<5;++r)e.table[r]=0;for(e.table[5]=32,r=0;r<32;++r)e.trans[r]=r}(n,o),h(a,u,4,3),h(i,s,2,1),a[28]=0,u[28]=258,t.exports=function(t,e){var a,u,i=new r(t,e);do{switch(a=d(i),v(i,2,0)){case 0:u=w(i);break;case 1:u=A(i,n,o);break;case 2:g(i,i.ltree,i.dtree),u=A(i,i.ltree,i.dtree);break;default:u=-3}if(0!==u)throw new Error("Data error")}while(!a);return i.destLen<i.dest.length?"function"==typeof i.dest.slice?i.dest.slice(0,i.destLen):i.dest.subarray(0,i.destLen):i.dest}},667:(t,e,r)=>{const n=r(741),{swap32LE:o}=r(288);t.exports=class{constructor(t){const e="function"==typeof t.readUInt32BE&&"function"==typeof t.slice;if(e||t instanceof Uint8Array){let r;if(e)this.highStart=t.readUInt32LE(0),this.errorValue=t.readUInt32LE(4),r=t.readUInt32LE(8),t=t.slice(12);else{const e=new DataView(t.buffer);this.highStart=e.getUint32(0,!0),this.errorValue=e.getUint32(4,!0),r=e.getUint32(8,!0),t=t.subarray(12)}t=n(t,new Uint8Array(r)),t=n(t,new Uint8Array(r)),o(t),this.data=new Uint32Array(t.buffer)}else({data:this.data,highStart:this.highStart,errorValue:this.errorValue}=t)}get(t){let e;return t<0||t>1114111?this.errorValue:t<55296||t>56319&&t<=65535?(e=(this.data[t>>5]<<2)+(31&t),this.data[e]):t<=65535?(e=(this.data[2048+(t-55296>>5)]<<2)+(31&t),this.data[e]):t<this.highStart?(e=this.data[2080+(t>>11)],e=this.data[e+(t>>5&63)],e=(e<<2)+(31&t),this.data[e]):this.data[this.data.length-4]}}},288:t=>{const e=18===new Uint8Array(new Uint32Array([305419896]).buffer)[0],r=(t,e,r)=>{let n=t[e];t[e]=t[r],t[r]=n};t.exports={swap32LE:t=>{e&&(t=>{const e=t.length;for(let n=0;n<e;n+=4)r(t,n,n+3),r(t,n+1,n+2)})(t)}}}},e={};function r(n){var o=e[n];if(void 0!==o)return o.exports;var a=e[n]={exports:{}};return t[n](a,a.exports,r),a.exports}r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var n={};return(()=>{"use strict";function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t(e)}function e(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}function o(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,a(n.key),n)}}function a(e){var r=function(e,r){if("object"!=t(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,"string");if("object"!=t(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==t(r)?r:r+""}r.d(n,{default:()=>Q});var u,i=function(){return t=function t(e,r){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.transformFunctions=e,this.options=r},(r=[{key:"processHtmlWithFunctions",value:function(t){if(""===t)return t;var r,n=t,o=function(t,r){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,r){if(t){if("string"==typeof t)return e(t,r);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?e(t,r):void 0}}(t))||r&&t&&"number"==typeof t.length){n&&(t=n);var o=0,a=function(){};return{s:a,n:function(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}},e:function(t){throw t},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var u,i=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return i=t.done,t},e:function(t){s=!0,u=t},f:function(){try{i||null==n.return||n.return()}finally{if(s)throw u}}}}(this.transformFunctions);try{for(o.s();!(r=o.n()).done;){var a=r.value;n=this.processHtml(n,a)}}catch(t){o.e(t)}finally{o.f()}return n}},{key:"processHtml",value:function(t,e){if(""===t)return t;for(var r,n=/(<[^>]+>)|([^<]+)/g,o=[];null!==(r=n.exec(t));)r[1]?o.push({type:"tag",value:r[1]}):r[2]&&o.push({type:"text",value:r[2]});for(var a=0;a<o.length;a++)if("text"===o[a].type){for(var u="",i=a+1;i<o.length;i++)if("text"===o[i].type){u=o[i].value;break}var s=o[a].value;s=e(s,u,this.options),o[a].value=s}return o.map((function(t){return t.value})).join("")}}])&&o(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,r}(),s=r(667),c=r(954);const f=[[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]],l=new s(c.toByteArray("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")),h=function(t){switch(t){case 33:case 39:case 40:case 42:return 12;case 35:return 5;default:return t}},p=function(t){switch(t){case 37:case 38:return 34;case 41:return 22;default:return t}};class b{constructor(t,e=!1){this.position=t,this.required=e}}u=class{nextCodePoint(){const t=this.string.charCodeAt(this.pos++),e=this.string.charCodeAt(this.pos);return 55296<=t&&t<=56319&&56320<=e&&e<=57343?(this.pos++,1024*(t-55296)+(e-56320)+65536):t}nextCharClass(){return h(l.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(t){let e=!1;switch(f[this.curClass][this.nextClass]){case 0:e=!0;break;case 1:e=41===t;break;case 2:if(e=41===t,!e)return e=!1,e;break;case 3:if(41!==t)return e}return this.LB8a&&(e=!1),!this.LB21a||16!==this.curClass&&17!==this.curClass?this.LB21a=13===this.curClass:(e=!1,this.LB21a=!1),28===this.curClass?(this.LB30a++,2==this.LB30a&&28===this.nextClass&&(e=!0,this.LB30a=0)):this.LB30a=0,this.curClass=this.nextClass,e}nextBreak(){if(null==this.curClass){let t=this.nextCharClass();this.curClass=p(t),this.nextClass=t,this.LB8a=31===t,this.LB30a=0}for(;this.pos<this.string.length;){this.lastPos=this.pos;const t=this.nextClass;if(this.nextClass=this.nextCharClass(),34===this.curClass||36===this.curClass&&37!==this.nextClass)return this.curClass=p(h(this.nextClass)),new b(this.lastPos,!0);let e=this.getSimpleBreak();if(null===e&&(e=this.getPairTableBreak(t)),this.LB8a=31===this.nextClass,e)return new b(this.lastPos)}return this.lastPos<this.string.length?(this.lastPos=this.string.length,new b(this.string.length)):null}constructor(t){this.string=t,this.pos=0,this.lastPos=0,this.curClass=null,this.nextClass=null,this.LB8a=!1,this.LB21a=!1,this.LB30a=0}};var d=/(?:[\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,v=/(|[|{|〔|〈|《|「|『|【|〘|〖|“|‘/,y=/)|]|}|〕|〉|》|」|』|】|〙|〗|”|’/,g=/・|:|;/,A=/、|,/,w=/。|./,m=new RegExp("[\\p{scx=Hiragana}\\p{scx=Katakana}|ヲ-゚\\p{scx=Han}".concat(v.source).concat(y.source).concat(g.source).concat(A.source).concat(w.source,"]+"),"u"),P=new RegExp("[".concat("—‥…_",String.fromCharCode(9472),"-").concat(String.fromCharCode(9599),"]+"),"g"),x=/[\s\u00A0]/,B=new RegExp("".concat(/,/.source,"|").concat(/\./.source,"|").concat(v.source,"|").concat(y.source,"|").concat(g.source,"|").concat(A.source,"|").concat(w.source),"u"),S={isLatin:function(t){return d.test(t)},isJapanese:function(t){return m.test(t)},hasLanguageTransition:function(t,e){return S.isJapanese(t)!==S.isJapanese(e)},shouldAddThinSpace:function(t,e){return S.hasLanguageTransition(t,e)}},O="typesetting",j=function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",o=r?' style="'.concat(r,'"'):"";return'<span class="'.concat(e,'"').concat(o).concat(n,">").concat(t,"</span>")},L=function(t,e,r,n){var o="letter-spacing: ".concat(r,";"),a=' data-content="'.concat(n?" ":"&nbsp;",'"');return j(t,e,o,a)},F=function(t){var e=new Intl.Segmenter("ja-JP",{granularity:"word"});return Array.from(e.segment(t),(function(t){return t.segment}))},C=function(t,e){return!x.test(t)&&!x.test(e)&&(function(t,e){return B.test(t)||B.test(e)}(t,e)?function(t,e){for(var r=new RegExp("(".concat(y.source,"|").concat(A.source,"|").concat(w.source,")")),n={spaceBefore:{regex:v,hasSpaceBefore:!0,hasSpaceAfter:!1},spaceAfter:{regex:r,hasSpaceBefore:!1,hasSpaceAfter:!0},spaceBoth:{regex:g,hasSpaceBefore:!0,hasSpaceAfter:!0}},o=0,a=Object.values(n);o<a.length;o++){var u=a[o],i=u.regex,s=u.hasSpaceBefore,c=u.hasSpaceAfter;if(s&&i.test(e)&&!i.test(t))return!0;if(c&&i.test(t)&&!i.test(e))return!0}return!1}(t,e):S.shouldAddThinSpace(t,e))},D=function(t,e){var r=t.slice(-1)+e.slice(0,1),n=new u(r).nextBreak();return!!n&&1===n.position},X=function(t,e,r){var n=F(t),o=F(e);return n.reduce((function(t,e,n,a){return t+function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r=arguments.length>2?arguments[2]:void 0;if(!e)return t;var n,o=r.insertThinSpaces&&C(t,e),a=D(t,e);return o?t+function(t,e){var r="".concat(O,"-thin-space");return L("",r,t,e)}(g.test(t)||g.test(e)?"calc(".concat(r.thinSpaceWidth," / 2.0)"):null!==(n=r.thinSpaceWidth)&&void 0!==n?n:"",a):r.useWordBreak&&a?t+"<wbr>":t}(e,a[n+1]||o[0],r)}),"")};function k(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}var H=function(t,e,r){return" "===t?t:(n=t,o=r.useWordBreak,a="".concat(O,"-wrapper"),u="".concat(O,"-word-break"),i=o?"".concat(a," ").concat(u):a,j(n,i));var n,o,a,u,i},z=function(t,e,r){return" "===t?t:r.wrapLatin&&S.isLatin(t)?t.replace(d,(function(t){return e=t,r="".concat(O,"-latin"),j(e,r);var e,r})):r.noSpaceBetweenNoBreaks&&(n=t,P.test(n))?t.replace(P,(function(t){return e=t,r="".concat(O,"-no-breaks"),j(e,r);var e,r})):t;var n},W=function(t,e,r){var n,o=function(t){if(Array.isArray(t))return k(t)}(n=t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(n)||function(t,e){if(t){if("string"==typeof t)return k(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?k(t,e):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 o.map((function(t,n){var a,u=o[n+1]||e[0]||"",i=null===(a=r.kerningRules)||void 0===a?void 0:a.find((function(e){return e.between[0]===t&&e.between[1]===u}));if(i){var s="number"==typeof i.value?i.value:parseInt(i.value,10),c=!r.useWordBreak&&D(t,u);return t+function(t,e){if(0===t)return"";var r="".concat(O,"-kerning");if(t<0){var n="margin: ".concat(t/1e3/2+"em",";");return j("",r,n)}return L("",r,t/1e3+"em",e)}(s,c)}return t})).join("")},U=window;function T(t){return T="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},T(t)}function V(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function E(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?V(Object(r),!0).forEach((function(e){I(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):V(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}function I(t,e,r){return(e=Z(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function N(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,Z(n.key),n)}}function Z(t){var e=function(t,e){if("object"!=T(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=T(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==T(e)?e:e+""}function q(t,e,r){return e=K(e),function(t,e){if(e&&("object"==T(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,R()?Reflect.construct(e,r||[],K(t).constructor):e.apply(t,r))}function R(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(R=function(){return!!t})()}function K(t){return K=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},K(t)}function J(t,e){return J=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},J(t,e)}var Q=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e);var r=void 0!==Intl.Segmenter;r||console.warn("Intl.Segmenter is not supported in this environment. \nTherefore, the options `useWordBreak` and `insertThinSpaces` will be ignored. \nFor more information about Intl.Segmenter, please visit:\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter");var n=r?[H,X,z,W]:[z,W],o=e.validateOptions(t);return q(this,e,[n,o])}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&J(t,e)}(e,t),r=e,o=[{key:"getDefaultOptions",value:function(){return{useWordBreak:!0,wrapLatin:!0,noSpaceBetweenNoBreaks:!0,insertThinSpaces:!0,thinSpaceWidth:"0.2em",kerningRules:[]}}},{key:"validateOptions",value:function(t){return t.kerningRules&&(t.kerningRules=t.kerningRules.filter(e.isValidKerningRule)),E(E({},e.getDefaultOptions()),t)}},{key:"isValidKerningRule",value:function(t){return 1===t.between[0].length&&1===t.between[1].length||(console.warn("Kerning rule between '".concat(t.between[0],"' and '").concat(t.between[1],"' must be single characters.")),!1)}}],(n=[{key:"render",value:function(t){return t?this.processHtmlWithFunctions(t):""}},{key:"renderToElements",value:function(t){var e=this;t&&(Array.isArray(t)||(t=[t]),t.forEach((function(t){var r=e.render(t.innerHTML);t.innerHTML=r})))}},{key:"renderToSelector",value:function(t){if(t){var e=U.document.querySelectorAll(t);this.renderToElements(Array.from(e))}}}])&&N(r.prototype,n),o&&N(r,o),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,o}(i)})(),n.default})()));
1
+ !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Typesetter=e():t.Typesetter=e()}(this,(()=>(()=>{var t={288:t=>{const e=18===new Uint8Array(new Uint32Array([305419896]).buffer)[0],r=(t,e,r)=>{let n=t[e];t[e]=t[r],t[r]=n};t.exports={swap32LE:t=>{e&&(t=>{const e=t.length;for(let n=0;n<e;n+=4)r(t,n,n+3),r(t,n+1,n+2)})(t)}}},667:(t,e,r)=>{const n=r(741),{swap32LE:o}=r(288);t.exports=class{constructor(t){const e="function"==typeof t.readUInt32BE&&"function"==typeof t.slice;if(e||t instanceof Uint8Array){let r;if(e)this.highStart=t.readUInt32LE(0),this.errorValue=t.readUInt32LE(4),r=t.readUInt32LE(8),t=t.slice(12);else{const e=new DataView(t.buffer);this.highStart=e.getUint32(0,!0),this.errorValue=e.getUint32(4,!0),r=e.getUint32(8,!0),t=t.subarray(12)}t=n(t,new Uint8Array(r)),t=n(t,new Uint8Array(r)),o(t),this.data=new Uint32Array(t.buffer)}else({data:this.data,highStart:this.highStart,errorValue:this.errorValue}=t)}get(t){let e;return t<0||t>1114111?this.errorValue:t<55296||t>56319&&t<=65535?(e=(this.data[t>>5]<<2)+(31&t),this.data[e]):t<=65535?(e=(this.data[2048+(t-55296>>5)]<<2)+(31&t),this.data[e]):t<this.highStart?(e=this.data[2080+(t>>11)],e=this.data[e+(t>>5&63)],e=(e<<2)+(31&t),this.data[e]):this.data[this.data.length-4]}}},741:t=>{function e(){this.table=new Uint16Array(16),this.trans=new Uint16Array(288)}function r(t,r){this.source=t,this.sourceIndex=0,this.tag=0,this.bitcount=0,this.dest=r,this.destLen=0,this.ltree=new e,this.dtree=new e}var n=new e,o=new e,a=new Uint8Array(30),u=new Uint16Array(30),i=new Uint8Array(30),s=new Uint16Array(30),c=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),f=new e,l=new Uint8Array(320);function h(t,e,r,n){var o,a;for(o=0;o<r;++o)t[o]=0;for(o=0;o<30-r;++o)t[o+r]=o/r|0;for(a=n,o=0;o<30;++o)e[o]=a,a+=1<<t[o]}var p=new Uint16Array(16);function b(t,e,r,n){var o,a;for(o=0;o<16;++o)t.table[o]=0;for(o=0;o<n;++o)t.table[e[r+o]]++;for(t.table[0]=0,a=0,o=0;o<16;++o)p[o]=a,a+=t.table[o];for(o=0;o<n;++o)e[r+o]&&(t.trans[p[e[r+o]]++]=o)}function d(t){t.bitcount--||(t.tag=t.source[t.sourceIndex++],t.bitcount=7);var e=1&t.tag;return t.tag>>>=1,e}function v(t,e,r){if(!e)return r;for(;t.bitcount<24;)t.tag|=t.source[t.sourceIndex++]<<t.bitcount,t.bitcount+=8;var n=t.tag&65535>>>16-e;return t.tag>>>=e,t.bitcount-=e,n+r}function y(t,e){for(;t.bitcount<24;)t.tag|=t.source[t.sourceIndex++]<<t.bitcount,t.bitcount+=8;var r=0,n=0,o=0,a=t.tag;do{n=2*n+(1&a),a>>>=1,++o,r+=e.table[o],n-=e.table[o]}while(n>=0);return t.tag=a,t.bitcount-=o,e.trans[r+n]}function g(t,e,r){var n,o,a,u,i,s;for(n=v(t,5,257),o=v(t,5,1),a=v(t,4,4),u=0;u<19;++u)l[u]=0;for(u=0;u<a;++u){var h=v(t,3,0);l[c[u]]=h}for(b(f,l,0,19),i=0;i<n+o;){var p=y(t,f);switch(p){case 16:var d=l[i-1];for(s=v(t,2,3);s;--s)l[i++]=d;break;case 17:for(s=v(t,3,3);s;--s)l[i++]=0;break;case 18:for(s=v(t,7,11);s;--s)l[i++]=0;break;default:l[i++]=p}}b(e,l,0,n),b(r,l,n,o)}function A(t,e,r){for(;;){var n,o,c,f,l=y(t,e);if(256===l)return 0;if(l<256)t.dest[t.destLen++]=l;else for(n=v(t,a[l-=257],u[l]),o=y(t,r),f=c=t.destLen-v(t,i[o],s[o]);f<c+n;++f)t.dest[t.destLen++]=t.dest[f]}}function w(t){for(var e,r;t.bitcount>8;)t.sourceIndex--,t.bitcount-=8;if((e=256*(e=t.source[t.sourceIndex+1])+t.source[t.sourceIndex])!==(65535&~(256*t.source[t.sourceIndex+3]+t.source[t.sourceIndex+2])))return-3;for(t.sourceIndex+=4,r=e;r;--r)t.dest[t.destLen++]=t.source[t.sourceIndex++];return t.bitcount=0,0}!function(t,e){var r;for(r=0;r<7;++r)t.table[r]=0;for(t.table[7]=24,t.table[8]=152,t.table[9]=112,r=0;r<24;++r)t.trans[r]=256+r;for(r=0;r<144;++r)t.trans[24+r]=r;for(r=0;r<8;++r)t.trans[168+r]=280+r;for(r=0;r<112;++r)t.trans[176+r]=144+r;for(r=0;r<5;++r)e.table[r]=0;for(e.table[5]=32,r=0;r<32;++r)e.trans[r]=r}(n,o),h(a,u,4,3),h(i,s,2,1),a[28]=0,u[28]=258,t.exports=function(t,e){var a,u,i=new r(t,e);do{switch(a=d(i),v(i,2,0)){case 0:u=w(i);break;case 1:u=A(i,n,o);break;case 2:g(i,i.ltree,i.dtree),u=A(i,i.ltree,i.dtree);break;default:u=-3}if(0!==u)throw new Error("Data error")}while(!a);return i.destLen<i.dest.length?"function"==typeof i.dest.slice?i.dest.slice(0,i.destLen):i.dest.subarray(0,i.destLen):i.dest}},954:(t,e)=>{!function(t){"use strict";var e="undefined"!=typeof Uint8Array?Uint8Array:Array,r="+".charCodeAt(0),n="/".charCodeAt(0),o="0".charCodeAt(0),a="a".charCodeAt(0),u="A".charCodeAt(0),i="-".charCodeAt(0),s="_".charCodeAt(0);function c(t){var e=t.charCodeAt(0);return e===r||e===i?62:e===n||e===s?63:e<o?-1:e<o+10?e-o+26+26:e<u+26?e-u:e<a+26?e-a+26:void 0}t.toByteArray=function(t){var r,n,o,a,u,i;if(t.length%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var s=t.length;u="="===t.charAt(s-2)?2:"="===t.charAt(s-1)?1:0,i=new e(3*t.length/4-u),o=u>0?t.length-4:t.length;var f=0;function l(t){i[f++]=t}for(r=0,n=0;r<o;r+=4,n+=3)l((16711680&(a=c(t.charAt(r))<<18|c(t.charAt(r+1))<<12|c(t.charAt(r+2))<<6|c(t.charAt(r+3))))>>16),l((65280&a)>>8),l(255&a);return 2===u?l(255&(a=c(t.charAt(r))<<2|c(t.charAt(r+1))>>4)):1===u&&(l((a=c(t.charAt(r))<<10|c(t.charAt(r+1))<<4|c(t.charAt(r+2))>>2)>>8&255),l(255&a)),i},t.fromByteArray=function(t){var e,r,n,o,a=t.length%3,u="";function i(t){return"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(t)}for(e=0,n=t.length-a;e<n;e+=3)u+=i((o=r=(t[e]<<16)+(t[e+1]<<8)+t[e+2])>>18&63)+i(o>>12&63)+i(o>>6&63)+i(63&o);switch(a){case 1:u+=i((r=t[t.length-1])>>2),u+=i(r<<4&63),u+="==";break;case 2:u+=i((r=(t[t.length-2]<<8)+t[t.length-1])>>10),u+=i(r>>4&63),u+=i(r<<2&63),u+="="}return u}}(e)}},e={};function r(n){var o=e[n];if(void 0!==o)return o.exports;var a=e[n]={exports:{}};return t[n](a,a.exports,r),a.exports}r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var n={};return(()=>{"use strict";function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t(e)}function e(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}function o(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,a(n.key),n)}}function a(e){var r=function(e){if("object"!=t(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,"string");if("object"!=t(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==t(r)?r:r+""}r.d(n,{default:()=>Q});var u,i=function(){return t=function t(e,r){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.transformFunctions=e,this.options=r},(r=[{key:"processHtmlWithFunctions",value:function(t){if(""===t)return t;var r,n=t,o=function(t,r){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,r){if(t){if("string"==typeof t)return e(t,r);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?e(t,r):void 0}}(t))||r&&t&&"number"==typeof t.length){n&&(t=n);var o=0,a=function(){};return{s:a,n:function(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}},e:function(t){throw t},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var u,i=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return i=t.done,t},e:function(t){s=!0,u=t},f:function(){try{i||null==n.return||n.return()}finally{if(s)throw u}}}}(this.transformFunctions);try{for(o.s();!(r=o.n()).done;){var a=r.value;n=this.processHtml(n,a)}}catch(t){o.e(t)}finally{o.f()}return n}},{key:"processHtml",value:function(t,e){if(""===t)return t;for(var r,n=/(<[^>]+>)|([^<]+)/g,o=[];null!==(r=n.exec(t));)r[1]?o.push({type:"tag",value:r[1]}):r[2]&&o.push({type:"text",value:r[2]});for(var a=0;a<o.length;a++)if("text"===o[a].type){for(var u="",i=a+1;i<o.length;i++)if("text"===o[i].type){u=o[i].value;break}var s=o[a].value;s=e(s,u,this.options),o[a].value=s}return o.map((function(t){return t.value})).join("")}}])&&o(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,r}(),s=r(667),c=r(954);const f=[[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]],l=new s(c.toByteArray("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")),h=function(t){switch(t){case 33:case 39:case 40:case 42:return 12;case 35:return 5;default:return t}},p=function(t){switch(t){case 37:case 38:return 34;case 41:return 22;default:return t}};class b{constructor(t,e=!1){this.position=t,this.required=e}}u=class{nextCodePoint(){const t=this.string.charCodeAt(this.pos++),e=this.string.charCodeAt(this.pos);return 55296<=t&&t<=56319&&56320<=e&&e<=57343?(this.pos++,1024*(t-55296)+(e-56320)+65536):t}nextCharClass(){return h(l.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(t){let e=!1;switch(f[this.curClass][this.nextClass]){case 0:e=!0;break;case 1:e=41===t;break;case 2:if(e=41===t,!e)return e=!1,e;break;case 3:if(41!==t)return e}return this.LB8a&&(e=!1),!this.LB21a||16!==this.curClass&&17!==this.curClass?this.LB21a=13===this.curClass:(e=!1,this.LB21a=!1),28===this.curClass?(this.LB30a++,2==this.LB30a&&28===this.nextClass&&(e=!0,this.LB30a=0)):this.LB30a=0,this.curClass=this.nextClass,e}nextBreak(){if(null==this.curClass){let t=this.nextCharClass();this.curClass=p(t),this.nextClass=t,this.LB8a=31===t,this.LB30a=0}for(;this.pos<this.string.length;){this.lastPos=this.pos;const t=this.nextClass;if(this.nextClass=this.nextCharClass(),34===this.curClass||36===this.curClass&&37!==this.nextClass)return this.curClass=p(h(this.nextClass)),new b(this.lastPos,!0);let e=this.getSimpleBreak();if(null===e&&(e=this.getPairTableBreak(t)),this.LB8a=31===this.nextClass,e)return new b(this.lastPos)}return this.lastPos<this.string.length?(this.lastPos=this.string.length,new b(this.string.length)):null}constructor(t){this.string=t,this.pos=0,this.lastPos=0,this.curClass=null,this.nextClass=null,this.LB8a=!1,this.LB21a=!1,this.LB30a=0}};var d=/(?:[\t-\r -~\xA0-\xA5\xAA\xAC\xB1-\xB3\xB7\xB9\xBA\xBF-\u02B8\u02BC\u02C7\u02C9-\u02CB\u02CD\u02D7\u02D9\u02E0-\u02E4\u0300-\u030E\u0310\u0311\u0313\u0320\u0323-\u0325\u032D\u032E\u0330\u0331\u0358\u035E\u0363-\u036F\u0485\u0486\u0951\u0952\u10FB\u1680\u1D00-\u1D25\u1D2C-\u1D5C\u1D62-\u1D65\u1D6B-\u1D77\u1D79-\u1DBE\u1DF8\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\u2E17\u3000\uA700-\uA707\uA722-\uA787\uA78B-\uA7CD\uA7D0\uA7D1\uA7D3\uA7D5-\uA7DC\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,v=/(|[|{|〔|〈|《|「|『|【|〘|〖|“|‘/,y=/)|]|}|〕|〉|》|」|』|】|〙|〗|”|’/,g=/・|:|;/,A=/、|,/,w=/。|./,m=new RegExp("[\\p{scx=Hiragana}\\p{scx=Katakana}|ヲ-゚\\p{scx=Han}".concat(v.source).concat(y.source).concat(g.source).concat(A.source).concat(w.source,"]+"),"u"),P=new RegExp("[".concat("—‥…_",String.fromCharCode(9472),"-").concat(String.fromCharCode(9599),"]+"),"g"),x=/[\s\u00A0]/,B=new RegExp("".concat(/,/.source,"|").concat(/\./.source,"|").concat(v.source,"|").concat(y.source,"|").concat(g.source,"|").concat(A.source,"|").concat(w.source),"u"),S={isLatin:function(t){return d.test(t)},isJapanese:function(t){return m.test(t)},hasLanguageTransition:function(t,e){return S.isJapanese(t)!==S.isJapanese(e)},shouldAddThinSpace:function(t,e){return S.hasLanguageTransition(t,e)}},O="typesetting",C=function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",o=r?' style="'.concat(r,'"'):"";return'<span class="'.concat(e,'"').concat(o).concat(n,">").concat(t,"</span>")},j=function(t,e,r,n){var o="letter-spacing: ".concat(r,";"),a=' data-content="'.concat(n?" ":"&nbsp;",'"');return C(t,e,o,a)},L=function(t){var e=new Intl.Segmenter("ja-JP",{granularity:"word"});return Array.from(e.segment(t),(function(t){return t.segment}))},D=function(t,e){return!x.test(t)&&!x.test(e)&&(function(t,e){return B.test(t)||B.test(e)}(t,e)?function(t,e){for(var r=new RegExp("(".concat(y.source,"|").concat(A.source,"|").concat(w.source,")")),n={spaceBefore:{regex:v,hasSpaceBefore:!0,hasSpaceAfter:!1},spaceAfter:{regex:r,hasSpaceBefore:!1,hasSpaceAfter:!0},spaceBoth:{regex:g,hasSpaceBefore:!0,hasSpaceAfter:!0}},o=0,a=Object.values(n);o<a.length;o++){var u=a[o],i=u.regex,s=u.hasSpaceBefore,c=u.hasSpaceAfter;if(s&&i.test(e)&&!i.test(t))return!0;if(c&&i.test(t)&&!i.test(e))return!0}return!1}(t,e):S.shouldAddThinSpace(t,e))},F=function(t,e){var r=t.slice(-1)+e.slice(0,1),n=new u(r).nextBreak();return!!n&&1===n.position},k=function(t,e,r){var n=L(t),o=L(e);return n.reduce((function(t,e,n,a){return t+function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r=arguments.length>2?arguments[2]:void 0;if(!e)return t;var n,o=r.insertThinSpaces&&D(t,e),a=F(t,e);return o?t+function(t,e){var r="".concat(O,"-thin-space");return j("",r,t,e)}(g.test(t)||g.test(e)?"calc(".concat(r.thinSpaceWidth," / 2.0)"):null!==(n=r.thinSpaceWidth)&&void 0!==n?n:"",a):r.useWordBreak&&a?t+"<wbr>":t}(e,a[n+1]||o[0],r)}),"")};function X(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}var H=function(t,e,r){return" "===t?t:(n=t,o=r.useWordBreak,a="".concat(O,"-wrapper"),u="".concat(O,"-word-break"),i=o?"".concat(a," ").concat(u):a,C(n,i));var n,o,a,u,i},z=function(t,e,r){return" "===t?t:r.wrapLatin&&S.isLatin(t)?t.replace(d,(function(t){return e=t,r="".concat(O,"-latin"),C(e,r);var e,r})):r.noSpaceBetweenNoBreaks&&(n=t,P.test(n))?t.replace(P,(function(t){return e=t,r="".concat(O,"-no-breaks"),C(e,r);var e,r})):t;var n},W=function(t,e,r){var n,o=function(t){if(Array.isArray(t))return X(t)}(n=t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(n)||function(t,e){if(t){if("string"==typeof t)return X(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?X(t,e):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 o.map((function(t,n){var a,u=o[n+1]||e[0]||"",i=null===(a=r.kerningRules)||void 0===a?void 0:a.find((function(e){return e.between[0]===t&&e.between[1]===u}));if(i){var s="number"==typeof i.value?i.value:parseInt(i.value,10),c=!r.useWordBreak&&F(t,u);return t+function(t,e){if(0===t)return"";var r="".concat(O,"-kerning");if(t<0){var n="margin: ".concat(t/1e3/2+"em",";");return C("",r,n)}return j("",r,t/1e3+"em",e)}(s,c)}return t})).join("")},U=function(t,e,r){if(!r.wrapChars||0===r.wrapChars.length)return t;var n=t;return r.wrapChars.forEach((function(t){var e=t.char;if(1===Array.from(e).length){var r=t.label?t.label:e;if(/^[^"'<>\s]+$/.test(r)){var o="typesetting-char-".concat(r),a=e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"),u=new RegExp("(".concat(a,"+)"),"gu");n=n.replace(u,(function(t){return'<span class="'.concat(o,'">').concat(t,"</span>")}))}else console.error("Invalid configuration in wrapChars: '".concat(e,"' is used. To be used as a CSS class, the 'label' property must not contain spaces, quotes, '<' or '>'. Skipping this wrapping rule."))}else console.error("Invalid configuration in wrapChars: '".concat(e,"' is not valid. 'char' must be a single character."))})),n},E=window;function T(t){return T="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},T(t)}function V(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function I(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?V(Object(r),!0).forEach((function(e){N(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):V(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}function N(t,e,r){return(e=q(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function Z(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,q(n.key),n)}}function q(t){var e=function(t){if("object"!=T(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,"string");if("object"!=T(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==T(e)?e:e+""}function R(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(R=function(){return!!t})()}function K(t){return K=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},K(t)}function J(t,e){return J=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},J(t,e)}var Q=function(t){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e);var r=void 0!==Intl.Segmenter;r||console.warn("Intl.Segmenter is not supported in this environment. \nTherefore, the options `useWordBreak` and `insertThinSpaces` will be ignored. \nFor more information about Intl.Segmenter, please visit:\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter");var n=r?[H,k,z,W,U]:[z,W,U],o=e.validateOptions(t);return function(t,e,r){return e=K(e),function(t,e){if(e&&("object"==T(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,R()?Reflect.construct(e,r||[],K(t).constructor):e.apply(t,r))}(this,e,[n,o])}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&J(t,e)}(e,t),r=e,o=[{key:"getDefaultOptions",value:function(){return{useWordBreak:!0,wrapLatin:!0,wrapChars:[],noSpaceBetweenNoBreaks:!0,insertThinSpaces:!0,thinSpaceWidth:"0.2em",kerningRules:[]}}},{key:"validateOptions",value:function(t){return t.kerningRules&&(t.kerningRules=t.kerningRules.filter(e.isValidKerningRule)),I(I({},e.getDefaultOptions()),t)}},{key:"isValidKerningRule",value:function(t){return 1===t.between[0].length&&1===t.between[1].length||(console.warn("Kerning rule between '".concat(t.between[0],"' and '").concat(t.between[1],"' must be single characters.")),!1)}}],(n=[{key:"render",value:function(t){return t?this.processHtmlWithFunctions(t):""}},{key:"renderToElements",value:function(t){var e=this;t&&(Array.isArray(t)||(t=[t]),t.forEach((function(t){var r=e.render(t.innerHTML);t.innerHTML=r})))}},{key:"renderToSelector",value:function(t){if(t){var e=E.document.querySelectorAll(t);this.renderToElements(Array.from(e))}}}])&&Z(r.prototype,n),o&&Z(r,o),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,o}(i)})(),n.default})()));
@@ -2,5 +2,6 @@ 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
4
  declare const applyKerningToSegment: (currentSegment: string, nextSegment: string, options: TypesettingOptions) => string;
5
- export { applyStyleToText, applyStyleToSegment, applyKerningToSegment };
5
+ declare const applyStyleToChar: (currentSegment: string, nextSegment: string, options: TypesettingOptions) => string;
6
+ export { applyStyleToText, applyStyleToSegment, applyKerningToSegment, applyStyleToChar };
6
7
  //# sourceMappingURL=apply-style.d.ts.map
@@ -1 +1 @@
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
+ {"version":3,"file":"apply-style.d.ts","sourceRoot":"","sources":["../src/apply-style.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAU7C,QAAA,MAAM,gBAAgB,qBAAsB,MAAM,iBAAiB,MAAM,WAAW,kBAAkB,KAAG,MAKxG,CAAA;AAWD,QAAA,MAAM,mBAAmB,mBAAoB,MAAM,eAAe,MAAM,WAAW,kBAAkB,KAAG,MAgBvG,CAAA;AAUD,QAAA,MAAM,qBAAqB,mBAAoB,MAAM,eAAe,MAAM,WAAW,kBAAkB,KAAG,MAmBzG,CAAA;AAkBD,QAAA,MAAM,gBAAgB,mBAAoB,MAAM,eAAe,MAAM,WAAW,kBAAkB,KAAG,MAyCpG,CAAA;AAED,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,CAAA"}
@@ -36,8 +36,36 @@ const applyKerningToSegment = (currentSegment, nextSegment, options) => {
36
36
  });
37
37
  return kernedChars.join("");
38
38
  };
39
+ const escapeRegExp = (str) => str.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&");
40
+ const applyStyleToChar = (currentSegment, nextSegment, options) => {
41
+ if (!options.wrapChars || options.wrapChars.length === 0) {
42
+ return currentSegment;
43
+ }
44
+ let updatedSegment = currentSegment;
45
+ options.wrapChars.forEach((rule) => {
46
+ const rawChar = rule.char;
47
+ if (Array.from(rawChar).length !== 1) {
48
+ console.error(`Invalid configuration in wrapChars: '${rawChar}' is not valid. 'char' must be a single character.`);
49
+ return;
50
+ }
51
+ const label = rule.label ? rule.label : rawChar;
52
+ const validClassRegex = /^[^"'<>\s]+$/;
53
+ if (!validClassRegex.test(label)) {
54
+ console.error(
55
+ `Invalid configuration in wrapChars: '${rawChar}' is used. To be used as a CSS class, the 'label' property must not contain spaces, quotes, '<' or '>'. Skipping this wrapping rule.`
56
+ );
57
+ return;
58
+ }
59
+ const className = `typesetting-char-${label}`;
60
+ const escapedChar = escapeRegExp(rawChar);
61
+ const regex = new RegExp(`(${escapedChar}+)`, "gu");
62
+ updatedSegment = updatedSegment.replace(regex, (match) => `<span class="${className}">${match}</span>`);
63
+ });
64
+ return updatedSegment;
65
+ };
39
66
  export {
40
67
  applyKerningToSegment,
68
+ applyStyleToChar,
41
69
  applyStyleToSegment,
42
70
  applyStyleToText
43
71
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,qBAAqB,CAAA;AAI/C,OAAO,KAAK,EAAE,kBAAkB,EAAe,MAAM,UAAU,CAAA;AAM/D,cAAM,UAAW,SAAQ,aAAa;IAIpC,MAAM,CAAC,iBAAiB,IAAI,QAAQ,CAAC,kBAAkB,CAAC;gBAW5C,OAAO,GAAE,kBAAuB;IAgC5C,OAAO,CAAC,MAAM,CAAC,eAAe;IAkB9B,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAiBjC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAY/B,gBAAgB,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,IAAI,GAAG,IAAI;IAmB5D,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;CAMhD;AAED,eAAe,UAAU,CAAA;AACzB,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,qBAAqB,CAAA;AAI/C,OAAO,KAAK,EAAE,kBAAkB,EAAe,MAAM,UAAU,CAAA;AAM/D,cAAM,UAAW,SAAQ,aAAa;IAIpC,MAAM,CAAC,iBAAiB,IAAI,QAAQ,CAAC,kBAAkB,CAAC;gBAY5C,OAAO,GAAE,kBAAuB;IAgC5C,OAAO,CAAC,MAAM,CAAC,eAAe;IAkB9B,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAiBjC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAY/B,gBAAgB,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,IAAI,GAAG,IAAI;IAmB5D,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;CAMhD;AAED,eAAe,UAAU,CAAA;AACzB,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA"}
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import HTMLProcessor from "./html-processor.js";
2
2
  import insertSeparatorsToText from "./insert-separators.js";
3
- import { applyStyleToText, applyStyleToSegment, applyKerningToSegment } from "./apply-style.js";
3
+ import { applyStyleToText, applyStyleToSegment, applyKerningToSegment, applyStyleToChar } from "./apply-style.js";
4
4
  import win from "./win.js";
5
5
  class Typesetter extends HTMLProcessor {
6
6
  /**
@@ -10,6 +10,7 @@ class Typesetter extends HTMLProcessor {
10
10
  return {
11
11
  useWordBreak: true,
12
12
  wrapLatin: true,
13
+ wrapChars: [],
13
14
  noSpaceBetweenNoBreaks: true,
14
15
  insertThinSpaces: true,
15
16
  thinSpaceWidth: "0.2em",
@@ -23,7 +24,7 @@ class Typesetter extends HTMLProcessor {
23
24
  "Intl.Segmenter is not supported in this environment. \nTherefore, the options `useWordBreak` and `insertThinSpaces` will be ignored. \nFor more information about Intl.Segmenter, please visit:\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter"
24
25
  );
25
26
  }
26
- const transformFunctions = isIntlSegmenterSupported ? [applyStyleToText, insertSeparatorsToText, applyStyleToSegment, applyKerningToSegment] : [applyStyleToSegment, applyKerningToSegment];
27
+ const transformFunctions = isIntlSegmenterSupported ? [applyStyleToText, insertSeparatorsToText, applyStyleToSegment, applyKerningToSegment, applyStyleToChar] : [applyStyleToSegment, applyKerningToSegment, applyStyleToChar];
27
28
  const validatedOptions = Typesetter.validateOptions(options);
28
29
  super(transformFunctions, validatedOptions);
29
30
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "palt-typesetting",
3
- "version": "0.8.0",
3
+ "version": "0.9.0",
4
4
  "description": "Typesetting Library for Proportional Spacing",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -34,7 +34,7 @@
34
34
  "./dist/win.js": "./dist/win-browser.js"
35
35
  },
36
36
  "dependencies": {
37
- "jsdom": "^25.0.0",
37
+ "jsdom": "^26.0.0",
38
38
  "linebreak": "^1.1.0"
39
39
  },
40
40
  "devDependencies": {
@@ -51,6 +51,6 @@
51
51
  "typescript": "^5",
52
52
  "vitest": "^3.0.5",
53
53
  "webpack": "^5.90.3",
54
- "webpack-cli": "^5.1.4"
54
+ "webpack-cli": "^6.0.1"
55
55
  }
56
56
  }
package/types/index.d.ts CHANGED
@@ -24,6 +24,14 @@ export interface TypesettingOptions {
24
24
  */
25
25
  wrapLatin?: boolean
26
26
 
27
+ /**
28
+ * 特例文字の設定。
29
+ * 指定された char をラップします。
30
+ * ラップされた文字は、.typesetting-char-[label] というクラス名でラップされます。
31
+ * label が未設定の場合は、char の値がそのままクラス名の一部として使用されます。
32
+ */
33
+ wrapChars?: WrapChar[]
34
+
27
35
  /**
28
36
  * 分離禁則文字を .typesetting-no-breaks でラップし、文字間を 0 に設定します。
29
37
  * useWordBreak が true の場合にのみ有効です。
@@ -59,3 +67,14 @@ export interface KerningRule {
59
67
  between: [string, string]
60
68
  value: string | number
61
69
  }
70
+
71
+ /**
72
+ * 特例文字の設定を定義するインターフェース。
73
+ * char: ラッピング対象の文字を指定します。
74
+ * label: ラッピング時に使用するクラス名の一部となる文字列(任意)。
75
+ * label が未設定の場合は、char の値がそのままクラス名の一部として使用されます。
76
+ */
77
+ export interface WrapChar {
78
+ char: string
79
+ label?: string
80
+ }