text-data-accentfold.js revision d5e1afc3ed7566eaefec24d27a0c2cecdb4690e8
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews/**
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * An imperfect, incomplete reverse mapping of ASCII characters to
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * case-insensitive regexes that match their most common accented forms.
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews *
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * @module text
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff * @submodule text-data-accentfold
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff */
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff/**
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff * <p>
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff * An imperfect, incomplete reverse mapping of ASCII characters to
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff * case-insensitive regexes that match their most common accented forms.
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff * </p>
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff *
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff * <p>
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff * The goal of this module is to provide a pragmatic and generally useful set of
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff * accent folding data, since serving and performing lookups on a complete
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff * dataset would be impractical in client-side JavaScript.
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff * </p>
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff *
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff * <p>
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff * Whenever possible, accent folding should be done on the server, where it's
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff * possible to use tools that are both more complete and more performant. It
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff * should only be done on the client as an absolute last resort.
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff * </p>
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff *
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff * @class Text.Data.AccentFold
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff * @static
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff */
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff// The following tool was very helpful in creating these mappings:
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff// http://unicode.org/cldr/utility/list-unicodeset.jsp?a=[:toNFKD%3D/^a/:]&abb=on
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff
3da9aeb80704bdd45aaf5971d1a06cbd13580ca9Tatuya JINMEI 神明達哉Y.namespace('Text.Data').AccentFold = {
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff 0: /[⁰₀⓪0]/gi,
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff 1: /[¹₁①1]/gi,
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff 2: /[²₂②2]/gi,
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff 3: /[³₃③3]/gi,
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff 4: /[⁴₄④4]/gi,
3da9aeb80704bdd45aaf5971d1a06cbd13580ca9Tatuya JINMEI 神明達哉 5: /[⁵₅⑤5]/gi,
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff 6: /[⁶₆⑥6]/gi,
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff 7: /[⁷₇⑦7]/gi,
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff 8: /[⁸₈⑧8]/gi,
3da9aeb80704bdd45aaf5971d1a06cbd13580ca9Tatuya JINMEI 神明達哉 9: /[⁹₉⑨9]/gi,
3da9aeb80704bdd45aaf5971d1a06cbd13580ca9Tatuya JINMEI 神明達哉 a: /[ªà-åāăąǎǟǡǻȁȃȧᵃḁẚạảấầẩẫậắằẳẵặⓐa]/gi,
3da9aeb80704bdd45aaf5971d1a06cbd13580ca9Tatuya JINMEI 神明達哉 b: /[ᵇḃḅḇⓑb]/gi,
3da9aeb80704bdd45aaf5971d1a06cbd13580ca9Tatuya JINMEI 神明達哉 c: /[çćĉċčᶜḉⓒc]/gi,
97a19a9ad60796faaa9eb851c0b84ff2f8a4211bTatuya JINMEI 神明達哉 d: /[ďᵈḋḍḏḑḓⅾⓓd]/gi,
97a19a9ad60796faaa9eb851c0b84ff2f8a4211bTatuya JINMEI 神明達哉 e: /[è-ëēĕėęěȅȇȩᵉḕḗḙḛḝẹẻẽếềểễệₑℯⓔe]/gi,
97a19a9ad60796faaa9eb851c0b84ff2f8a4211bTatuya JINMEI 神明達哉 f: /[ᶠḟⓕf]/gi,
97a19a9ad60796faaa9eb851c0b84ff2f8a4211bTatuya JINMEI 神明達哉 g: /[ĝğġģǧǵᵍḡℊⓖg]/gi,
97a19a9ad60796faaa9eb851c0b84ff2f8a4211bTatuya JINMEI 神明達哉 h: /[ĥȟʰḣḥḧḩḫẖℎⓗh]/gi,
3da9aeb80704bdd45aaf5971d1a06cbd13580ca9Tatuya JINMEI 神明達哉 i: /[ì-ïĩīĭįijǐȉȋᵢḭḯỉịⁱℹⅰⓘi]/gi,
3da9aeb80704bdd45aaf5971d1a06cbd13580ca9Tatuya JINMEI 神明達哉 j: /[ĵǰʲⓙⱼj]/gi,
3da9aeb80704bdd45aaf5971d1a06cbd13580ca9Tatuya JINMEI 神明達哉 k: /[ķǩᵏḱḳḵⓚk]/gi,
3da9aeb80704bdd45aaf5971d1a06cbd13580ca9Tatuya JINMEI 神明達哉 l: /[ĺļľŀljˡḷḹḻḽℓⅼⓛl]/gi,
3da9aeb80704bdd45aaf5971d1a06cbd13580ca9Tatuya JINMEI 神明達哉 m: /[ᵐḿṁṃⅿⓜm]/gi,
3da9aeb80704bdd45aaf5971d1a06cbd13580ca9Tatuya JINMEI 神明達哉 n: /[ñńņňǹṅṇṉṋⁿⓝn]/gi,
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff o: /[ºò-öōŏőơǒǫǭȍȏȫȭȯȱᵒṍṏṑṓọỏốồổỗộớờởỡợₒℴⓞo]/gi,
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff p: /[ᵖṕṗⓟp]/gi,
9023c42352944fd58ae14d961b60c46cd246ed25Andreas Gustafsson q: /[ʠⓠq]/gi,
9023c42352944fd58ae14d961b60c46cd246ed25Andreas Gustafsson r: /[ŕŗřȑȓʳᵣṙṛṝṟⓡr]/gi,
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff s: /[śŝşšſșˢṡṣṥṧṩẛⓢs]/gi,
3da9aeb80704bdd45aaf5971d1a06cbd13580ca9Tatuya JINMEI 神明達哉 t: /[ţťțᵗṫṭṯṱẗⓣt]/gi,
3da9aeb80704bdd45aaf5971d1a06cbd13580ca9Tatuya JINMEI 神明達哉 u: /[ù-üũūŭůűųưǔǖǘǚǜȕȗᵘᵤṳṵṷṹṻụủứừửữựⓤu]/gi,
3da9aeb80704bdd45aaf5971d1a06cbd13580ca9Tatuya JINMEI 神明達哉 v: /[ᵛᵥṽṿⅴⓥv]/gi,
3da9aeb80704bdd45aaf5971d1a06cbd13580ca9Tatuya JINMEI 神明達哉 w: /[ŵʷẁẃẅẇẉẘⓦw]/gi,
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff x: /[ˣẋẍₓⅹⓧx]/gi,
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff y: /[ýÿŷȳʸẏẙỳỵỷỹⓨy]/gi,
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff z: /[źżžᶻẑẓẕⓩz]/gi
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff};
26a455b8206621c3e470dbea1f172d78f5a0e56bMichael Graff