@foundernest/namecase
Version:
A fully typed library for fixing capitalization of people's names. Based on tamtamchik PHP library.
3 lines (2 loc) • 5.99 kB
JavaScript
function M(){return(M=Object.assign||function(M){for(var t=1;t<arguments.length;t++){var e=arguments[t];for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(M[a]=e[a])}return M}).apply(this,arguments)}class t{constructor(M){this.EXCEPTIONS=[[/\bMacEdo/,"Macedo"],[/\bMacEvicius/,"Macevicius"],[/\bMacHado/,"Machado"],[/\bMacHar/,"Machar"],[/\bMacHin/,"Machin"],[/\bMacHlin/,"Machlin"],[/\bMacIas/,"Macias"],[/\bMacIulis/,"Maciulis"],[/\bMacKie/,"Mackie"],[/\bMacKle/,"Mackle"],[/\bMacKlin/,"Macklin"],[/\bMacKmin/,"Mackmin"],[/\bMacQuarie/,"Macquarie"],[/\bMacOmber/,"Macomber"],[/\bMacIn/,"Macin"],[/\bMacKintosh/,"Mackintosh"],[/\bMacKen/,"Macken"],[/\bMacHen/,"Machen"],[/\bMacisaac/,"MacIsaac"],[/\bMacHiel/,"Machiel"],[/\bMacIol/,"Maciol"],[/\bMacKell/,"Mackell"],[/\bMacKlem/,"Macklem"],[/\bMacKrell/,"Mackrell"],[/\bMacLin/,"Maclin"],[/\bMacKey/,"Mackey"],[/\bMacKley/,"Mackley"],[/\bMacHell/,"Machell"],[/\bMacHon/,"Machon"]],this.REPLACEMENTS=[[/\b(Al)(\s+\w)/,"al$2"],[/\b(Ap)\b/,"ap"],[/\b(Bin|Binti|Binte)\b/,"bin"],[/\bDell([ae])\b/,"dell$1"],[/\bD([aeiou])\b/,"d$1"],[/\bD([ao]s)\b/,"d$1"],[/\bDe([lrn])\b/,"de$1"],[/\bL([eo])\b/,"l$1"],[/\b(El)\b/,"el"],[/\b(La)\b/,"la"],[/\b(Te)([rn])\b/,"te$2"],[/\b(Van)(\s+\w)/,"van$2"],[/\b(Von)\b/,"von"]],this.HEBREW=[[/\b(Ben)(\s+\w)/,"ben$2"],[/\b(Bat)(\s+\w)/,"bat$2"]],this.CONJUNCTIONS=["Y","E","I"],this.ROMAN_REGEX=/\b((?:[Xx]{1,3}|[Xx][Ll]|[Ll][Xx]{0,3})?(?:[Ii]{1,3}|[Ii][VvXx]|[Vv][Ii]{0,3})?)\b/g,this.POST_NOMINALS=["ACILEx","ACSM","ADC","AEPC","AFC","AFM","AICSM","AKC","AM","ARBRIBA","ARCS","ARRC","ARSM","AUH","AUS","BA","BArch","BCh","BChir","BCL","BDS","BEd","BEM","BEng","BM","BS","BSc","BSW","BVM&S","BVScBVetMed","CB","CBE","CEng","CertHE","CGC","CGM","CH","CIE","CMarEngCMarSci","CMarTech","CMG","CMILT","CML","CPhT","CPLCTP","CPM","CQSW","CSciTeach","CSI","CTL","CVO","DBE","DBEnv","DC","DCB","DCM","DCMG","DConstMgt","DCVO","DD","DEM","DFC","DFM","DIC","Dip","DipHE","DipLP","DipSW","DL","DLitt","DLP","DPhil","DProf","DPT","DREst","DSC","DSM","DSO","DSocSci","ED","EdD","EJLog","EMLog","EN","EngD","EngTech","ERD","ESLog","FADO","FAWM","FBDOFCOptom","FCEM","FCILEx","FCILT","FCSP.","FdAFdSc","FdEng","FFHOM","FFPM","FRCAFFPMRCA","FRCGP","FRCOG","FRCP","FRCPsych","FRCS","FRCVS","FSCR.","GBE","GC","GCB","GCIE","GCILEx","GCMG","GCSI","GCVO","GM","HNC","HNCert","HND","HNDip","ICTTech","IDSM","IEng","IMarEng","IOMCPM","ISO","J","JP","JrLog","KBE","KC","KCB","KCIE","KCMmG","KCSI","KCVO","KG","KP","KT","LFHOM","LG","LJ","LLB","LLD","LLM","Log","LPE","LT","LVO","MA","MAcc","MAnth","MArch","MarEngTech","MB","MBA","MBChB","MBE","MBEIOM","MBiochem","MC","MCEM","MCGI","MCh.","MChem","MChiro","MClinRes","MComp","MCOptom","MCSM","MCSP","MD","MEarthSc","MEng","MEnt","MEP","MFHOM","MFin","MFPM","MGeol","MILT","MJur","MLA","MLitt","MM","MMath","MMathStat","MMORSE","MMus","MOst","MP","MPAMEd","MPharm","MPhil","MPhys","MRCGP","MRCOG","MRCP","MRCPath","MRCPCHFRCPCH","MRCPsych","MRCS","MRCVS","MRes","MS","MSc","MScChiro","MSci","MSCR","MSM","MSocSc","MSP","MSt","MSW","MSYP","MVO","NPQH","OBE","OBI","OM","OND","PgC","PGCAP","PGCE","PgCert","PGCHE","PgCLTHE","PgD","PGDE","PgDip","PhD","PLog","PLS","QAM","QC","QFSM","QGM","QHC","QHDS","QHNS","QHP","QHS","QPM","QS","QTSCSci","RD","RFHN","RGN","RHV","RIAI","RIAS","RM","RMN","RN","RN1RNA","RN2","RN3","RN4","RN5","RN6","RN7","RN8","RN9","RNC","RNLD","RNMH","ROH","RRC","RSAW","RSci","RSciTech","RSCN","RSN","RVM","RVN","SCHM","SCJ","SCLD","SEN","SGM","SL","SPANSPMH","SPCC","SPCN","SPDN","SPHP","SPLD","SrLog","SRN","SROT","TD","UD","V100","V200","V300","VC","VD","VetMB","VN","VRD"],this.postNominalsExcluded=[],this.options={lazy:!0,irish:!0,spanish:!0,roman:!0,hebrew:!0,postnominal:!0},this.bckOptions={},this.setOptions(M)}setOptions(t){this.options=M({},this.options,t)}backupOptions(){this.bckOptions=M({},this.options)}restoreOptions(){this.options=M({},this.bckOptions)}excludePostNominals(M){this.postNominalsExcluded=this.postNominalsExcluded.concat(M)}nameCase(M,t={}){if(""===M)return M;if(this.backupOptions(),this.setOptions(t),this.options.lazy&&this.skipMixed(M))return M;M=this.capitalizeFirstLetters(M),M=this.lowercaseFinalS(M),M=this.updateIrish(M);for(const[t,e]of this.getReplacements())M=M.replace(t,e);return M=this.processOptions(M),this.restoreOptions(),M}processOptions(M){return this.options.roman&&(M=this.updateRoman(M)),this.options.spanish&&(M=this.updateSpanish(M)),this.options.postnominal&&(M=this.fixPostNominal(M)),M}capitalizeFirstLetters(M){return(M=M.toLowerCase()).replace(/([\s,.:;"'(-]|^)([^\s,.:;"'(-])/g,(...M)=>M[1]+M[2].toUpperCase())}lowercaseFinalS(M){return M.replace(/'([^\s,.:;"'(-])([\s,.:;"'(-]|$)/g,(...M)=>"'"+M[1].toLowerCase()+M[2])}getReplacements(){let M=this.REPLACEMENTS;return this.options.hebrew&&(M=M.concat(this.HEBREW)),M}updateIrish(M){return this.options.irish?((/.*?\bMac[A-Za-z]{2,}[^aciozj]\b/.test(M)||/.*?\bMc/.test(M))&&(M=this.updateMac(M)),M.replace(/\bMacmurdo/,"MacMurdo").replace(/\bMacisaac/,"MacIsaac")):M}updateMac(M){M=M.replace(/\b(Ma?c)([A-Za-z]+)/,(...M)=>M[1]+M[2].charAt(0).toUpperCase()+M[2].substring(1));for(const[t,e]of this.EXCEPTIONS)M=M.replace(t,e);return M}updateRoman(M){return M.replace(this.ROMAN_REGEX,(...M)=>M[0].toUpperCase())}updateSpanish(M){for(const t of this.CONJUNCTIONS)M=M.replace(new RegExp(`([\\s,.:;"'-(]|^)${t}([\\s,.:;"'-(]|$)`,"g"),(...M)=>M[1]+t.toLowerCase()+M[2]);return M}fixPostNominal(M){const t=this.POST_NOMINALS.filter(M=>!this.postNominalsExcluded.includes(M));for(const e of t)M=M.replace(new RegExp(`([\\s,.:;"'-(]|^)${this.capitalizeFirstLetters(e)}([\\s,.:;"'-(]|$)`,"g"),(...M)=>M[1]+e+M[2]);return M}skipMixed(M){const t=M[0]===M[0].toLowerCase(),e=M.toLowerCase()===M||M.toUpperCase()===M;return!(t||e)}}const e=new t({}),a=M=>e.setOptions(M),s=M=>e.excludePostNominals(M),i=(M,t)=>e.nameCase(M,t);export default t;export{s as excludePostNominals,i as nameCase,a as setOptions};
//# sourceMappingURL=index.modern.js.map