typopo
Version:
Fix frequent microtypography errors in multiple languages. Write neat texts without bothering about typography rules. Typopo works for English, German, Slovak, Czech and Rusyn language.
10 lines (9 loc) • 29.9 kB
JavaScript
/*!
* Typopo v3.0.0 (https://typopo.org)
* Copyright 2015–2026 Braňo Šandala (https://brano.me)
* Licensed under MIT (https://github.com/surfinzap/typopo/blob/main/LICENSE.txt)
*/
(function(f,b){typeof exports=="object"&&typeof module<"u"?b(exports):typeof define=="function"&&define.amd?define(["exports"],b):(f=typeof globalThis<"u"?globalThis:f||self,b(f.typopo={}))})(this,(function(f){"use strict";const b="‚|'|‘|’|ʼ|‛|´|`|′|‹|›",y="„|“|”|\"|«|»|″|,{2,}|‚{2,}|[‘’ʼ'‹›′´`]{2,}",B=" ",S="\\.!?",L=",:;"+S,n={singleQuoteAdepts:b,apostrophe:"’",singlePrime:"′",backtick:"`",doubleQuoteAdepts:y,doublePrime:"″",space:" ",nbsp:" ",hairSpace:" ",narrowNbsp:" ",spaces:B,terminalPunctuation:S,sentencePausePunctuation:",:;",sentencePunctuation:L,openingBrackets:"\\(\\[\\{",closingBrackets:"\\)\\]\\}",ellipsis:"…",hyphen:"-",enDash:"–",emDash:"—",slash:"/",degree:"°",multiplicationSign:"×",ampersand:"&",sectionSign:"§",paragraphSign:"¶",copyright:"©",soundRecordingCopyright:"℗",registeredTrademark:"®",serviceMark:"℠",trademark:"™",plus:"+",minus:"−",plusMinus:"±",percent:"%",permille:"‰",permyriad:"‱",numberSign:"#",numeroSign:"№",romanNumerals:"IVXLCDM",urlPattern:"((?:(http|https|Http|Https|rtsp|Rtsp):\\/\\/(?:(?:[a-zA-Z0-9\\$\\-\\_\\.\\+\\!\\*\\'\\(\\)\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,64}(?:\\:(?:[a-zA-Z0-9\\$\\-\\_\\.\\+\\!\\*\\'\\(\\)\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,25})?\\@)?)?((?:(?:[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}\\.)+(?:(?:aero|arpa|asia|agency|a[cdefgilmnoqrstuwxz])|(?:biz|b[abdefghijmnorstvwyz])|(?:cat|cloud|com|company|coop|c[acdfghiklmnoruvxyz])|(?:dev|d[ejkmoz])|(?:edu|e[cegrstu])|f[ijkmor]|(?:gov|guide|g[abdefghilmnpqrstuwy])|h[kmnrtu]|(?:info|int|i[delmnoqrst])|(?:jobs|j[emop])|k[eghimnrwyz]|l[abcikrstuvy]|(?:mil|mobi|museum|m[acdghklmnopqrstuvwxyz])|(?:name|net|n[acefgilopruz])|(?:org|om|one)|(?:pro|p[aefghklmnrstwy])|qa|r[eouw]|(?:shop|store|s[abcdeghijklmnortuvyz])|(?:tel|travel|team|t[cdfghjklmnoprtvwz])|u[agkmsyz]|v[aceginu]|(?:work|w[fs])|(?:xyz)|y[etu]|z[amw]))|(?:(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9])\\.(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[0-9])))(?:\\:\\d{1,5})?)(\\/(?:(?:[a-zA-Z0-9\\;\\/\\?\\:\\@\\&\\=\\#\\~\\-\\.\\+\\!\\*\\'\\(\\)\\,\\_])|(?:\\%[a-fA-F0-9]{2}))*)?(?:\\b|$)",emailPattern:"[a-zA-Z0-9\\+\\.\\_\\%\\-]{1,256}\\@[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}(\\.[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25})+",filenamePattern:"\\b[a-zA-Z0-9_%\\-]+\\.(ai|asm|bat|bmp|c|cpp|cs|css|csv|dart|doc|docx|exe|gif|go|html|ics|java|jpeg|jpg|js|json|key|kt|less|lua|log|md|mp4|odp|ods|odt|pdf|php|pl|png|ppt|pptx|psd|py|r|rar|rb|rs|scala|scss|sh|svg|sql|swift|tar.gz|tar|tex|tiff|ts|txt|vbs|xml|xls|xlsx|yaml|yml|zip)\\b"},v={quotes:{openingDoubleQuote:"„",closingDoubleQuote:"“",openingSingleQuote:"‚",closingSingleQuote:"‘"},directSpeechIntro:":",dashWords:{spaceBefore:n.nbsp,dash:n.enDash,spaceAfter:n.space},spaceAfter:{copyright:n.space,soundRecordingCopyright:n.space,numeroSign:n.nbsp,sectionSign:n.nbsp,paragraphSign:n.nbsp,abbreviation:n.nbsp},spaceBefore:{percent:n.nbsp},numbers:{ordinalIndicator:"\\.",romanOrdinalIndicator:"\\."},ordinalDate:{firstSpace:n.nbsp,secondSpace:n.nbsp},singleWordAbbreviations:["č","fol","např","odst","par","r","s","str","sv","tj","tzv"],multipleWordAbbreviations:["hl m","n l","p n l","př n l"]},W={quotes:{openingDoubleQuote:"“",closingDoubleQuote:"”",openingSingleQuote:"‘",closingSingleQuote:"’"},directSpeechIntro:",",dashWords:{spaceBefore:"",dash:n.emDash,spaceAfter:""},spaceAfter:{copyright:n.nbsp,soundRecordingCopyright:n.nbsp,numeroSign:n.nbsp,sectionSign:n.nbsp,paragraphSign:n.nbsp,abbreviation:""},spaceBefore:{percent:""},numbers:{ordinalIndicator:"st|nd|rd|th",romanOrdinalIndicator:""},ordinalDate:{firstSpace:n.nbsp,secondSpace:n.nbsp},singleWordAbbreviations:["p","pp","no","vol"],multipleWordAbbreviations:["U S","e g","i e","a m","p m"]},k={quotes:{openingDoubleQuote:"«",closingDoubleQuote:"»",openingSingleQuote:"‹",closingSingleQuote:"›"},directSpeechIntro:":",dashWords:{spaceBefore:n.hairSpace,dash:n.emDash,spaceAfter:n.hairSpace},spaceAfter:{copyright:n.nbsp,soundRecordingCopyright:n.nbsp,numeroSign:n.nbsp,sectionSign:n.narrowNbsp,paragraphSign:n.narrowNbsp,abbreviation:n.nbsp},spaceBefore:{percent:n.nbsp},numbers:{ordinalIndicator:"\\.",romanOrdinalIndicator:"\\."},ordinalDate:{firstSpace:n.nbsp,secondSpace:n.nbsp},singleWordAbbreviations:["ціт","ст","канц","абз","тзв","Зб","ч","напр"],multipleWordAbbreviations:["т зн","Е Ч","евід ч","род ч","т ч","т д"]},N={quotes:{openingDoubleQuote:"„",closingDoubleQuote:"“",openingSingleQuote:"‚",closingSingleQuote:"‘"},directSpeechIntro:":",dashWords:{spaceBefore:n.hairSpace,dash:n.emDash,spaceAfter:n.hairSpace},spaceAfter:{copyright:n.nbsp,soundRecordingCopyright:n.nbsp,numeroSign:n.nbsp,sectionSign:n.narrowNbsp,paragraphSign:n.narrowNbsp,abbreviation:n.nbsp},spaceBefore:{percent:n.nbsp},numbers:{ordinalIndicator:"\\.",romanOrdinalIndicator:"\\."},ordinalDate:{firstSpace:n.nbsp,secondSpace:n.nbsp},singleWordAbbreviations:["č","cit","čl","fol","napr","odst","par","r","roč","s","str","sv","tzv","vyd"],multipleWordAbbreviations:["hl m","n l","p n l","pr n l","s a","s l","t č","t j","zodp red"]},q={quotes:{openingDoubleQuote:"„",closingDoubleQuote:"“",openingSingleQuote:"‚",closingSingleQuote:"‘"},directSpeechIntro:":",dashWords:{spaceBefore:n.hairSpace,dash:n.enDash,spaceAfter:n.hairSpace},spaceAfter:{copyright:n.nbsp,soundRecordingCopyright:n.nbsp,numeroSign:n.nbsp,sectionSign:n.nbsp,paragraphSign:n.nbsp,abbreviation:n.nbsp},spaceBefore:{percent:n.narrowNbsp},numbers:{ordinalIndicator:"\\.",romanOrdinalIndicator:"\\."},ordinalDate:{firstSpace:n.nbsp,secondSpace:n.space},singleWordAbbreviations:["Bhf","ca","Di","Do","Fr","geb","gest","Hbf","Mi","Mo","Nr","S","Sa","So","St","Stk","u","usw","z"],multipleWordAbbreviations:["b w","d h","d i","e V","Ges m b H","n Chr","n u Z","s a","s o","s u","u a m","u a","u ä","u Ä","u dgl","u U","u z","u zw","v a","v Chr","v u Z","z B","z T","z Zt"]},$={cs:v,"en-us":W,rue:k,sk:N,"de-de":q},E="en-us";class I{constructor(p){$[p]||(console.warn(`Locale '${p}' not found, falling back to '${E}'`),p=E),this.ID=p,this.openingSingleQuote=$[p].quotes.openingSingleQuote,this.closingSingleQuote=$[p].quotes.closingSingleQuote,this.openingDoubleQuote=$[p].quotes.openingDoubleQuote,this.closingDoubleQuote=$[p].quotes.closingDoubleQuote,this.terminalQuotes=this.closingSingleQuote+this.closingDoubleQuote,this.directSpeechIntro=$[p].directSpeechIntro,this.dashWords=$[p].dashWords,this.spaceAfter=$[p].spaceAfter,this.spaceBefore=$[p].spaceBefore,this.ordinalIndicator=$[p].numbers.ordinalIndicator,this.romanOrdinalIndicator=$[p].numbers.romanOrdinalIndicator,this.ordinalDate=$[p].ordinalDate,this.singleWordAbbreviations=[];for(const s in $)this.singleWordAbbreviations=this.singleWordAbbreviations.concat($[s].singleWordAbbreviations);this.multipleWordAbbreviations=[];for(const s in $)this.multipleWordAbbreviations=this.multipleWordAbbreviations.concat($[s].multipleWordAbbreviations);const o=[];for(const s in $){const r=$[s].directSpeechIntro;r&&!o.includes(r)&&o.push(r)}this.directSpeechIntroAdepts=o.join("")}}function C(e){return e.replace(/[\n\r]{2,}/gm,`
`)}function m(e,p,o){let r=0,t=e,c="";for(;t!==c&&r<50;)c=t,t=t.replace(p,o),r++;return t}function z(e){return m(e,new RegExp(`([\\p{L}]{2,})([${n.nbsp}${n.narrowNbsp}])([\\p{L}]{2,})`,"gu"),"$1 $3")}function w(e,p){return e=m(e,new RegExp(`(^|[${n.space}]|[^\\p{L}\\d${n.apostrophe}${n.plus}${n.minus}${n.hyphen}])([\\p{Ll}])([${n.space}])`,"gu"),`$1$2${n.nbsp}`),e=e.replace(new RegExp(`(^|[${n.sentencePunctuation}${n.ellipsis}${n.copyright}${n.registeredTrademark}${n.soundRecordingCopyright}])([${n.spaces}]?)([\\p{Lu}])([${n.spaces}])`,"gu"),`$1$2$3${n.nbsp}`),p.ID=="en-us"&&(e=e.replace(new RegExp(`(^|[${n.spaces}])(I)([${n.spaces}])`,"g"),`$1$2${n.nbsp}`)),e}function U(e){return e.replace(new RegExp(`([${n.spaces}])(${n.ampersand})([${n.spaces}])`,"g"),` $2${n.nbsp}`)}function O(e){return e.replace(new RegExp(`([^${n.nbsp}\\d]|^)(\\d{1,2})([${n.spaces}])([\\p{L}])`,"gu"),`$1$2${n.nbsp}$4`)}function T(e,p){return e.replace(new RegExp(`([^${n.nbsp}\\d_%\\-]|^)(\\d{1,2})(${p.ordinalIndicator})([${n.spaces}]?)([\\p{L}])`,"gu"),`$1$2$3${n.nbsp}$5`)}function M(e,p){return e.replace(new RegExp(`(\\d{1,2})(\\.)([${n.spaces}]?)(\\d{1,2})(\\.)([${n.spaces}]?)(\\d{4})`,"g"),`$1$2${p.ordinalDate.firstSpace}$4$5${p.ordinalDate.secondSpace}$7`)}function j(e,p){return p.romanOrdinalIndicator!=""?e.replace(new RegExp(`(\\b[\\p{Lu}][\\p{L}]?${p.romanOrdinalIndicator}[${n.spaces}]?)?(\\b)([${n.romanNumerals}]+)(${p.romanOrdinalIndicator})([${n.spaces}]?)([\\p{L}\\d])`,"gu"),function(o,s,r,t,c,i,u){return s?o:`${r}${t}${c}${n.nbsp}${u}`}):e}function Z(e,p){let o=`(\\b[\\p{Lu}][\\p{Ll}]+?)([${n.spaces}])([${n.romanNumerals}]+\\b)(${p.romanOrdinalIndicator})([${n.nbsp}]?)`,s=new RegExp(o,"gu");return e.replace(s,function(r,t,c,i,u,d){return d==""&&i=="I"?t+n.space+i+u:d==""&&i!="I"?t+n.nbsp+i+u:d==n.nbsp&&i=="I"?t+n.space+i+u+d:t+n.nbsp+i+u+n.space})}function _(e,p){return e.replace(new RegExp(`(\\d)([${n.spaces}])([${n.percent}${n.permille}${n.permyriad}])`,"gu"),`$1${p.spaceBefore.percent}$3`)}function X(e,p){let o=`([^${n.sentencePunctuation}${n.ellipsis}${n.closingBrackets}${p.closingDoubleQuote}${p.closingSingleQuote}${n.apostrophe}${n.multiplicationSign}${n.emDash}${n.enDash}])([${n.spaces}])([\\p{Lu}])([${n.spaces}]|\\.$|$)`,s=new RegExp(o,"gu");return e.replace(s,function(r,t,c,i,u){return p.ID==="en-us"&&i==="I"?r:p.ID==="en-us"?t+n.nbsp+i+u:i==="I"&&u&&n.spaces.includes(u)?t+n.nbsp+i+n.space:t+n.nbsp+i+u})}function F(e,p,o){return o=o!==void 0?o:n.nbsp,e.replace(new RegExp(`(${p})([^${n.spaces}${p}])`,"g"),`$1${o}$2`)}function H(e,p,o){return o=o!==void 0?o:n.nbsp,e.replace(new RegExp(`(${p})([${n.spaces}]+)`,"g"),`$1${o}`)}function G(e,p){return e=z(e),e=w(e,p),e=U(e),e=O(e),e=T(e,p),e=M(e,p),e=j(e,p),e=X(e,p),e=Z(e,p),e=_(e,p),e}function V(e){return e.replace(new RegExp(`(\\S)([${n.spaces}]{2,})(\\S)`,"g"),"$1 $3")}function Y(e){return e.split(/\r?\n/).map(p=>p.replace(/^\s+/,"")).join(`
`)}function J(e){return e.split(/\r?\n/).map(p=>p.replace(/\s+$/,"")).join(`
`)}function K(e){return e.replace(new RegExp(`([${n.spaces}])([${n.sentencePausePunctuation}])([^\\-\\)]|$)`,"g"),"$2$3")}function ee(e){return e.replace(new RegExp(`([^${n.openingBrackets}])([${n.spaces}])([${n.terminalPunctuation}${n.closingBrackets}${n.degree}])`,"g"),"$1$3")}function ne(e,p){return e.replace(new RegExp(`(\\d)([${n.spaces}]?)(${p.ordinalIndicator})([${n.spaces}]|\\b)`,"g"),"$1$3$4")}function pe(e){return e.replace(new RegExp(`([${n.openingBrackets}])([${n.spaces}])([^${n.closingBrackets}])`,"g"),"$1$3")}function oe(e){return e.replace(new RegExp(`([\\p{L}])([${n.openingBrackets}])([\\p{L}${n.ellipsis}])([\\p{L}${n.ellipsis}${n.closingBrackets}])`,"gu"),function(p,o,s,r,t){return r=="s"|r=="S"|r+t=="es"|r+t=="ES"?`${o}${s}${r}${t}`:`${o}${n.space}${s}${r}${t}`})}function se(e){return e.replace(new RegExp(`([\\p{L}]{2,}|[${n.ellipsis}])([${n.terminalPunctuation}])([\\p{Lu}])`,"gu"),"$1$2 $3")}function ae(e){return e.replace(new RegExp(`([\\p{L}]{2,}|[${n.ellipsis}])([${n.sentencePausePunctuation}])([\\p{L}])`,"gu"),"$1$2 $3")}function te(e){return e.replace(new RegExp(`([${n.closingBrackets}])([\\p{L}])`,"gu"),"$1 $2")}function re(e,p){return e.replace(new RegExp(`([^${n.spaces}${n.openingBrackets}${p}])(${p})`,"g"),`$1${n.space}$2`)}function ce(e,p){return e=V(e),e=Y(e),e=J(e),e=K(e),e=ee(e),e=ne(e,p),e=pe(e),e=oe(e),e=se(e),e=te(e),e=ae(e),e}function ie(e){return e.replace(new RegExp("\\.{2}(?![\\\\/])","g"),".")}function ue(e){return ie(e)}function $e(e){return e.replace(new RegExp(`[${n.ellipsis}\\.]{3,}`,"g"),n.ellipsis)}function de(e){return e.replace(new RegExp(`\\.${n.ellipsis}|${n.ellipsis}{2,}|${n.ellipsis}\\.`,"g"),n.ellipsis)}function le(e){return e.replace(new RegExp(`[${n.spaces}]\\.{2}[${n.spaces}]`,"g"),`${n.space}${n.ellipsis}${n.space}`)}function fe(e){return e.replace(new RegExp(`(,)([${n.spaces}]?)(${n.ellipsis})([${n.spaces}]?)(,)`,"g"),`$1 ${n.ellipsis}$5`)}function be(e){return e.replace(new RegExp(`(,)([${n.spaces}]?)(${n.ellipsis})([${n.spaces}]?)(\\B|[${n.closingBrackets}])([^,]|$)`,"g"),"$1$3$5$6")}function me(e){return e.replace(new RegExp(`(^${n.ellipsis})([${n.spaces}])([\\p{L}])`,"gmu"),"$1$3")}function he(e,p){return e.replace(new RegExp(`([^${p.terminalQuotes}])([${n.sentencePunctuation}])([${n.spaces}]?)([${n.ellipsis}])([${n.spaces}]?)([\\p{Ll}])`,"gu"),"$1$2 $4$6")}function ge(e){return e.replace(new RegExp(`([\\p{Ll}])([${n.spaces}])([${n.ellipsis}])([${n.spaces}]?)([\\p{Lu}])`,"gu"),"$1$3 $5")}function xe(e){return e.replace(new RegExp(`([\\p{L}])([${n.ellipsis}])([\\p{L}])`,"gu"),"$1$2 $3")}function Se(e,p){return e.replace(new RegExp(`([${n.sentencePunctuation}${p.terminalQuotes}])([${n.spaces}]?)(${n.ellipsis})([${n.spaces}]?)([\\p{Lu}])`,"gu"),"$1 $3 $5")}function Ee(e,p){return e.replace(new RegExp(`([\\p{Ll}])([${n.spaces}])+([${n.ellipsis}][${p.closingDoubleQuote}${p.closingSingleQuote}]?$)`,"gmu"),"$1$3")}function we(e,p){return e=$e(e),e=fe(e),e=be(e),e=me(e),e=he(e,p),e=ge(e),e=xe(e),e=Se(e,p),e=Ee(e,p),e=de(e),e=le(e),e}const a={apos:"",singlePrime:"",doublePrime:"",osq:"",csq:"",osqUnpaired:"",csqUnpaired:"",odq:"",cdq:"",odqUnpaired:"",cdqUnpaired:"",enDash:""},A=57856,R=63743,Ae=R-A+1;function D(e){const p=A+e;if(p>R)throw new Error(`Exception index ${e} exceeds PUA limit (max ${Ae}). Text contains too many exceptions (emails/URLs/filenames). Consider processing the text in smaller chunks.`);return String.fromCharCode(p)}function Re(e,p){return e.replace(new RegExp(`([\\p{L}\\d])([${n.spaces}]*[${n.enDash}${n.emDash}]{1,3}[${n.spaces}]*|[${n.spaces}]+[${n.hyphen}]{1,3}[${n.spaces}]+)([\\p{L}\\d])`,"gu"),`$1${p.dashWords.spaceBefore}${p.dashWords.dash}${p.dashWords.spaceAfter}$3`)}function De(e,p){return e.replace(new RegExp(`([\\p{L}])([${n.spaces}]?)([${n.hyphen}${n.enDash}${n.emDash}]{1,3})([${n.spaces}]?)([${n.sentencePunctuation}\\n\\r])`,"gu"),`$1${p.dashWords.spaceBefore}${p.dashWords.dash}$5`)}function Qe(e,p){return e=e.replace(new RegExp(`([${n.openingBrackets}])[${n.spaces}]*([${n.hyphen}${n.enDash}${n.emDash}]+)[${n.spaces}]*([${n.closingBrackets}])`,"gu"),"$1$2$3"),e=e.replace(new RegExp(`([\\p{L}])[${n.spaces}]*[${n.hyphen}${n.enDash}${n.emDash}]{1,3}[${n.spaces}]*([${n.openingBrackets}])`,"gu"),`$1${p.dashWords.spaceBefore}${p.dashWords.dash}${p.dashWords.spaceAfter}$2`),e=e.replace(new RegExp(`([${n.closingBrackets}])[${n.spaces}]*[${n.hyphen}${n.enDash}${n.emDash}]{1,3}[${n.spaces}]*([\\p{L}])`,"gu"),`$1${p.dashWords.spaceBefore}${p.dashWords.dash}${p.dashWords.spaceAfter}$2`),e=e.replace(new RegExp(`([\\p{L}])[${n.spaces}]*[${n.hyphen}${n.enDash}${n.emDash}]{1,3}[${n.spaces}]*([${n.closingBrackets}])`,"gu"),`$1${p.dashWords.spaceBefore}${p.dashWords.dash}${p.dashWords.spaceAfter}$2`),e=e.replace(new RegExp(`([${n.openingBrackets}])[${n.spaces}]*[${n.hyphen}${n.enDash}${n.emDash}]{1,3}[${n.spaces}]*([\\p{L}])`,"gu"),`$1${p.dashWords.spaceBefore}${p.dashWords.dash}${p.dashWords.spaceAfter}$2`),e=e.replace(new RegExp(`([${n.closingBrackets}])[${n.spaces}]*[${n.hyphen}${n.enDash}${n.emDash}][${n.spaces}]*([${n.openingBrackets}])`,"gu"),`$1${p.dashWords.spaceBefore}${p.dashWords.dash}${p.dashWords.spaceAfter}$2`),e}function Pe(e){return e=m(e,new RegExp(`(\\d)([${n.spaces}]?[${n.hyphen}${n.enDash}${n.emDash}]{1,3}[${n.spaces}]?)(\\d)`,"gu"),`$1${a.enDash}$3`),e.replace(new RegExp(`${a.enDash}`,"g"),n.enDash)}function ye(e){return e.replace(new RegExp(`([${n.percent}${n.permille}${n.permyriad}])([${n.spaces}]?[${n.hyphen}${n.enDash}${n.emDash}]{1,3}[${n.spaces}]?)(\\d)`,"gu"),`$1${n.enDash}$3`)}function Be(e,p){return e.replace(new RegExp(`(\\d)(${p.ordinalIndicator})([${n.spaces}]?[${n.hyphen}${n.enDash}${n.emDash}]{1,3}[${n.spaces}]?)(\\d)(${p.ordinalIndicator})`,"giu"),`$1$2${n.enDash}$4$5`)}function Le(e,p){return e=Re(e,p),e=De(e,p),e=Qe(e,p),e=Pe(e),e=ye(e),e=Be(e,p),e}function ve(e){return e.replace(new RegExp(`([^${n.romanNumerals}])([${n.sentencePunctuation}])([${n.sentencePausePunctuation}])(${n.doubleQuoteAdepts})`,"g"),"$1$2$4")}function We(e){return e.replace(new RegExp(`([^${n.romanNumerals}])([${n.sentencePunctuation}])(${n.doubleQuoteAdepts})([${n.sentencePunctuation}])`,"g"),"$1$2$3")}function ke(e){return e=e.replace(new RegExp(`([^0-9]|^)(${n.doubleQuoteAdepts})(.+?)(\\d+)(${n.doubleQuoteAdepts})([${n.terminalPunctuation}${n.ellipsis}])`,"g"),"$1$2$3$4$6$5"),e=e.replace(new RegExp(`(\\b\\d{1,3})([${n.spaces}]?)(${n.doubleQuoteAdepts})([^\\p{L}]|\\B)`,"gu"),`$1$2${a.doublePrime}$4`),e}function Ne(e){return e=e.replace(new RegExp(`(${n.doubleQuoteAdepts})(\\d+)(${a.doublePrime})`,"g"),`${a.odq}$2${a.cdq}`),e=e.replace(new RegExp(`(${n.doubleQuoteAdepts})(.*?)(${n.doubleQuoteAdepts})`,"g"),`${a.odq}$2${a.cdq}`),e}function qe(e){return e.replace(new RegExp(`(${n.doubleQuoteAdepts})([0-9\\p{L}])`,"gu"),`${a.odqUnpaired}$2`)}function Ie(e){return e.replace(new RegExp(`([\\p{L}${n.sentencePunctuation}${n.ellipsis}])(${n.doubleQuoteAdepts})`,"gu"),`$1${a.cdqUnpaired}`)}function Ce(e){return e.replace(new RegExp(`([${n.spaces}])(${n.doubleQuoteAdepts})([${n.spaces}])`,"gu"),"$1")}function ze(e){return e.replace(new RegExp(`(${a.odqUnpaired})(.*?)(${a.doublePrime})`,"g"),`${a.odq}$2${a.cdq}`).replace(new RegExp(`(${a.doublePrime})(.*?)(${a.cdqUnpaired})`,"g"),`${a.odq}$2${a.cdq}`)}function Ue(e,p){return e.replace(new RegExp(`(${p.openingDoubleQuote})([^${n.spaces}${p.closingDoubleQuote}]+?)([^${n.romanNumerals}${n.sentencePunctuation}])([${n.sentencePunctuation}]{1,})(${p.closingDoubleQuote})`,"g"),(o,s,r,t,c,i)=>c.length===1&&/[.,;:]/.test(c)?s+r+t+i+c:o)}function Oe(e,p){return e=e.replace(new RegExp(`(${p.openingDoubleQuote})(.+)([${n.spaces}])(?!${p.openingDoubleQuote})([^${n.romanNumerals}]{2,})(${p.closingDoubleQuote})([${n.sentencePunctuation}${n.ellipsis}])`,"g"),"$1$2$3$4$6$5"),e=e.replace(new RegExp(`([:;])(${p.closingDoubleQuote})`,"g"),"$2$1"),e}function Te(e,p){return[{pattern:a.doublePrime,replacement:n.doublePrime},{pattern:`[${a.odq}${a.odqUnpaired}]`,replacement:p.openingDoubleQuote},{pattern:`[${a.cdq}${a.cdqUnpaired}]`,replacement:p.closingDoubleQuote}].reduce((s,{pattern:r,replacement:t})=>s.replace(new RegExp(r,"gu"),t),e)}function Me(e,p){return e=e.replace(new RegExp(`(${p.openingDoubleQuote})([${n.spaces}])`,"g"),"$1"),e=e.replace(new RegExp(`([${n.spaces}])(${p.closingDoubleQuote})`,"g"),"$2"),e=e.replace(new RegExp(`([${n.spaces}])(${n.doublePrime})`,"g"),"$2"),e}function je(e,p){return e=e.replace(new RegExp(`([${n.sentencePunctuation}\\p{L}])([${p.openingDoubleQuote}])`,"gu"),"$1 $2"),e=w(e,p),e}function Ze(e,p){return e.replace(new RegExp(`([${p.closingDoubleQuote}])([\\p{L}])`,"gu"),"$1 $2")}function _e(e,p){const o=`${n.hyphen}${n.enDash}${n.emDash}`;return e=e.replace(new RegExp(`([\\p{L}])[${p.directSpeechIntroAdepts}]?[${n.spaces}]*[${o}][${n.spaces}]*([${p.openingDoubleQuote}].+?[${p.closingDoubleQuote}])`,"gu"),`$1${p.directSpeechIntro} $2`),e=e.replace(new RegExp(`([\\p{L}])[${p.directSpeechIntroAdepts}][${n.spaces}]*([${p.openingDoubleQuote}].+?[${p.closingDoubleQuote}])`,"gu"),`$1${p.directSpeechIntro} $2`),e=e.replace(new RegExp(`([${p.openingDoubleQuote}].+?[${p.closingDoubleQuote}])[${n.spaces}]*[${o}][${n.spaces}]*([\\p{L}])`,"gu"),"$1 $2"),e=e.replace(new RegExp(`^[${n.spaces}]*[${o}][${n.spaces}]*([${p.openingDoubleQuote}].+?[${p.closingDoubleQuote}])`,"g"),"$1"),e=e.replace(new RegExp(`([${n.terminalPunctuation}${n.ellipsis}])[${n.spaces}]+[${o}][${n.spaces}]*([${p.openingDoubleQuote}].+?[${p.closingDoubleQuote}])`,"g"),"$1 $2"),e}function Xe(e,p){return e=ve(e),e=We(e),e=ke(e),e=Ne(e),e=qe(e),e=Ie(e),e=Ce(e),e=ze(e),e=Te(e,p),e=Me(e,p),e=je(e,p),e=Ze(e,p),e=_e(e,p),e=Ue(e,p),e=Oe(e,p),e}function Fe(e){return[["dead","buried"],["drill","bass"],["drum","bass"],["rock","roll"],["pick","mix"],["fish","chips"],["salt","shake"],["mac","cheese"],["pork","beans"],["drag","drop"],["rake","scrape"],["hook","kill"]].forEach(o=>{e=e.replace(new RegExp(`(${o[0]})([${n.spaces}]?)(${n.singleQuoteAdepts})(n)(${n.singleQuoteAdepts})([${n.spaces}]?)(${o[1]})`,"gi"),`$1${n.nbsp}${a.apos}$4${a.apos}${n.nbsp}$7`)}),e}function He(e){let p="cause|em|mid|midst|mongst|prentice|round|sblood|ssdeath|sfoot|sheart|shun|slid|slife|slight|snails|strewth|til|tis|twas|tween|twere|twill|twixt|twould";return e.replace(new RegExp(`(${n.singleQuoteAdepts})(${p})`,"gi"),`${a.apos}$2`)}function Ge(e){return e.replace(new RegExp(`(\\Bin)(${n.singleQuoteAdepts})`,"gi"),`$1${a.apos}`)}function Ve(e){return e.replace(new RegExp(`([\\d\\p{L}])(${n.singleQuoteAdepts})+([\\p{L}])`,"gu"),`$1${a.apos}$3`)}function Ye(e){return e.replace(new RegExp(`([^0-9]|[A-Z][0-9])([${n.spaces}])(${n.singleQuoteAdepts})([\\d]{2})`,"gu"),`$1$2${a.apos}$4`)}function Je(e){return e.replace(/(\d)( ?)('|‘|’|‛|′)/g,`$1$2${a.singlePrime}`)}function Ke(e){return e.replace(new RegExp(`(^|[${n.spaces}${n.emDash}${n.enDash}])(${n.singleQuoteAdepts}|,)([\\p{L}${n.ellipsis}${n.openingBrackets}\\{])`,"gu"),`$1${a.osqUnpaired}$3`)}function en(e){return e.replace(new RegExp(`([\\p{L}\\d${n.closingBrackets}])([${n.sentencePunctuation}${n.ellipsis}])?(${n.singleQuoteAdepts})([ ${n.sentencePunctuation}])?`,"gu"),`$1$2${a.csqUnpaired}$4`)}function nn(e){return e.replace(new RegExp(`(${n.doubleQuoteAdepts})(.*?)(${n.doubleQuoteAdepts})`,"gu"),function(p,o,s,r){return s=Ke(s),s=en(s),s=pn(s),o+s+r})}function pn(e){return e.replace(new RegExp(`(${a.osqUnpaired})(.*)(${a.csqUnpaired})`,"gu"),`${a.osq}$2${a.csq}`)}function on(e){return e.replace(new RegExp(`(\\B)(${n.singleQuoteAdepts})([\\p{L}]+)(${n.singleQuoteAdepts})(\\B)`,"gu"),`$1${a.osq}$3${a.csq}$5`)}function sn(e){return e.replace(new RegExp(`(${n.singleQuoteAdepts})`,"g"),`${a.apos}`)}function an(e){return e=e.replace(new RegExp(`(${a.osqUnpaired})(.*?)(${a.singlePrime})`,"g"),`${a.osq}$2${a.csq}`),e=e.replace(new RegExp(`(${a.singlePrime})(.*?)(${a.csqUnpaired})`,"g"),`${a.osq}$2${a.csq}`),e}function tn(e,p){return e.replace(new RegExp(`(${p.openingSingleQuote})([^${n.spaces}${p.closingSingleQuote}]+?)([^${n.romanNumerals}${n.sentencePunctuation}])([${n.sentencePunctuation}]{1,})(${p.closingSingleQuote})`,"g"),(o,s,r,t,c,i)=>c.length===1&&/[.,;:]/.test(c)?s+r+t+i+c:o)}function rn(e,p){return e=e.replace(new RegExp(`(${p.openingSingleQuote})(.+)([${n.spaces}])(?!${p.openingSingleQuote})([^${n.romanNumerals}]{2,})(${p.closingSingleQuote})([${n.sentencePunctuation}${n.ellipsis}])([^${p.closingDoubleQuote}])`,"g"),"$1$2$3$4$6$5$7"),e=e.replace(new RegExp(`([:;])(${p.closingSingleQuote})`,"g"),"$2$1"),e=e.replace(new RegExp(`([${n.terminalPunctuation}${n.ellipsis}])(${p.closingSingleQuote})(${p.closingDoubleQuote})`,"g"),"$2$1$3"),e}function cn(e){return e.replace(new RegExp(`([${n.spaces}])(${n.singlePrime})`,"g"),"$2")}function un(e,p){return[{pattern:a.singlePrime,replacement:n.singlePrime},{pattern:`[${a.apos}${a.osqUnpaired}${a.csqUnpaired}]`,replacement:n.apostrophe},{pattern:a.osq,replacement:p.openingSingleQuote},{pattern:a.csq,replacement:p.closingSingleQuote}].reduce((s,{pattern:r,replacement:t})=>s.replace(new RegExp(r,"gu"),t),e)}function $n(e,p){return e=Fe(e),e=He(e),e=Ve(e),e=Ye(e),e=Ge(e),e=Je(e),e=on(e),e=nn(e),e=an(e),e=sn(e),e=un(e,p),e=tn(e,p),e=rn(e,p),e=cn(e),e}function dn(e){return m(e,new RegExp(`([\\d]+)([${n.spaces}]?[\\p{Ll}${n.singlePrime}${n.doublePrime}]*)([${n.spaces}][x][${n.spaces}])([\\d]+)([${n.spaces}]?[\\p{Ll}${n.singlePrime}${n.doublePrime}]*)`,"giu"),`$1$2${n.nbsp}${n.multiplicationSign}${n.nbsp}$4$5`)}function ln(e){return m(e,new RegExp(`([\\p{L}]+)([${n.spaces}][x][${n.spaces}])([\\p{L}]+)`,"gu"),`$1${n.nbsp}${n.multiplicationSign}${n.nbsp}$3`)}function fn(e){return e.replace(new RegExp(`([\\d])([${n.spaces}]?)([x×])([${n.spaces}])([\\p{Ll}]+)`,"giu"),function(p,o,s,r,t,c){return s==""?`${o}${s}${n.multiplicationSign}${n.nbsp}${c}`:`${o}${n.nbsp}${n.multiplicationSign}${n.nbsp}${c}`})}function bn(e){return e.replace(new RegExp(`([\\d]+)([${n.singlePrime}${n.doublePrime}])?([x|×])([\\d]+)([${n.singlePrime}${n.doublePrime}])?`,"giu"),`$1$2${n.nbsp}${n.multiplicationSign}${n.nbsp}$4$5`)}function mn(e){return e=dn(e),e=ln(e),e=fn(e),e=bn(e),e}function h(e,p,o){return e=re(e,p),e=F(e,p,o),e=H(e,p,o),e}function hn(e,p){return e=h(e,n.sectionSign,p.spaceAfter.sectionSign),e=h(e,n.paragraphSign,p.spaceAfter.paragraphSign),e}function Q(e,p,o){return e.replace(new RegExp(`(\\(${p}\\))([${n.spaces}]*)(\\d)`,"gi"),`${o}$2$3`)}function gn(e,p){return e=Q(e,"c",n.copyright),e=h(e,n.copyright,p.spaceAfter.copyright),e=Q(e,"p",n.soundRecordingCopyright),e=h(e,n.soundRecordingCopyright,p.spaceAfter.soundRecordingCopyright),e}function xn(e,p){return e=h(e,n.numeroSign,p.spaceAfter.numeroSign),e}function Sn(e){return e.replace(new RegExp("(\\+\\-)|(\\-\\+)","g"),n.plusMinus)}function g(e,p,o){return e.replace(new RegExp(`([^0-9]|^)([${n.spaces}]*)(\\(${p}\\)|${o})`,"gi"),`$1${o}`)}function En(e){return e=g(e,"r",n.registeredTrademark),e=g(e,"sm",n.serviceMark),e=g(e,"tm",n.trademark),e}function P(e,p,o){let s="m|dam|hm|km|Mm|Gm|Tm|Pm|Em|Zm|Ym|m|dm|cm|mm|µm|nm|pm|fm|am|zm|ym";return e.replace(new RegExp(`([${n.spaces}${n.slash}])(${s})(${p})`,"g"),`$1$2${o}`)}function wn(e){return P(e,"2","²")}function An(e){return P(e,"3","³")}function Rn(e){return e=wn(e),e=An(e),e}function Dn(e){return e.replace(new RegExp(`([${n.spaces}]+)(${n.numberSign})([${n.spaces}]+)(\\d)`,"g"),"$1$2$4")}function Qn(e){return e=Dn(e),e}function Pn(e,p){const o=`([\\p{Lu}][\\p{L}]?\\.)([${n.spaces}]?)`,s="([\\p{L}]{2,}[^\\.])",r=[{pattern:`${o}${s}`,replacement:`$1${n.nbsp}$3`},{pattern:`${o}${o}${s}`,replacement:`$1${p.spaceAfter.abbreviation}$3${n.space}$5`},{pattern:`${o}${o}${o}${s}`,replacement:`$1${p.spaceAfter.abbreviation}$3${p.spaceAfter.abbreviation}$5${n.space}$7`}];for(const{pattern:t,replacement:c}of r)e=e.replace(new RegExp(t,"gu"),c);return e}function yn(e,p){let o=`([^\\p{L}${n.enDash}${n.emDash}]|^)`,s="([\\p{L}]|\\D)",r=`([^\\p{L}${p.openingDoubleQuote}${p.openingSingleQuote}${n.backtick}\\p{Emoji}]|$)`,t=[];for(let c=0;c<p.multipleWordAbbreviations.length;c++){let i=p.multipleWordAbbreviations[c].split(" "),u="";for(let d=0;d<i.length;d++)u+=`(${i[d]})(\\.)([${n.spaces}]?)`;t[c]=u}for(let c=0;c<t.length;c++){let i=`${o}${t[c]}${s}`,u="$1",d=(t[c].match(/\(/g)||[]).length/3;for(let l=0;l<d-1;l++)u+=`$${l*3+2}.${p.spaceAfter.abbreviation}`;u+=`$${(d-1)*3+2}. $${d*3+2}`,e=e.replace(new RegExp(i,"giu"),u)}for(let c=0;c<t.length;c++){let i=`${o}${t[c]}${r}`,u="$1",d=(t[c].match(/\(/g)||[]).length/3;for(let l=0;l<d-1;l++)u+=`$${l*3+2}.${p.spaceAfter.abbreviation}`;u+=`$${(d-1)*3+2}.$${d*3+2}`,e=e.replace(new RegExp(i,"giu"),u)}return e}function Bn(e,p){let o=[];for(let i=0;i<p.singleWordAbbreviations.length;i++)o[i]=`(${p.singleWordAbbreviations[i]})(\\.)([${n.spaces}]?)`;let s=`([^\\p{L}${n.enDash}${n.emDash}${n.nbsp}\\.]|^)`,r="([\\p{L}\\d]+)([^\\.]|$)";for(let i=0;i<o.length;i++)e=e.replace(new RegExp(`${s}${o[i]}${r}`,"giu"),`$1$2$3${n.nbsp}$5$6`);let t=`([\\p{L}\\d])([${n.spaces}])`,c=`([^${n.spaces}\\p{L}\\d]|$)`;for(let i=0;i<o.length;i++)e=e.replace(new RegExp(`${t}${o[i]}${c}`,"giu"),`$1${n.nbsp}$3$4$5$6`);return e}function Ln(e,p){return e=Pn(e,p),e=yn(e,p),e=Bn(e,p),e}function vn(e){return e=e.replace(new RegExp("([^\\p{L}]|^)([\\p{Lu}]{2})([\\p{Ll}]{2,})","gu"),function(p,o,s,r){return`${o}${s.substring(0,1)}${s.substring(1).toLowerCase()}${r}`}),e.replace(new RegExp("(\\b)(?!iOS)([\\p{Ll}])([\\p{Lu}]{2,})","gu"),function(p,o,s,r){return`${o}${s.toUpperCase()}${r.toLowerCase()}`})}function Wn(e){return e.replace(new RegExp(`(issn)(:?)([${n.spaces}]?)(\\d{4})([${n.spaces}]?[${n.hyphen}${n.enDash}${n.emDash}][${n.spaces}]?)(\\d{4})`,"gi"),`ISSN$2${n.nbsp}$4-$6`)}function kn(e){let p=`([${n.spaces}]?[${n.hyphen}${n.enDash}${n.emDash}][${n.spaces}]?)`;return e.replace(new RegExp(`(isbn)(:?)([${n.spaces}]?)(\\d+)`+p+"(\\d+)"+p+"(\\d+)"+p+"(X|\\d+)","gi"),`ISBN$2${n.nbsp}$4-$6-$8-$10`)}function Nn(e){let p=`([${n.spaces}]?[${n.hyphen}${n.enDash}${n.emDash}][${n.spaces}]?)`;return e.replace(new RegExp(`(isbn)(:?)([${n.spaces}]?)(\\d+)`+p+"(\\d+)"+p+"(\\d+)"+p+"(\\d+)"+p+"(X|\\d+)","gi"),`ISBN$2${n.nbsp}$4-$6-$8-$10-$12`)}function qn(e){let p=`([${n.spaces}]?[${n.hyphen}${n.enDash}${n.emDash}][${n.spaces}]?)`;return e.replace(new RegExp("(\\d+)"+p+"(\\d+)"+p+"(\\d+)"+p+"(\\d+)"+p+"(X|\\d+?)","g"),"$1-$3-$5-$7-$9")}function In(e){return e=Wn(e),e=kn(e),e=Nn(e),e=qn(e),e}function Cn(e){let p=[];return x(e,n.emailPattern,p),x(e,n.urlPattern,p),x(e,n.filenamePattern,p),{processedText:zn(e,p),exceptions:p}}function x(e,p,o){const s=new RegExp(p,"gi"),r=e.match(s);return r&&r.forEach(t=>o.push(t)),o}function zn(e,p){return p.reduce((o,s,r)=>{const t=D(r);return o.replace(s,t)},e)}function Un(e,p){return p.reduce((o,s,r)=>{const t=D(r),c=new RegExp(t,"g");return o.replace(c,s)},e)}function On(e,p,o){p=typeof p>"u"?"en-us":p;let s=new I(p);o=typeof o>"u"?{removeLines:!0}:o;const{processedText:r,exceptions:t}=Cn(e);return e=r,o.removeLines&&(e=C(e)),e=we(e,s),e=ce(e,s),e=ue(e),e=Le(e,s),e=$n(e,s),e=Xe(e,s),e=mn(e),e=hn(e,s),e=gn(e,s),e=xn(e,s),e=Sn(e),e=En(e),e=Rn(e),e=Qn(e),e=vn(e),e=In(e),e=Ln(e,s),e=G(e,s),e=Un(e,t),e}f.fixTypos=On,Object.defineProperty(f,Symbol.toStringTag,{value:"Module"})}));