Last active
October 14, 2024 05:00
-
-
Save mdchaney/f7f54e8eefe227eb15699d24f35ca664 to your computer and use it in GitHub Desktop.
JavaScript unaccent - remove diacritics from utf-8 strings
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const ACCENT_MAP = { | |
" ":" ","¨":" ","ª":"a","¯":" ","²":"2","³":"3","´":" ","¸":" ","¹":"1", | |
"º":"o","À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","Æ":"AE","Ç":"C", | |
"È":"E","É":"E","Ê":"E","Ë":"E","Ì":"I","Í":"I","Î":"I","Ï":"I","Ñ":"N", | |
"Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","Ù":"U","Ú":"U","Û":"U", | |
"Ü":"U","Ý":"Y","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","æ":"ae", | |
"ç":"c","è":"e","é":"e","ê":"e","ë":"e","ì":"i","í":"i","î":"i","ï":"i", | |
"ñ":"n","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","ù":"u","ú":"u", | |
"û":"u","ü":"u","ý":"y","ÿ":"y","Ā":"A","ā":"a","Ă":"A","ă":"a","Ą":"A", | |
"ą":"a","Ć":"C","ć":"c","Ĉ":"C","ĉ":"c","Ċ":"C","ċ":"c","Č":"C","č":"c", | |
"Ď":"D","ď":"d","Đ":"D","đ":"d","Ē":"E","ē":"e","Ĕ":"E","ĕ":"e","Ė":"E", | |
"ė":"e","Ę":"E","ę":"e","Ě":"E","ě":"e","Ĝ":"G","ĝ":"g","Ğ":"G","ğ":"g", | |
"Ġ":"G","ġ":"g","Ģ":"G","ģ":"g","Ĥ":"H","ĥ":"h","Ħ":"H","ħ":"h","Ĩ":"I", | |
"ĩ":"i","Ī":"I","ī":"i","Ĭ":"I","ĭ":"i","Į":"I","į":"i","İ":"I","IJ":"IJ", | |
"ij":"ij","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","Ĺ":"L","ĺ":"l","Ļ":"L","ļ":"l", | |
"Ľ":"L","ľ":"l","Ł":"L","ł":"l","Ń":"N","ń":"n","Ņ":"N","ņ":"n","Ň":"N", | |
"ň":"n","Ō":"O","ō":"o","Ŏ":"O","ŏ":"o","Ő":"O","ő":"o","Ŕ":"R","ŕ":"r", | |
"Ŗ":"R","ŗ":"r","Ř":"R","ř":"r","Ś":"S","ś":"s","Ŝ":"S","ŝ":"s","Ş":"S", | |
"ş":"s","Š":"S","š":"s","Ţ":"T","ţ":"t","Ť":"T","ť":"t","Ŧ":"T","ŧ":"t", | |
"Ũ":"U","ũ":"u","Ū":"U","ū":"u","Ŭ":"U","ŭ":"u","Ů":"U","ů":"u","Ű":"U", | |
"ű":"u","Ų":"U","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z", | |
"ź":"z","Ż":"Z","ż":"z","Ž":"Z","ž":"z","ſ":"s","ƀ":"b","Ɓ":"B","Ƃ":"B", | |
"ƃ":"b","Ƈ":"C","ƈ":"c","Ɗ":"D","Ƌ":"D","ƌ":"d","Ƒ":"F","ƒ":"f","Ɠ":"G", | |
"Ɨ":"I","Ƙ":"K","ƙ":"k","ƚ":"l","Ɲ":"N","ƞ":"n","Ɵ":"O","Ơ":"O","ơ":"o", | |
"Ƥ":"P","ƥ":"p","ƫ":"t","Ƭ":"T","ƭ":"t","Ʈ":"T","Ư":"U","ư":"u","Ʋ":"V", | |
"Ƴ":"Y","ƴ":"y","Ƶ":"Z","ƶ":"z","DŽ":"DZ","Dž":"Dz","dž":"dz","LJ":"LJ", | |
"Lj":"Lj","lj":"lj","NJ":"NJ","Nj":"Nj","nj":"nj","Ǎ":"A","ǎ":"a","Ǐ":"I", | |
"ǐ":"i","Ǒ":"O","ǒ":"o","Ǔ":"U","ǔ":"u","Ǖ":"U","ǖ":"u","Ǘ":"U","ǘ":"u", | |
"Ǚ":"U","ǚ":"u","Ǜ":"U","ǜ":"u","Ǟ":"A","ǟ":"a","Ǡ":"A","ǡ":"a","Ǣ":"AE", | |
"ǣ":"ae","Ǥ":"G","ǥ":"g","Ǧ":"G","ǧ":"g","Ǩ":"K","ǩ":"k","Ǫ":"O","ǫ":"o", | |
"Ǭ":"O","ǭ":"o","ǰ":"j","DZ":"DZ","Dz":"Dz","dz":"dz","Ǵ":"G","ǵ":"g","Ǹ":"N", | |
"ǹ":"n","Ǻ":"A","ǻ":"a","Ǽ":"AE","ǽ":"ae","Ǿ":"O","ǿ":"o","Ȁ":"A","ȁ":"a", | |
"Ȃ":"A","ȃ":"a","Ȅ":"E","ȅ":"e","Ȇ":"E","ȇ":"e","Ȉ":"I","ȉ":"i","Ȋ":"I", | |
"ȋ":"i","Ȍ":"O","ȍ":"o","Ȏ":"O","ȏ":"o","Ȑ":"R","ȑ":"r","Ȓ":"R","ȓ":"r", | |
"Ȕ":"U","ȕ":"u","Ȗ":"U","ȗ":"u","Ș":"S","ș":"s","Ț":"T","ț":"t","Ȟ":"H", | |
"ȟ":"h","Ƞ":"N","ȡ":"d","Ȥ":"Z","ȥ":"z","Ȧ":"A","ȧ":"a","Ȩ":"E","ȩ":"e", | |
"Ȫ":"O","ȫ":"o","Ȭ":"O","ȭ":"o","Ȯ":"O","ȯ":"o","Ȱ":"O","ȱ":"o","Ȳ":"Y", | |
"ȳ":"y","ȴ":"l","ȵ":"n","ȶ":"t","ɓ":"b","ɕ":"c","ɖ":"d","ɗ":"d","ɠ":"g", | |
"ɦ":"h","ɨ":"i","ɫ":"l","ɬ":"l","ɭ":"l","ɱ":"m","ɲ":"n","ɳ":"n","ɼ":"r", | |
"ɽ":"r","ɾ":"r","ʂ":"s","ʈ":"t","ʋ":"v","ʐ":"z","ʑ":"z","ʝ":"j","ʠ":"q", | |
"ʰ":"h","ʱ":"h","ʲ":"j","ʳ":"r","ʷ":"w","ʸ":"y","˘":" ","˙":" ","˚":" ", | |
"˛":" ","˜":" ","˝":" ","ˡ":"l","ˢ":"s","ˣ":"x","ͺ":" ",";":";","΄":" ", | |
"΅":" ","ᴬ":"A","ᴭ":"AE","ᴮ":"B","ᴰ":"D","ᴱ":"E","ᴳ":"G","ᴴ":"H","ᴵ":"I", | |
"ᴶ":"J","ᴷ":"K","ᴸ":"L","ᴹ":"M","ᴺ":"N","ᴼ":"O","ᴾ":"P","ᴿ":"R","ᵀ":"T", | |
"ᵁ":"U","ᵂ":"W","ᵃ":"a","ᵇ":"b","ᵈ":"d","ᵉ":"e","ᵍ":"g","ᵏ":"k","ᵐ":"m", | |
"ᵒ":"o","ᵖ":"p","ᵗ":"t","ᵘ":"u","ᵛ":"v","ᵢ":"i","ᵣ":"r","ᵤ":"u","ᵥ":"v", | |
"Ḁ":"A","ḁ":"a","Ḃ":"B","ḃ":"b","Ḅ":"B","ḅ":"b","Ḇ":"B","ḇ":"b","Ḉ":"C", | |
"ḉ":"c","Ḋ":"D","ḋ":"d","Ḍ":"D","ḍ":"d","Ḏ":"D","ḏ":"d","Ḑ":"D","ḑ":"d", | |
"Ḓ":"D","ḓ":"d","Ḕ":"E","ḕ":"e","Ḗ":"E","ḗ":"e","Ḙ":"E","ḙ":"e","Ḛ":"E", | |
"ḛ":"e","Ḝ":"E","ḝ":"e","Ḟ":"F","ḟ":"f","Ḡ":"G","ḡ":"g","Ḣ":"H","ḣ":"h", | |
"Ḥ":"H","ḥ":"h","Ḧ":"H","ḧ":"h","Ḩ":"H","ḩ":"h","Ḫ":"H","ḫ":"h","Ḭ":"I", | |
"ḭ":"i","Ḯ":"I","ḯ":"i","Ḱ":"K","ḱ":"k","Ḳ":"K","ḳ":"k","Ḵ":"K","ḵ":"k", | |
"Ḷ":"L","ḷ":"l","Ḹ":"L","ḹ":"l","Ḻ":"L","ḻ":"l","Ḽ":"L","ḽ":"l","Ḿ":"M", | |
"ḿ":"m","Ṁ":"M","ṁ":"m","Ṃ":"M","ṃ":"m","Ṅ":"N","ṅ":"n","Ṇ":"N","ṇ":"n", | |
"Ṉ":"N","ṉ":"n","Ṋ":"N","ṋ":"n","Ṍ":"O","ṍ":"o","Ṏ":"O","ṏ":"o","Ṑ":"O", | |
"ṑ":"o","Ṓ":"O","ṓ":"o","Ṕ":"P","ṕ":"p","Ṗ":"P","ṗ":"p","Ṙ":"R","ṙ":"r", | |
"Ṛ":"R","ṛ":"r","Ṝ":"R","ṝ":"r","Ṟ":"R","ṟ":"r","Ṡ":"S","ṡ":"s","Ṣ":"S", | |
"ṣ":"s","Ṥ":"S","ṥ":"s","Ṧ":"S","ṧ":"s","Ṩ":"S","ṩ":"s","Ṫ":"T","ṫ":"t", | |
"Ṭ":"T","ṭ":"t","Ṯ":"T","ṯ":"t","Ṱ":"T","ṱ":"t","Ṳ":"U","ṳ":"u","Ṵ":"U", | |
"ṵ":"u","Ṷ":"U","ṷ":"u","Ṹ":"U","ṹ":"u","Ṻ":"U","ṻ":"u","Ṽ":"V","ṽ":"v", | |
"Ṿ":"V","ṿ":"v","Ẁ":"W","ẁ":"w","Ẃ":"W","ẃ":"w","Ẅ":"W","ẅ":"w","Ẇ":"W", | |
"ẇ":"w","Ẉ":"W","ẉ":"w","Ẋ":"X","ẋ":"x","Ẍ":"X","ẍ":"x","Ẏ":"Y","ẏ":"y", | |
"Ẑ":"Z","ẑ":"z","Ẓ":"Z","ẓ":"z","Ẕ":"Z","ẕ":"z","ẖ":"h","ẗ":"t","ẘ":"w", | |
"ẙ":"y","ẛ":"s","Ạ":"A","ạ":"a","Ả":"A","ả":"a","Ấ":"A","ấ":"a","Ầ":"A", | |
"ầ":"a","Ẩ":"A","ẩ":"a","Ẫ":"A","ẫ":"a","Ậ":"A","ậ":"a","Ắ":"A","ắ":"a", | |
"Ằ":"A","ằ":"a","Ẳ":"A","ẳ":"a","Ẵ":"A","ẵ":"a","Ặ":"A","ặ":"a","Ẹ":"E", | |
"ẹ":"e","Ẻ":"E","ẻ":"e","Ẽ":"E","ẽ":"e","Ế":"E","ế":"e","Ề":"E","ề":"e", | |
"Ể":"E","ể":"e","Ễ":"E","ễ":"e","Ệ":"E","ệ":"e","Ỉ":"I","ỉ":"i","Ị":"I", | |
"ị":"i","Ọ":"O","ọ":"o","Ỏ":"O","ỏ":"o","Ố":"O","ố":"o","Ồ":"O","ồ":"o", | |
"Ổ":"O","ổ":"o","Ỗ":"O","ỗ":"o","Ộ":"O","ộ":"o","Ớ":"O","ớ":"o","Ờ":"O", | |
"ờ":"o","Ở":"O","ở":"o","Ỡ":"O","ỡ":"o","Ợ":"O","ợ":"o","Ụ":"U","ụ":"u", | |
"Ủ":"U","ủ":"u","Ứ":"U","ứ":"u","Ừ":"U","ừ":"u","Ử":"U","ử":"u","Ữ":"U", | |
"ữ":"u","Ự":"U","ự":"u","Ỳ":"Y","ỳ":"y","Ỵ":"Y","ỵ":"y","Ỷ":"Y","ỷ":"y", | |
"Ỹ":"Y","ỹ":"y","᾽":" ","᾿":" ","῀":" ","῁":" ","῍":" ","῎":" ","῏":" ", | |
"῝":" ","῞":" ","῟":" ","῭":" ","΅":" ","`":"`","´":" ","῾":" "," ":" ", | |
" ":" "," ":" "," ":" "," ":" "," ":" "," ":" "," ":" "," ":" "," ":" ", | |
" ":" ","‗":" ","․":".","‥":"..","…":"..."," ":" ","‼":"!!","‾":" ","⁅":"[", | |
"⁆":"]","⁇":"??","⁈":"?!","⁉":"!?"," ":" ","⁰":"0","ⁱ":"i","⁴":"4","⁵":"5", | |
"⁶":"6","⁷":"7","⁸":"8","⁹":"9","⁺":"+","⁼":"=","⁽":"(","⁾":")","ⁿ":"n", | |
"₀":"0","₁":"1","₂":"2","₃":"3","₄":"4","₅":"5","₆":"6","₇":"7","₈":"8", | |
"₉":"9","₊":"+","₌":"=","₍":"(","₎":")","₨":"Rs","℀":"a/c","℁":"a/s", | |
"ℂ":"C","℅":"c/o","℆":"c/u","ℊ":"g","ℋ":"H","ℌ":"H","ℍ":"H","ℎ":"h","ℏ":"h", | |
"ℐ":"I","ℑ":"I","ℒ":"L","ℓ":"l","ℕ":"N","№":"No","ℙ":"P","ℚ":"Q","ℛ":"R", | |
"ℜ":"R","ℝ":"R","℠":"SM","℡":"TEL","™":"TM","ℤ":"Z","ℨ":"Z","K":"K","Å":"A", | |
"ℬ":"B","ℭ":"C","ℯ":"e","ℰ":"E","ℱ":"F","ℳ":"M","ℴ":"o","ℹ":"i","℻":"FAX", | |
"ⅅ":"D","ⅆ":"d","ⅇ":"e","ⅈ":"i","ⅉ":"j","Ⅰ":"I","Ⅱ":"II","Ⅲ":"III","Ⅳ":"IV", | |
"Ⅴ":"V","Ⅵ":"VI","Ⅶ":"VII","Ⅷ":"VIII","Ⅸ":"IX","Ⅹ":"X","Ⅺ":"XI","Ⅻ":"XII", | |
"Ⅼ":"L","Ⅽ":"C","Ⅾ":"D","Ⅿ":"M","ⅰ":"i","ⅱ":"ii","ⅲ":"iii","ⅳ":"iv","ⅴ":"v", | |
"ⅵ":"vi","ⅶ":"vii","ⅷ":"viii","ⅸ":"ix","ⅹ":"x","ⅺ":"xi","ⅻ":"xii","ⅼ":"l", | |
"ⅽ":"c","ⅾ":"d","ⅿ":"m","≠":"=","≮":"\u003c","≯":"\u003e","⍿":"|","①":"1", | |
"②":"2","③":"3","④":"4","⑤":"5","⑥":"6","⑦":"7","⑧":"8","⑨":"9","⑩":"10", | |
"⑪":"11","⑫":"12","⑬":"13","⑭":"14","⑮":"15","⑯":"16","⑰":"17","⑱":"18", | |
"⑲":"19","⑳":"20","⑴":"(1)","⑵":"(2)","⑶":"(3)","⑷":"(4)","⑸":"(5)", | |
"⑹":"(6)","⑺":"(7)","⑻":"(8)","⑼":"(9)","⑽":"(10)","⑾":"(11)","⑿":"(12)", | |
"⒀":"(13)","⒁":"(14)","⒂":"(15)","⒃":"(16)","⒄":"(17)","⒅":"(18)", | |
"⒆":"(19)","⒇":"(20)","⒈":"1.","⒉":"2.","⒊":"3.","⒋":"4.","⒌":"5.","⒍":"6.", | |
"⒎":"7.","⒏":"8.","⒐":"9.","⒑":"10.","⒒":"11.","⒓":"12.","⒔":"13.", | |
"⒕":"14.","⒖":"15.","⒗":"16.","⒘":"17.","⒙":"18.","⒚":"19.","⒛":"20.", | |
"⒜":"(a)","⒝":"(b)","⒞":"(c)","⒟":"(d)","⒠":"(e)","⒡":"(f)","⒢":"(g)", | |
"⒣":"(h)","⒤":"(i)","⒥":"(j)","⒦":"(k)","⒧":"(l)","⒨":"(m)","⒩":"(n)", | |
"⒪":"(o)","⒫":"(p)","⒬":"(q)","⒭":"(r)","⒮":"(s)","⒯":"(t)","⒰":"(u)", | |
"⒱":"(v)","⒲":"(w)","⒳":"(x)","⒴":"(y)","⒵":"(z)","Ⓐ":"A","Ⓑ":"B","Ⓒ":"C", | |
"Ⓓ":"D","Ⓔ":"E","Ⓕ":"F","Ⓖ":"G","Ⓗ":"H","Ⓘ":"I","Ⓙ":"J","Ⓚ":"K","Ⓛ":"L", | |
"Ⓜ":"M","Ⓝ":"N","Ⓞ":"O","Ⓟ":"P","Ⓠ":"Q","Ⓡ":"R","Ⓢ":"S","Ⓣ":"T","Ⓤ":"U", | |
"Ⓥ":"V","Ⓦ":"W","Ⓧ":"X","Ⓨ":"Y","Ⓩ":"Z","ⓐ":"a","ⓑ":"b","ⓒ":"c","ⓓ":"d", | |
"ⓔ":"e","ⓕ":"f","ⓖ":"g","ⓗ":"h","ⓘ":"i","ⓙ":"j","ⓚ":"k","ⓛ":"l","ⓜ":"m", | |
"ⓝ":"n","ⓞ":"o","ⓟ":"p","ⓠ":"q","ⓡ":"r","ⓢ":"s","ⓣ":"t","ⓤ":"u","ⓥ":"v", | |
"ⓦ":"w","ⓧ":"x","ⓨ":"y","ⓩ":"z","⓪":"0","⦋":"[","⦌":"]","⦍":"[","⦎":"]", | |
"⦏":"[","⦐":"]","⧶":"/","⧷":"\\","⨢":"+","⨣":"+","⨤":"+","⨥":"+","⨦":"+", | |
"⨧":"+","⨨":"+","⩦":"=","⩴":"::=","⩵":"==","⩶":"===","⩷":"=","⪮":"=", | |
"⫯":"|","⫰":"|"," ":" ","゛":" ","゜":" ","㉐":"PTE","㉑":"21","㉒":"22", | |
"㉓":"23","㉔":"24","㉕":"25","㉖":"26","㉗":"27","㉘":"28","㉙":"29","㉚":"30", | |
"㉛":"31","㉜":"32","㉝":"33","㉞":"34","㉟":"35","㊱":"36","㊲":"37","㊳":"38", | |
"㊴":"39","㊵":"40","㊶":"41","㊷":"42","㊸":"43","㊹":"44","㊺":"45","㊻":"46", | |
"㊼":"47","㊽":"48","㊾":"49","㊿":"50","㋌":"Hg","㋍":"erg","㋎":"eV","㋏":"LTD", | |
"㍱":"hPa","㍲":"da","㍳":"AU","㍴":"bar","㍵":"oV","㍶":"pc","㍷":"dm","㍸":"dm2", | |
"㍹":"dm3","㍺":"IU","㎀":"pA","㎁":"nA","㎃":"mA","㎄":"kA","㎅":"KB","㎆":"MB", | |
"㎇":"GB","㎈":"cal","㎉":"kcal","㎊":"pF","㎋":"nF","㎎":"mg","㎏":"kg","㎐":"Hz", | |
"㎑":"kHz","㎒":"MHz","㎓":"GHz","㎔":"THz","㎖":"ml","㎗":"dl","㎘":"kl","㎙":"fm", | |
"㎚":"nm","㎜":"mm","㎝":"cm","㎞":"km","㎟":"mm2","㎠":"cm2","㎡":"m2","㎢":"km2", | |
"㎣":"mm3","㎤":"cm3","㎥":"m3","㎦":"km3","㎩":"Pa","㎪":"kPa","㎫":"MPa", | |
"㎬":"GPa","㎭":"rad","㎰":"ps","㎱":"ns","㎳":"ms","㎴":"pV","㎵":"nV","㎷":"mV", | |
"㎸":"kV","㎹":"MV","㎺":"pW","㎻":"nW","㎽":"mW","㎾":"kW","㎿":"MW","㏂":"a.m.", | |
"㏃":"Bq","㏄":"cc","㏅":"cd","㏇":"Co.","㏈":"dB","㏉":"Gy","㏊":"ha","㏋":"HP", | |
"㏌":"in","㏍":"KK","㏎":"KM","㏏":"kt","㏐":"lm","㏑":"ln","㏒":"log","㏓":"lx", | |
"㏔":"mb","㏕":"mil","㏖":"mol","㏗":"PH","㏘":"p.m.","㏙":"PPM","㏚":"PR", | |
"㏛":"sr","㏜":"Sv","㏝":"Wb","㏿":"gal","ff":"ff","fi":"fi","fl":"fl","ffi":"ffi", | |
"ffl":"ffl","ſt":"ts","st":"st","﬩":"+","ﱞ":" ","ﱟ":" ","ﱠ":" ","ﱡ":" ","ﱢ":" ", | |
"ﱣ":" ","︰":"..","︳":"_","︴":"_","︵":"(","︶":")","︷":"{","︸":"}","﹇":"[", | |
"﹈":"]","﹉":" ","﹊":" ","﹋":" ","﹌":" ","﹍":"_","﹎":"_","﹏":"_","﹐":",", | |
"﹒":".","﹔":";","﹕":":","﹖":"?","﹗":"!","﹙":"(","﹚":")","﹛":"{","﹜":"}", | |
"﹟":"#","﹠":"\u0026","﹡":"*","﹢":"+","﹣":"-","﹤":"\u003c","﹥":"\u003e", | |
"﹦":"=","﹨":"\\","﹩":"$","﹪":"%","﹫":"@","ﹰ":" ","ﹲ":" ","ﹴ":" ","ﹶ":" ", | |
"ﹸ":" ","ﹺ":" ","ﹼ":" ","ﹾ":" ","!":"!",""":"\"","#":"#","$":"$","%":"%", | |
"&":"\u0026","'":"'","(":"(",")":")","*":"*","+":"+",",":",","-":"-", | |
".":".","/":"/","0":"0","1":"1","2":"2","3":"3","4":"4","5":"5","6":"6", | |
"7":"7","8":"8","9":"9",":":":",";":";","<":"\u003c","=":"=",">":"\u003e", | |
"?":"?","@":"@","A":"A","B":"B","C":"C","D":"D","E":"E","F":"F","G":"G", | |
"H":"H","I":"I","J":"J","K":"K","L":"L","M":"M","N":"N","O":"O","P":"P", | |
"Q":"Q","R":"R","S":"S","T":"T","U":"U","V":"V","W":"W","X":"X","Y":"Y", | |
"Z":"Z","[":"[","\":"\\","]":"]","^":"^","_":"_","`":"`","a":"a","b":"b", | |
"c":"c","d":"d","e":"e","f":"f","g":"g","h":"h","i":"i","j":"j","k":"k", | |
"l":"l","m":"m","n":"n","o":"o","p":"p","q":"q","r":"r","s":"s","t":"t", | |
"u":"u","v":"v","w":"w","x":"x","y":"y","z":"z","{":"{","|":"|","}":"}", | |
"~":"~"," ̄":" "}; | |
export const unaccent = function(str) { | |
return str.normalize().split('').map(char => ACCENT_MAP[char] || char).join(''); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
To use this, simply import "unaccent" into your module: | |
import { unaccent } from 'unaccent' | |
Then, you can use it to unaccent strings: | |
unaccent("Beyoncé") => "Beyonce" | |
This includes the list from the SixArm unaccent gem for Ruby: | |
https://github.com/SixArm/sixarm_ruby_unaccent | |
Which is based on the older Perl implementation of text::unaccent: | |
https://metacpan.org/pod/Text::Unaccent | |
There are thousands of conversions in the original. I have filtered them down to items that specifically map to only ASCII characters. With the gem loaded, you can recreate this map easily from irb: | |
> puts String::ACCENTMAP.select { |k,v| v.chars.all? { |c| c.ord < 128 } }.to_h.to_json; | |
I wrapped it around 72 characters to make the source more readable. As you can see, it's trivial to get the entire mapping by simply using: | |
> puts Srirng::ACCENTMAP.to_json; | |
For my purposes with primarily western characters the smaller map will work fine. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment