hangul-util
Version:
Korean Hangul Utils
1 lines • 13.2 kB
JavaScript
(()=>{"use strict";var n={d:(t,e)=>{for(var o in e)n.o(e,o)&&!n.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},o:(n,t)=>Object.prototype.hasOwnProperty.call(n,t),r:n=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})}},t={};n.r(t),n.d(t,{chunkAtEnd:()=>L,combineByJong:()=>rn,combineByJung:()=>on,combineHangul:()=>nn,convertKey:()=>Un,correctByDistance:()=>Gn,decode:()=>Dn,divideByJong:()=>z,divideByJung:()=>R,divideHangul:()=>G,divideHangulByGroups:()=>E,encode:()=>Bn,formatDate:()=>un,formatJosa:()=>dn,formatNumber:()=>cn,formatNumberAll:()=>sn,getDistance:()=>En,getLocal:()=>_n,getLocalByGroups:()=>Fn,getNestedProperty:()=>F,includesByCho:()=>zn,isCho:()=>N,isChoByGroups:()=>D,isHangul:()=>J,isHangulByGroups:()=>P,isJong:()=>M,isJongByGroups:()=>w,isJung:()=>k,isJungByGroups:()=>O,isNumber:()=>I,josa:()=>an,makePercentByObject:()=>U,makeRegexByCho:()=>Rn,normalize:()=>Zn,reverseByArray:()=>q,reverseByObject:()=>Z,sortByASC:()=>Yn,sortByDESC:()=>Jn,sortByGroups:()=>Pn,splitByKey:()=>_,toBanmal:()=>yn,toHonorific:()=>jn,zeroPad:()=>K});const e=["ㄱ","ㄲ","ㄴ","ㄷ","ㄸ","ㄹ","ㅁ","ㅂ","ㅃ","ㅅ","ㅆ","ㅇ","ㅈ","ㅉ","ㅊ","ㅋ","ㅌ","ㅍ","ㅎ"],o=["ㅏ","ㅐ","ㅑ","ㅒ","ㅓ","ㅔ","ㅕ","ㅖ","ㅗ","ㅘ","ㅙ","ㅚ","ㅛ","ㅜ","ㅝ","ㅞ","ㅟ","ㅠ","ㅡ","ㅢ","ㅣ"],r=["","ㄱ","ㄲ","ㄳ","ㄴ","ㄵ","ㄶ","ㄷ","ㄹ","ㄺ","ㄻ","ㄼ","ㄽ","ㄾ","ㄿ","ㅀ","ㅁ","ㅂ","ㅄ","ㅅ","ㅆ","ㅇ","ㅈ","ㅊ","ㅋ","ㅌ","ㅍ","ㅎ"],i={ㅘ:"ㅗㅏ",ㅙ:"ㅗㅐ",ㅚ:"ㅗㅣ",ㅝ:"ㅜㅓ",ㅞ:"ㅜㅔ",ㅟ:"ㅜㅣ",ㅢ:"ㅡㅣ"},l={ㄳ:"ㄱㅅ",ㄵ:"ㄴㅈ",ㄶ:"ㄴㅎ",ㄺ:"ㄹㄱ",ㄻ:"ㄹㅁ",ㄼ:"ㄹㅂ",ㄽ:"ㄹㅅ",ㄾ:"ㄹㅌ",ㄿ:"ㄹㅍ",ㅀ:"ㄹㅎ",ㅄ:"ㅂㅅ"},u=o[0].charCodeAt(0),c=o[o.length-1].charCodeAt(0),s=r[1].charCodeAt(0),a=r[r.length-1].charCodeAt(0),d="가".charCodeAt(0),g="힣".charCodeAt(0),f="까".charCodeAt(0)-"가".charCodeAt(0),p="개".charCodeAt(0)-"가".charCodeAt(0),h={ㅂ:"q",ㅃ:"Q",ㅈ:"w",ㅉ:"W",ㄷ:"e",ㄸ:"E",ㄱ:"r",ㄲ:"R",ㅅ:"t",ㅆ:"T",ㅛ:"y",ㅕ:"u",ㅑ:"i",ㅐ:"o",ㅒ:"O",ㅔ:"p",ㅖ:"P",ㅁ:"a",ㄴ:"s",ㅇ:"d",ㄹ:"f",ㅎ:"g",ㅗ:"h",ㅓ:"j",ㅏ:"k",ㅣ:"l",ㅋ:"z",ㅌ:"x",ㅊ:"c",ㅍ:"v",ㅠ:"b",ㅜ:"n",ㅡ:"m"},v=["","일","이","삼","사","오","육","칠","팔","구"],m=["","십","백","천"],y=["","만","억","조","경","해","자","양","구","간","정","재","극","항하사","아승기","나유타","불가사의","무량대수"],j=y.length*m.length,b=["일","월","화","수","목","금","토"],S={이:"이/가",가:"이/가",을:"을/를",를:"을/를",은:"은/는",는:"은/는",으로:"으로/로",로:"으로/로",와:"와/과",과:"와/과",이나:"이나/나",나:"이나/나",이에:"이에/에",에:"이에/에",이란:"이란/란",란:"이란/란"},A=["g","gg","n","d","dd","r","m","b","bb","s","ss","","j","jj","c","k","t","p","h"],C=["a","ae","ya","yae","eo","e","yeo","ye","o","wa","wae","oe","yo","u","weo","we","wi","yu","eu","eui","i"],$=["","g","gg","gs","n","nj","nh","d","r","rk","rm","rb","rs","rt","rp","rh","m","b","bs","s","ss","ng","j","c","k","t","p","h"];function B(n=0){return s<=n&&n<=a}function M(n=""){for(let t=0;t<n.length;t++)if(!B(n.charCodeAt(t)))return!1;return!!n}function w(n=""){const t=[];for(let e=0;e<n.length;e++)t.push(B(n.charCodeAt(e)));return t}function x(n=""){return B(n.charCodeAt(0))&&!l[n]}function N(n=""){for(let t=0;t<n.length;t++)if(!x(n[t]))return!1;return!!n}function D(n=""){return n.toString().split("").map(x)}function H(n=0){return u<=n&&n<=c}function k(n=""){for(let t=0;t<n.length;t++)if(!H(n.charCodeAt(t)))return!1;return!!n}function O(n=""){const t=[];for(let e=0;e<n.length;e++)t.push(H(n.charCodeAt(e)));return t}function Y(n=0){return d<=n&&n<=g}function J(n=""){for(let t=0;t<n.length;t++)if(!Y(n.charCodeAt(t)))return!1;return!!n}function P(n=""){const t=[];for(let e=0;e<n.length;e++)t.push(Y(n.charCodeAt(e)));return t}function T(n="",t={}){const{isSplit:i,resultType:l}=t,u=n.charCodeAt(0),c=u-d;if(!Y(u))return[n[0]];const s=Math.floor(c/f),a=Math.floor(c%f/p),g=c%p,h=e[s]||"",v=o[a]||"",m=r[g]||"",y=i?R(v):v,j=i?z(m):m;return"index"===l?{cho:s,jung:a,jong:g}:"object"===l?{cho:h,jung:y,jong:j}:"string"===l?h+y+j:(h+y+j).split("")}function E(n="",t={}){var e,o;const r=null===(e=null==t?void 0:t.isSplit)||void 0===e||e,i=null!==(o=null==t?void 0:t.resultType)&&void 0!==o?o:"array";return n.toString().split("").map((n=>T(n,{isSplit:r,resultType:i})))}function G(n="",t=!0){return n.toString().split("").map((n=>T(n,{isSplit:t,resultType:"string"}))).join("").split("")}function R(n){return i[n]||n}function z(n){return l[n]||n}function I(n){return"number"==typeof n&&!isNaN(n)}function _(n=""){var t;return null!==(t=n.match(/[ㄱ-힣a-zA-Z0-9]+/g))&&void 0!==t?t:[]}function F(n=[],t={}){const e="string"==typeof n?_(n):n;if(e.length)return null==e?void 0:e.reduce(((n,t)=>null==n?void 0:n[t]),t)}function K(n="",t=0,e="0"){let o=String(n);const r=String(e);for(let n=t-o.length;n>0;n--)o=r+o;return o}function L(n="",t=1){const e=[];let o=n.length;for(;(o-=t)>0;)e.push(n.substring(o,o+t));return o>-t&&e.push(n.substring(0,o+t)),e}function U(n){const t={};let e=0;for(const t in n)e+=n[t];for(const o in n)I(n[o])&&(t[o]=Number((n[o]/e*100).toFixed(2)));return t}function Z(n){const t={};for(const e in n)t[n[e]]=e;return t}function q(n){const t=[];for(let e=0;e<n.length;e++)Array.isArray(n[e])&&(n[e]=q(n[e])),t.unshift(n[e]);return t}const Q={};function W(n=0,t=0,e=0){const o=d+n*f+t*p+e;return Y(o)?(Q[o]||(Q[o]=String.fromCharCode(o)),Q[o]):""}function V(n="",t="",i=""){const l=on(t),u=rn(i),c=e.indexOf(n),s=o.indexOf(l),a=r.indexOf(u);return-1===c||-1===s||-1===a?n||l||u:W(c,s,a)}function X(n){let t=0;const e=[];for(;t<n.length;){const o=n[t++],r=N(o)?o:"",u=r&&k(n[t])?n[t++]:"";if(!r||!u){e.push(o);continue}const c=i[on(u+n[t])]?n[t++]:"",s=M(n[t])&&!k(n[t+1])?n[t++]:"",a=l[rn(s+n[t])]&&!k(n[t+1])?n[t++]:"";e.push(V(r,u+c,s+a))}return e.join("")}function nn(n=""){const t="string"==typeof n?n.toString().split(""):n,e=[],o=[];for(let n=0;n<t.length;n++){const r=t[n];"string"==typeof r?o.push(...r.toString().split("")):e.push(X(o.splice(0)).concat(X(r.join("").split(""))))}return e.push(X(o)),e.join("")}const tn=Z(i),en=Z(l);function on(n){return tn[n]||n}function rn(n){return en[n]||n}const ln=/Y{2,4}|M{1,2}|D{1,2}|d{1,2}|H{1,2}|m{1,2}|s{1,2}/g;function un(n=new Date,t="YYYY년MM월DD일 HH시mm분ss초"){const e=new Date(n),o=K(e.getFullYear(),4,"0"),r=e.getMonth()+1,i=e.getDate(),l=e.getHours(),u=e.getMinutes(),c=e.getSeconds(),s=e.getDay();return t.replace(ln,(function(n){return{YY:o.slice(-2),YYYY:o,M:r,MM:K(r,2,"0"),D:i,DD:K(i,2,"0"),d:s,dd:b[s],H:l,HH:K(l,2,"0"),m:u,mm:K(u,2,"0"),s:c,ss:K(c,2,"0")}[n]||n})).replace(/(년|월|일|시|분|초{1})(년|월|일|시|분|초{1})+/g,"$1").replace(/\s+/g," ")}function cn(n=""){var t,e,o,r,i,l,u,c,s;const a=(n="")=>I(Number(n))?L(String(n),4).reduce(((n,t,e)=>{var o;const r=null!==(o=y[e])&&void 0!==o?o:"";return Number(t)?`${Number(t)}${r} ${n}`:n}),"").trim():"";if(String(n).length>j)return"범위초과";const d=(null===(r=null===(o=null===(e=null===(t=null==n?void 0:n.toString)||void 0===t?void 0:t.call(n))||void 0===e?void 0:e.replace(/,/g,""))||void 0===o?void 0:o.split)||void 0===r?void 0:r.call(o,"."))||[],g=[];for(let n=0;n<d.length;n++)g.push(a(d[n]));return(null===(s=null===(c=null===(u=null===(l=null===(i=null==d?void 0:d.map)||void 0===i?void 0:i.call(d,a))||void 0===l?void 0:l.join)||void 0===u?void 0:u.call(l," 점 "))||void 0===c?void 0:c.trim)||void 0===s?void 0:s.call(c))||""}function sn(n=""){var t,e,o,r,i,l,u,c,s;if(String(n).length>j)return"범위초과";const a=(null===(r=null===(o=null===(e=null===(t=null==n?void 0:n.toString)||void 0===t?void 0:t.call(n))||void 0===e?void 0:e.replace(/,/g,""))||void 0===o?void 0:o.split)||void 0===r?void 0:r.call(o,"."))||[];return(null===(s=null===(c=null===(u=null===(l=null===(i=null==a?void 0:a.map)||void 0===i?void 0:i.call(a,((n="")=>I(Number(n))?L(String(n),4).reduce(((n,t,e)=>{var o;if(!Number(t))return n;let r="";const i=K(t,4);for(let n=0;n<4;n++){const t=Number(i[n]);if(t){const e=m[3-n];r+=`${e&&1===t?"":v[t]}${e}`}}const l=null!==(o=y[e])&&void 0!==o?o:"";return`${r}${r?l:""} ${n}`}),"").trim():"")))||void 0===l?void 0:l.join)||void 0===u?void 0:u.call(l," 점 "))||void 0===c?void 0:c.trim)||void 0===s?void 0:s.call(c))||""}function an(n="",t="이"){var e;const o=(n.charCodeAt(n.length-1)-d)%p>0?0:1,r=t.replace(/\[|\]/g,""),i=function(n=""){var t;return null!==(t=S[n])&&void 0!==t?t:n}(r.split("/")[0])||r;return null!==(e=i.split("/")[o])&&void 0!==e?e:r}function dn(n=""){return n.replace(/[가-힣]\[[가-힣]+\/[가-힣]+\]/g,(n=>n[0]+an(n[0],n.slice(1))))}const gn=/(\s)?(^[가-힣]{0,3}|[가-힣]{1,3})(\s*)/,fn=/([\.|\,|\s])/,pn=[[["습니다"],["다"]],[["주세요"],["라"]],[["입니다"],["이다"]],[["합니다"],["하다"]],[["옵니다"],["온다"]],[["됩니다"],["된다"]],[["갑니다"],["간다"]],[["깁니다"],["긴다"]],[["십니다"],["신다"]],[["랍니다"],["란다"]],[["저는"],["나는"]]],hn=n=>{const t=[];return n.forEach((n=>{const e=n[0].map((n=>new RegExp(gn.source+n+fn.source,"g"))).reduce(((t,e)=>t.concat(n[1].map((n=>[e,`$1;$2;$3;${n.split("").join(";")};$4`])))),[]);t.push(...e)})),t},vn=hn(pn),mn=hn(q(pn));function yn(n){return vn.reduce(((n,[t,e])=>n.replace(t,e)),n).replace(/;/g,"")}function jn(n){return mn.reduce(((n,[t,e])=>n.replace(t,e)),n).replace(/;/g,"")}const bn=[escape,n=>L(L(n).join(""),3).join(""),n=>L(L(n).join(""),4).join(""),n=>L(n).join(""),n=>n.split("").map(((n,t)=>t%3==0?n+$n():n)).join(""),n=>n.slice(Math.floor(n.length/2),n.length)+n.slice(0,Math.floor(n.length/2))],Sn=JSON.stringify,An=btoa,Cn=encodeURI,$n=()=>Math.floor(Math.random()*bn.length);function Bn(n="",t=0){const e=$n(),o=t%3==0?An(Cn(Sn(n))):bn[e](n);return 5===t?e+An(Cn(o)):Bn((t%2==1?e:"")+o+(t%2==0?e:""),t+1)}const Mn=[unescape,n=>L(L(n).join(""),3).join(""),n=>L(L(n).join(""),4).join(""),n=>L(n).join(""),n=>n.split("").map(((n,t)=>(t-1)%4==0?"":n)).join(""),n=>n.slice(Math.ceil(n.length/2),n.length)+n.slice(0,Math.ceil(n.length/2))],wn=atob,xn=decodeURI,Nn=JSON.parse;function Dn(n="",t=5){const e=t%2==1?[n.slice(1,n.length),n[0]]:[n.slice(0,n.length-1),n[n.length-1]],o=5===t?xn(wn(e[0])):e[0],r=t%3==0?Nn(xn(wn(o))):Mn[e[1]](o);return 0===t?r:Dn(r,t-1)}const Hn=Intl.Collator();function kn(n,t,e){return e?Hn.compare(n,t):Hn.compare(t,n)}function On(n=[],t,e=!0){if(Array.isArray(t)){const o=t.map((n=>_(n)));return n.sort(((n,r)=>{for(let i=0;i<t.length;i++){const t=kn(F(o[i],n),F(o[i],r),e);if(0!==t)return t}return 0}))}if(!t)return n.sort(((n,t)=>kn(n,t,e)));const o=_(t);return n.sort(((n,t)=>kn(F(o,n),F(o,t),e)))}function Yn(n=[],t){return On(n,t,!0)}function Jn(n=[],t){return On(n,t,!1)}function Pn(n=[],t=[],e=!0,o){const r=Z(t),i=_(o);return n.map(((n,t)=>({index:t,value:o?F(i,n):n}))).sort(((n,t)=>{var o,i;const l=null!==(o=r[n.value])&&void 0!==o?o:-1,u=null!==(i=r[t.value])&&void 0!==i?i:-1,c=e?l-u:u-l,s=kn(n.value,t.value,e);return l===u?s||0:-1===l?e?1:-1:-1===u?e?-1:1:c||s||0})).map((t=>n[t.index]))}const Tn={};function En(n,t){if(n===t)return 0;if(!n)return t.length;if(!t)return n.length;if(Tn[n+"||"+t])return Tn[n+"||"+t];const e=[[]];for(let n=0;n<=t.length;n++)e[0][n]=n;for(let l=1;l<=n.length;l++){e[l]=[l];for(let u=1;u<=t.length;u++)e[l][u]=(o=e[l-1][u]+1,r=e[l][u-1]+1,i=e[l-1][u-1]+(n[l-1]===t[u-1]?0:1),o>r?r>i?i:r:i>o?o:i)}var o,r,i;return Tn[n+"||"+t]=e[n.length][t.length],e[n.length][t.length]}function Gn(n,t,e){var o,r,i;const l=null!==(o=null==e?void 0:e.distance)&&void 0!==o?o:Math.max(n.length/2,2),u=null!==(r=null==e?void 0:e.maxSlice)&&void 0!==r?r:10,c=null===(i=null==e?void 0:e.isSplit)||void 0===i||i,s=[],a=G(n,!0).join("");for(let e=0;e<t.length;e++){const o=c?En(a,G(t[e],!0).join("")):En(n,t[e]);o<=l&&s.push({dist:o,word:t[e]})}return Yn(s,"dist").slice(0,u).map((n=>n.word))}function Rn(n=""){const t=e.reduce(((n,t,e)=>n.replace(new RegExp(t,"g"),`[${W(e,0,0)}-${W(e+1,0,-1)}]`)),n);return new RegExp(`(${t})`,"g")}function zn(n="",t=""){return Rn(n).test(t)}const In={ko:/^[가-힣|ㄱ-ㅎ|ㅏ-ㅣ|\s]+$/,en:/^[a-zA-Z|\s]+$/,number:/^[0-9]+$/,special:/^[\`\~\!\@\#\$\%\^\&\*\(\)\_\+\-\=\\\|\{\}\[\]\;\:\'\"\<\,\.\>\/\?\s]+$/,etc:/.*/};function _n(n=""){return In.special.test(n)?"special":In.ko.test(n)?"ko":In.en.test(n)?"en":In.number.test(n)?"number":"etc"}function Fn(n="",t=!1){const e={ko:0,en:0,number:0,special:0,etc:0},o=[];for(let r=0;r<n.length;r++){const i=_n(n[r]);t?e[i]++:o.push(i)}return t?U(e):o}const Kn=Z(h);function Ln(n=""){return n.toString().split("").map((n=>Kn[n]||n)).join("")}function Un(n="",t="ko",e=!0){const o=(e?G(n):n.toString().split("")).join("");return"ko"===t?e?nn(Ln(o)):Ln(o):"en"===t?function(n=""){return n.toString().split("").map((n=>h[n]||n)).join("")}(o):n}function Zn(n,t=!0){const e=E(n,{isSplit:!1,resultType:"index"}),o=t?" ":"";return e.map((n=>{const t=A[n.cho]+C[n.jung]+$[n.jong];return t?t+o:n})).join("").replace(/\s{2,}/g," ").trim()}window.H=t})();