/
tabito.min.js
2 lines (2 loc) · 6.43 KB
/
tabito.min.js
1
2
"use strict";var tabito=(()=>{var w=Object.defineProperty;var W=Object.getOwnPropertyDescriptor;var Y=Object.getOwnPropertyNames;var z=Object.prototype.hasOwnProperty;var N=(n,t)=>{for(var r in t)w(n,r,{get:t[r],enumerable:!0})},C=(n,t,r,e)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Y(t))!z.call(n,s)&&s!==r&&w(n,s,{get:()=>t[s],enumerable:!(e=W(t,s))||e.enumerable});return n};var D=n=>C(w({},"__esModule",{value:!0}),n);var tt={};N(tt,{_findGreedyPath:()=>k,addSynonym:()=>B,chunkInput:()=>X,enumerateAcceptable:()=>L,sentenceToGraph:()=>V,validateSynonyms:()=>A});function h(n,t,r,e=!1){t in n||(n[t]=[]),(!e||!n[t].includes(r))&&n[t].push(r)}function $(n){let t={};for(let r in n)for(let e of n[r])h(t,e,r);return t}function S(n){let t={};for(let r in n)for(let e of n[r]){if(e in t)throw new Error("non-unique values");t[e]=r}return t}function G(n,t){let r=[],e=-1;for(;(e=n.indexOf(t,e+1))>=0;)r.push(e);return r}function T(n,t){if(n.length===0)throw new Error("empty");let r=n[0],e=t(r);for(let s of n){let o=t(s);o>e&&(e=o,r=s)}return r}function F(n,t){return typeof n==typeof t&&(typeof n=="string"?n===t:n.rt===t.rt)}function m(n){return n.map(t=>typeof t=="string"?t:t.ruby).join("")}function b(n,t){let r=n.indexOf(t);return r>=0&&n.indexOf(t,r+1)<0}function*K(n,t){let r=Math.min(n.length,t.length);for(let e=0;e<r;++e)yield[n[e],t[e]]}function*R(n,t){for(let r=n.length-1,e=t.length-1;r>=0&&e>=0;--r,--e)yield[n[r],t[e]]}var v="\u3041\u3042\u3043\u3044\u3045\u3046\u3047\u3048\u3049\u304A\u304B\u304C\u304D\u304E\u304F\u3050\u3051\u3052\u3053\u3054\u3055\u3056\u3057\u3058\u3059\u305A\u305B\u305C\u305D\u305E\u305F\u3060\u3061\u3062\u3063\u3064\u3065\u3066\u3067\u3068\u3069\u306A\u306B\u306C\u306D\u306E\u306F\u3070\u3071\u3072\u3073\u3074\u3075\u3076\u3077\u3078\u3079\u307A\u307B\u307C\u307E\u307F\u3080\u3081\u3082\u3083\u3084\u3085\u3086\u3087\u3088\u3089\u308A\u308B\u308C\u308D\u308E\u308F\u3090\u3091\u3092\u3093\u3094\u3095\u3096",E="\u30A1\u30A2\u30A3\u30A4\u30A5\u30A6\u30A7\u30A8\u30A9\u30AA\u30AB\u30AC\u30AD\u30AE\u30AF\u30B0\u30B1\u30B2\u30B3\u30B4\u30B5\u30B6\u30B7\u30B8\u30B9\u30BA\u30BB\u30BC\u30BD\u30BE\u30BF\u30C0\u30C1\u30C2\u30C3\u30C4\u30C5\u30C6\u30C7\u30C8\u30C9\u30CA\u30CB\u30CC\u30CD\u30CE\u30CF\u30D0\u30D1\u30D2\u30D3\u30D4\u30D5\u30D6\u30D7\u30D8\u30D9\u30DA\u30DB\u30DC\u30DE\u30DF\u30E0\u30E1\u30E2\u30E3\u30E4\u30E5\u30E6\u30E7\u30E8\u30E9\u30EA\u30EB\u30EC\u30ED\u30EE\u30EF\u30F0\u30F1\u30F2\u30F3\u30F4\u30F5\u30F6";if(v.length!==E.length)throw new Error("Kana strings not same length?");var P=new Map([]),H=new Map([]);v.split("").forEach((n,t)=>{P.set(E[t],n),H.set(n,E[t])});function x(n){return n.split("").map(t=>P.get(t)||t).join("")}function _(n,{textToKeys:t}){if(!n)return;let r=[];for(let e in t)n.startsWith(x(e))&&r.push(e);return r}function k(n,t){let r=x(n);return((_(r,t)??[]).flatMap(o=>t.textToKeys[o])??[]).map(o=>{let i=j(n,o,t);return{result:i.text,start:t.ancestorKeys[o]||!1,end:!!i.end}})}function j(n,t,r){if(!n)return{text:n};let{keyToNext:e,keyToText:s}=r,o=s[t],i=x(o),f=x(n);if(!f.startsWith(i))throw new Error("bad startKey");let u=e[t]?.filter(p=>f.startsWith(i+x(s[p])))??[],a=n.slice(0,o.length);if(u.length===0)return{text:a,end:!!r.leafKeys[t]};let l=n.slice(o.length),y=u.map(p=>j(l,p,r)),c=T(y,p=>p.text.length);return{text:a+c.text,end:c.end}}function X(n,t){let r=[],e=n;for(;e;){let s=k(e,t);if(s.length===0)r.push({text:e[0],status:"unknown",start:!1,full:!1}),e=e.slice(1);else{let o=T(s,i=>i.result.length);r.push({text:o.result,status:"ok",start:o.start,full:o.start&&o.end}),e=e.slice(o.result.length)}}return r}function B(n,t){let r=n.furigana,e=m(r),s=m(t),o=0;for(let[a,l]of K(r,t))if(F(a,l)){let y=m(r.slice(o+1)),c=m(t.slice(o+1));y&&c&&b(e,y)&&b(s,c)&&o++}else break;r=r.slice(o),t=t.slice(o);let i=0;for(let[a,l]of R(r,t))if(F(a,l)){let y=m(r.slice(0,i-1)),c=m(t.slice(0,i-1));y&&c&&b(e,y)&&b(s,c)&&i--}else break;r=r.slice(0,i||void 0),t=t.slice(0,i||void 0);let f=m(r),u=M(t);return u===M(r)||n.synonyms&&n.synonyms.some(([a,l])=>u===M(l)&&f===a)?n:{...n,synonyms:(n.synonyms??[]).concat([[f,t]])}}function M(n){return n.map(t=>typeof t=="string"?t:`${t.rt}${t.ruby}`).join("")}function L(n){let t=[n.furigana];if(!n.synonyms||n.synonyms.length===0)return t;let r=[];for(let s of n.furigana){r.push(s);let o=(typeof s=="string"?s.length:s.ruby.length)-1;o>=1&&r.push(...Array(o).fill(void 0))}let e=m(n.furigana);for(let[s,o]of n.synonyms){let i=J(e,s);for(let f of i){let u=r.slice();u.splice(f,s.length,...o),t.push(u.filter(a=>!!a))}}return t}function J(n,t){let r=[],e=0;for(;e>=0;)e=n.indexOf(t,e),e>=0&&(r.push(e),e+=t.length);return r}function A(n){let t=n.furigana.map(s=>typeof s=="string"?s:s.ruby),r=t.join(""),e=t.flatMap((s,o)=>Array.from({length:s.length},()=>o));for(let[s]of n.synonyms??[]){let o=r.indexOf(s);if(o<0)return!1;let i=o+s.length-1;if(o>0&&e[o]===e[o-1]||i<r.length-1&&e[i]===e[i+1])return!1}return!0}function Q(n,t,r){let e=n.furigana.map(i=>typeof i=="string"?i:i.ruby),s=e.join(""),o=e.flatMap((i,f)=>Array.from({length:i.length},()=>f));for(let[i,f]of n.synonyms??[]){let u=G(s,i);if(u.length===0)throw new Error("synonym not found in raw sentence? "+i);for(let a of u){let l=a+i.length-1,y=o[a],c=o[l],p=O(n,y).flatMap(g=>r[g]??[]);for(let[g,d]of f.entries())p=U({f:d,fidx:`${i}/${a}/${g}`,previousKeys:p,textToKeys:t,keyToPrev:r});if(n.furigana[c+1])for(let g of O(n,c+1))for(let d of p)h(r,g,d);let I=O(n,c),q=Object.entries(r).filter(([,g])=>I.some(d=>g.includes(d))).map(([g])=>g);for(let g of q)for(let d of p)h(r,g,d,Z)}}}var Z=!0;function O(n,t){if(t<0||t>=n.furigana.length)throw new Error("weird index");let r=n.furigana[t];return typeof r=="string"?[`${r}/${t}`]:[`${r.rt}/${t}`,`${r.ruby}/${t}`]}function U({f:n,fidx:t,previousKeys:r,textToKeys:e,keyToPrev:s}){if(typeof n=="string"){let i=`${n}/${t}`;h(e,n,i);for(let f of r)h(s,i,f);return[i]}let o=[];{let i=`${n.ruby}/${t}`;h(e,n.ruby,i);for(let f of r)h(s,i,f);o.push(i)}{let i=`${n.rt}/${t}`;h(e,n.rt,i);for(let f of r)h(s,i,f);o.push(i)}return o}function V(n){if(!A(n))throw new Error("Invalid synonyms");let t={},r={},e=[];for(let[a,l]of n.furigana.entries())e=U({f:l,fidx:a,previousKeys:e,textToKeys:t,keyToPrev:r});Q(n,t,r);let s=$(r),o=S(t),i=Object.keys(o),f=Object.fromEntries(i.filter(a=>!(a in r)||r[a].length===0).map(a=>[a,!0])),u=Object.fromEntries(i.filter(a=>!(a in s)||s[a].length===0).map(a=>[a,!0]));return{textToKeys:t,keyToPrev:r,keyToText:o,keyToNext:s,ancestorKeys:f,leafKeys:u}}return D(tt);})();
//# sourceMappingURL=tabito.min.js.map