| local filename_chars = | |
| { | |
| ['"'] = "'", | |
| ["\\"] = "_", | |
| ["/"] = "_", | |
| [":"] = "-", | |
| ["*"] = "+", | |
| ["?"] = "_", | |
| ["<"] = "(", | |
| [">"] = ")", | |
| ["|"] = "-", | |
| } | |
| local escape_symbols = | |
| { | |
| ["%%"] = "%%%%", | |
| ["%("] = "%%(", | |
| ["%)"] = "%%)", | |
| ["%]"] = "%%]", | |
| ["%["] = "%%[", | |
| ["%-"] = "%%-", | |
| ["%+"] = "%%+", | |
| ["%*"] = "%%*", | |
| ["%?"] = "%%?", | |
| ["%$"] = "%%$", | |
| ["%."] = "%%.", | |
| ["%^"] = "%%^", | |
| } | |
| local filter = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ()_+-'" | |
| local filename_strings = | |
| { | |
| ["A"] = { "À", "Á", "Â", "Ã", "Ä", "Å", "Æ", "Ā", "Ă", "Ą", "Ǟ", "ǟ", "Ǡ", "ǡ", "Ǣ", "ǣ", "ǻ", "Ǽ", "ǽ", "Ȁ", "ȁ", "Ȃ", "ȃ" }, | |
| ["a"] = { "à", "á", "â", "ã", "ä", "å", "æ", "ā", "ă", "ą", }, | |
| ["C"] = { "Ç" }, | |
| ["c"] = { "ç", }, | |
| ["D"] = { "Ď", "Đ", "Ð", }, | |
| ["d"] = { "ď", "đ", "ð" }, | |
| ["E"] = { "È", "É", "Ê", "Ë", "Ĕ", "Ė", "Ę", "Ě", }, | |
| ["e"] = { "ė", "ę", "ĕ", "ě", "è", "é", "ê", "ë" }, | |
| ["G"] = { "Ĝ", "Ġ", "Ğ", "Ģ", }, | |
| ["g"] = { "ğ", "ĝ", "ġ", "ģ" }, | |
| ["H"] = { "Ĥ", "Ħ", }, | |
| ["h"] = { "ĥ", "ħ" }, | |
| ["I"] = { "Ì", "Í", "Î", "Ï", "Į", "Ĭ", "Ī", "Ĩ", "IJ", "İ", }, | |
| ["i"] = { "ı", "ij", "ĩ", "ī", "ĭ", "į", "ì", "í", "î", "ï", }, | |
| ["J"] = { "ĵ", "ĵ", "ĵ" }, | |
| ["K"] = { "Ķ", }, | |
| ["k"] = { "ķ", "ĸ" }, | |
| ["L"] = { "Ł", "Ŀ", "Ľ", "Ĺ", "Ļ", }, | |
| ["l"] = { "ļ", "ĺ", "ľ", "ŀ", "ł" }, | |
| ["N"] = { "Ņ", "Ń", "Ň", "Ŋ", "Ñ", }, | |
| ["n"] = { "ñ", "ŋ", "ň", "ń", "ņ", "ʼn", }, | |
| ["O"] = { "Ò", "Ó", "Ô", "Õ", "Õ", "Ö", "Ø", "Ō", "Ŏ", "Ŏ", "Ő", "Œ", }, | |
| ["o"] = { "ò", "ó", "ô", "õ", "ö", "ø", "ō", "ő", "œ" }, | |
| ["R"] = { "Ŕ", "Ŗ", "Ř", }, | |
| ["r"] = { "ř", "ŗ", "ŕ", }, | |
| ["S"] = { "Ś", "Ŝ", "Ş", "Š", }, | |
| ["s"] = { "ß", "ś", "ŝ", "ŝ", "ş", "š" }, | |
| ["T"] = { "Þ", "Ţ", "Ť", "Ŧ", }, | |
| ["t"] = { "þ", "ţ", "ť", "ŧ", }, | |
| ["U"] = { "Ũ", "Ū", "Ŭ", "Ů", "Ų", "Ű", "Ù", "Ú", "Û", "Ü", }, | |
| ["u"] = { "ù", "ú", "û", "ü", "ű", "ų", "ů", "ŭ", "ū", "ũ", }, | |
| ["W"] = { "Ŵ", }, | |
| ["w"] = { "ŵ" }, | |
| ["Y"] = { "Ý", "Ŷ", "Ÿ", }, | |
| ["y"] = { "ý", "ÿ", "ŷ" }, | |
| ["Z"] = { "Ź", "Ż", "Ž", }, | |
| ["z"] = { "ż", "ź", "ž" }, | |
| ["'"] = { "“", "”" }, | |
| } | |
| function CanonizeSaveGameName(name) | |
| if not name then return end | |
| name = name:gsub("(.)", filename_chars) | |
| for k,v in pairs(filename_strings) do | |
| if type(v) == "string" then | |
| name = name:gsub(v, k) | |
| elseif type(v) == "table" then | |
| for i=1,#v do | |
| name = name:gsub(v[i], k) | |
| end | |
| end | |
| end | |
| return name | |
| end | |
| function EscapePatternMatchingMagicSymbols(name) | |
| for k,v in sorted_pairs(escape_symbols) do | |
| name = name:gsub(k, v) | |
| end | |
| return name | |
| end | |