-- translitwdx.lua (cross-platform)
-- 2019.03.29
--
-- Сохранить в UTF-8 без BOM

local fields = {
 'Rus2Lat (ГОСТ 7_79-2000)',
 'Rus2Lat (Загранпаспорт РФ)',
 'Rus2Lat (MP3 Навигатор 2)',
 'Rus2Lat (Колхоз)',
 'Rus2Lat (calc.ru, без ЪЬ)',
 'Rus2Lat (SMS)',
 'Rus2Lat (РИНТ)',
 'Lat2Rus (ГОСТ 7_79-2000)',
 'Lat2Rus (Загранпаспорт РФ)',
 'Lat2Rus (MP3 Навигатор 2)',
 'Lat2Rus (Колхоз)',
 'Lat2Rus (calc.ru, без ЪЬ)',
 'Lat2Rus (SMS)',
 'Lat2Rus (РИНТ)',
 'Windows naming conventions',
 'Diacritic to ASCII',
 'URL to Text',
 'Win1251 to UTF-8',
 'UTF-8 to Win1251',
 'KOI8-R to Win1251',
 'OEM866 to Win1251'
}

function ContentGetSupportedField(FieldIndex)
  if fields[FieldIndex + 1] ~= nil then
    return fields[FieldIndex + 1], "", 8
  end
  return "", "", 0
end

function ContentGetDetectString()
  return 'EXT="*"'
end

function ContentGetValue(FileName, FieldIndex, UnitIndex, flags)
  -- Исключаем вывод для диалога свойств (CONTENT_DELAYIFSLOW)
  if flags == 1 then return nil end
  local pt
  if SysUtils.PathDelim == "/" then
    pt = "/.*/"; -- Linux
  else
    pt = ".*\\"; -- Win
  end
  local i, j = string.find(FileName, pt)
  if i == nil then return nil end
  local p = string.sub(FileName, i, j)
  local n = string.sub(FileName, string.len(p) + 1, -1)
  if (n == "..") or (n == ".") then return nil end
  -- Исключаются из обработки расширения файлов, т.е. всё после последней точки, (кроме "Windows naming conventions").
  local a = SysUtils.FileGetAttr(FileName)
  if a > 0 then
    if not (math.floor(a / 0x00000010) % 2 ~= 0) then
      local t = string.gsub(n, "%.[^%.]+$", "")
      if (string.len(t) > 0) and (FieldIndex ~= 14) then n = t end
    end
  end
  if FieldIndex == 0 then
    return rus_lat_gost2000(n)
  elseif FieldIndex == 1 then
    return rus_lat_zagranpasport(n)
  elseif FieldIndex == 2 then
    return rus_lat_mp3navig(n)
  elseif FieldIndex == 3 then
    return rus_lat_kolxo3(n)
  elseif FieldIndex == 4 then
    return rus_lat_calc_ru(n)
  elseif FieldIndex == 5 then
    return rus_lat_sms(n)
  elseif FieldIndex == 6 then
    return rus_lat_rint(n)
  elseif FieldIndex == 7 then
    return lat_rus_gost2000(n)
  elseif FieldIndex == 8 then
    return lat_rus_zagranpasport(n)
  elseif FieldIndex == 9 then
    return lat_rus_mp3navig(n)
  elseif FieldIndex == 10 then
    return lat_rus_kolxo3(n)
  elseif FieldIndex == 11 then
    return lat_rus_calc_ru(n)
  elseif FieldIndex == 12 then
    return lat_rus_sms(n)
  elseif FieldIndex == 13 then
    return lat_rus_rint(n)
  elseif FieldIndex == 14 then
    return win_name(n)
  elseif FieldIndex == 15 then
    return diacritic_ascii(n)
  elseif FieldIndex == 16 then
    -- http://lua-users.org/wiki/StringRecipes
    return string.gsub(n,  "%%(%x%x)",
              function(h) return string.char(tonumber(h,16)) end)
  elseif FieldIndex == 17 then
    return win1251_utf8(n)
  elseif FieldIndex == 18 then
    return utf8_win1251(n)
  elseif FieldIndex == 19 then
    return koi8r_win1251(n)
  elseif FieldIndex == 20 then
    return dos866_win1251(n)
  end
  return nil
end

function win_name(str)
  return string.gsub(str, '[<>:"|\\%?%*]', "_")
end

function diacritic_ascii(str)
  local t = {
["À"]="A", ["à"]="a", ["á"]="a", ["Á"]="A", ["Â"]="A", ["â"]="a", ["Ã"]="A", ["ã"]="a", ["ä"]="a", ["Ä"]="A", ["å"]="a", ["Å"]="A", ["Æ"]="AE", ["æ"]="ae", ["ç"]="c", ["Ç"]="C",
["È"]="E", ["è"]="e", ["É"]="E", ["é"]="e", ["Ê"]="E", ["ê"]="e", ["ë"]="e", ["Ë"]="E", ["ì"]="i", ["Ì"]="I", ["Í"]="I", ["í"]="i", ["î"]="i", ["Î"]="I", ["ï"]="i", ["Ï"]="I",
["ð"]="d", ["Ð"]="D", ["ñ"]="n", ["Ñ"]="N", ["Ò"]="O", ["ò"]="o", ["ó"]="o", ["ó"]="o", ["Ó"]="O", ["Ó"]="O", ["ô"]="o", ["Ô"]="O", ["õ"]="o", ["Õ"]="O", ["ö"]="o", ["Ö"]="O",
["Ù"]="U", ["ù"]="u", ["ú"]="u", ["Ú"]="U", ["û"]="u", ["Û"]="U", ["ü"]="u", ["Ü"]="U", ["Ý"]="Y", ["ý"]="y", ["ÿ"]="y", ["Ÿ"]="Y", ["ā"]="a", ["Ā"]="A", ["Ă"]="A", ["ă"]="a",
["ą"]="a", ["Ą"]="A", ["ą"]="a", ["Ą"]="A", ["ć"]="c", ["Ć"]="C", ["Ć"]="C", ["ć"]="c", ["ĉ"]="c", ["Ĉ"]="C", ["ċ"]="c", ["Ċ"]="C", ["č"]="c", ["Č"]="C", ["Ď"]="D", ["ď"]="d",
["đ"]="d", ["Đ"]="D", ["Ē"]="E", ["ē"]="e", ["ĕ"]="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", ["ı"]="i", ["Ĳ"]="IJ", ["ĳ"]="ij", ["Ĵ"]="J", ["ĵ"]="j", ["ķ"]="k", ["Ķ"]="K", ["ĸ"]="k", ["Ĺ"]="L", ["ĺ"]="l", ["Ļ"]="L", ["ļ"]="l", ["Ľ"]="L",
["ľ"]="l", ["Ŀ"]="L", ["ŀ"]="l", ["ł"]="l", ["ł"]="l", ["Ł"]="L", ["Ł"]="L", ["ń"]="n", ["Ń"]="N", ["ń"]="n", ["Ń"]="N", ["ņ"]="n", ["Ņ"]="N", ["Ň"]="N", ["ň"]="n", ["ŉ"]="n",
["ō"]="o", ["Ō"]="O", ["Ŏ"]="O", ["ŏ"]="o", ["ő"]="o", ["Ő"]="O", ["Œ"]="OE", ["œ"]="oe", ["Ŕ"]="R", ["ŕ"]="r", ["ŗ"]="r", ["Ŗ"]="R", ["Ř"]="R", ["ř"]="r", ["Ś"]="S", ["ś"]="s",
["ś"]="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", ["ź"]="z", ["Ź"]="Z",
["ź"]="z", ["Ź"]="Z", ["ż"]="z", ["Ż"]="Z", ["Ż"]="Z", ["ż"]="z", ["ž"]="z", ["Ž"]="Z", ["ƀ"]="b", ["ƈ"]="c", ["Ƈ"]="C", ["ƒ"]="f", ["Ƒ"]="F", ["ƙ"]="k", ["Ƙ"]="K", ["ơ"]="o",
["Ơ"]="O", ["ƥ"]="p", ["Ƥ"]="P", ["Ʀ"]="R", ["ƫ"]="t", ["ƭ"]="t", ["Ƭ"]="T", ["ư"]="u", ["Ư"]="U", ["Ƶ"]="Z", ["ƶ"]="z", ["ǅ"]="Dz", ["Ǆ"]="DZ", ["ǆ"]="dz", ["ǈ"]="Lj", ["Ǉ"]="LJ",
["ǉ"]="lj", ["ǋ"]="Nj", ["ǌ"]="nj", ["Ǌ"]="NJ", ["Ǎ"]="A", ["ǎ"]="a", ["Ǐ"]="I", ["ǐ"]="i", ["ǒ"]="o", ["Ǒ"]="O", ["ǔ"]="u", ["Ǔ"]="U", ["Ǖ"]="U", ["ǖ"]="u", ["ǘ"]="u", ["Ǘ"]="U",
["ǚ"]="u", ["Ǚ"]="U", ["ǜ"]="u", ["Ǜ"]="U", ["ǝ"]="e", ["Ǟ"]="A", ["ǟ"]="a", ["Ǡ"]="A", ["ǡ"]="a", ["ǣ"]="ae", ["Ǣ"]="AE", ["ǥ"]="g", ["Ǥ"]="G", ["Ǧ"]="G", ["ǧ"]="g", ["ǩ"]="k",
["Ǩ"]="K", ["Ǫ"]="O", ["ǫ"]="o", ["Ǭ"]="O", ["ǭ"]="o", ["ǯ"]="z", ["Ǯ"]="Z", ["ǰ"]="J", ["ǲ"]="Dz", ["ǳ"]="dz", ["Ǳ"]="DZ", ["Ǵ"]="G", ["ǵ"]="g", ["ǻ"]="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", ["ɐ"]="a", ["ɑ"]="a", ["ɒ"]="a", ["Ɓ"]="B", ["Ɖ"]="D",
["ɖ"]="d", ["Ɗ"]="D", ["ɗ"]="d", ["ɛ"]="e", ["Ɠ"]="G", ["Ʈ"]="T", ["ʣ"]="dz", ["ʤ"]="dz", ["ʥ"]="dz", ["ʦ"]="ts", ["ʧ"]="tf", ["ΐ"]="i", ["Ά"]="A", ["Έ"]="E", ["Ή"]="H", ["Ί"]="I",
["ϊ"]="i", ["ϋ"]="u", ["ό"]="o", ["Ό"]="O", ["ύ"]="u", ["Ύ"]="Y", ["і"]="i", ["ї"]="i", ["ј"]="j", ["ќ"]="k", ["ў"]="y", ["ӑ"]="a", ["Ӑ"]="A", ["ӓ"]="a", ["Ӓ"]="A", ["Ӕ"]="AE",
["ӕ"]="ae", ["ӗ"]="e", ["Ӗ"]="E"
}
  for key, val in pairs(t) do
    str = string.gsub(str, key, val)
  end
  return str
end

function rus_lat_gost2000(str)
  local t = {
["А"]="A", ["Б"]="B", ["В"]="V", ["Г"]="G", ["Д"]="D", ["Е"]="E", ["Ё"]="YO", ["Ж"]="ZH", ["З"]="Z", ["И"]="I", ["Й"]="J", ["К"]="K", ["Л"]="L", ["М"]="M", ["Н"]="N", ["О"]="O",
["П"]="P", ["Р"]="R", ["С"]="S", ["Т"]="T", ["У"]="U", ["Ф"]="F", ["Х"]="X", ["Ц"]="C", ["Ч"]="CH", ["Ш"]="SH", ["Щ"]="SHH", ["Ъ"]="''", ["Ы"]="Y", ["Ь"]="'", ["Э"]="E", ["Ю"]="YU",
["Я"]="YA", ["а"]="a", ["б"]="b", ["в"]="v", ["г"]="g", ["д"]="d", ["е"]="e", ["ё"]="yo", ["ж"]="zh", ["з"]="z", ["и"]="i", ["й"]="j", ["к"]="k", ["л"]="l", ["м"]="m", ["н"]="n",
["о"]="o", ["п"]="p", ["р"]="r", ["с"]="s", ["т"]="t", ["у"]="u", ["ф"]="f", ["х"]="x", ["ц"]="c", ["ч"]="ch", ["ш"]="sh", ["щ"]="shh", ["ъ"]="''", ["ы"]="y", ["ь"]="'", ["э"]="e",
["ю"]="yu", ["я"]="ya"
}
  for key, val in pairs(t) do
    str = string.gsub(str, key, val)
  end
  return str
end

function lat_rus_gost2000(str)
  local t = {
["SHH"]="Щ", ["shh"]="щ", ["CH"]="Ч", ["ch"]="ч", ["SH"]="Ш", ["sh"]="ш", ["YO"]="Ё", ["yo"]="ё", ["YU"]="Ю", ["yu"]="ю", ["YA"]="Я", ["ya"]="я", ["ZH"]="Ж", ["zh"]="ж", ["A"]="А", ["B"]="Б",
["V"]="В", ["G"]="Г", ["D"]="Д", ["E"]="Е", ["Z"]="З", ["I"]="И", ["J"]="Й", ["K"]="К", ["L"]="Л", ["M"]="М", ["N"]="Н", ["O"]="О", ["P"]="П", ["R"]="Р", ["S"]="С", ["T"]="Т",
["U"]="У", ["F"]="Ф", ["X"]="Х", ["C"]="Ц", ["''"]="Ъ", ["Y"]="Ы", ["'"]="Ь", ["E"]="Э", ["a"]="а", ["b"]="б", ["v"]="в", ["g"]="г", ["d"]="д", ["e"]="е", ["z"]="з", ["i"]="и",
["j"]="й", ["k"]="к", ["l"]="л", ["m"]="м", ["n"]="н", ["o"]="о", ["p"]="п", ["r"]="р", ["s"]="с", ["t"]="т", ["u"]="у", ["f"]="ф", ["x"]="х", ["c"]="ц", ["''"]="ъ", ["y"]="ы",
["'"]="ь", ["e"]="э"
}
  for key, val in pairs(t) do
    str = string.gsub(str, key, val)
  end
  return str
end

function rus_lat_zagranpasport(str)
  local t = {
["ай"]="ay", ["ей"]="ey", ["ий"]="iy", ["ой"]="oy", ["уй"]="uy", ["ый"]="yy", ["эй"]="ey", ["юй"]="yuy", ["ей"]="yay", ["А"]="A", ["Б"]="B", ["В"]="V", ["Г"]="G", ["Д"]="D", ["Е"]="E", ["Ё"]="YE",
["Ж"]="ZH", ["З"]="Z", ["И"]="I", ["Й"]="Y", ["К"]="K", ["Л"]="L", ["М"]="M", ["Н"]="N", ["О"]="O", ["П"]="P", ["Р"]="R", ["С"]="S", ["Т"]="T", ["У"]="U", ["Ф"]="F", ["Х"]="KH",
["Ц"]="TS", ["Ч"]="CH", ["Ш"]="SH", ["Щ"]="SHCH", ["Ъ"]="''", ["Ы"]="Y", ["Ь"]="'", ["Э"]="E", ["Ю"]="YU", ["Я"]="YA", ["а"]="a", ["б"]="b", ["в"]="v", ["г"]="g", ["д"]="d", ["е"]="e",
["ё"]="ye", ["ж"]="zh", ["з"]="z", ["и"]="i", ["й"]="y", ["к"]="k", ["л"]="l", ["м"]="m", ["н"]="n", ["о"]="o", ["п"]="p", ["р"]="r", ["с"]="s", ["т"]="t", ["у"]="u", ["ф"]="f",
["х"]="kh", ["ц"]="ts", ["ч"]="ch", ["ш"]="sh", ["щ"]="shch", ["ъ"]="''", ["ы"]="y", ["ь"]="'", ["э"]="e", ["ю"]="yu", ["я"]="ya"
}
  for key, val in pairs(t) do
    str = string.gsub(str, key, val)
  end
  return str
end

function lat_rus_zagranpasport(str)
  local t = {
["yuy"]="юй", ["yay"]="ей", ["ay"]="ай", ["ey"]="ей", ["iy"]="ий", ["oy"]="ой", ["uy"]="уй", ["yy"]="ый", ["ey"]="эй", ["SHCH"]="Щ", ["shch"]="щ", ["CH"]="Ч", ["ch"]="ч", ["SH"]="Ш", ["sh"]="ш", ["KH"]="Х",
["kh"]="х", ["TS"]="Ц", ["ts"]="ц", ["YA"]="Я", ["ya"]="я", ["YE"]="Ё", ["ye"]="ё", ["YU"]="Ю", ["yu"]="ю", ["ZH"]="Ж", ["zh"]="ж", ["A"]="А", ["B"]="Б", ["V"]="В", ["G"]="Г", ["D"]="Д",
["E"]="Е", ["Z"]="З", ["I"]="И", ["Y"]="Й", ["K"]="К", ["L"]="Л", ["M"]="М", ["N"]="Н", ["O"]="О", ["P"]="П", ["R"]="Р", ["S"]="С", ["T"]="Т", ["U"]="У", ["F"]="Ф", ["''"]="Ъ",
["Y"]="Ы", ["'"]="Ь", ["E"]="Э", ["a"]="а", ["b"]="б", ["v"]="в", ["g"]="г", ["d"]="д", ["e"]="е", ["z"]="з", ["i"]="и", ["y"]="й", ["k"]="к", ["l"]="л", ["m"]="м", ["n"]="н",
["o"]="о", ["p"]="п", ["r"]="р", ["s"]="с", ["t"]="т", ["u"]="у", ["f"]="ф", ["''"]="ъ", ["y"]="ы", ["'"]="ь", ["e"]="э"
}
  for key, val in pairs(t) do
    str = string.gsub(str, key, val)
  end
  return str
end

function rus_lat_mp3navig(str)
  local t = {
["А"]="A", ["Б"]="B", ["В"]="V", ["Г"]="G", ["Д"]="D", ["Е"]="E", ["Ё"]="Е", ["Ж"]="ZH", ["З"]="Z", ["И"]="I", ["Й"]="J", ["К"]="K", ["Л"]="L", ["М"]="M", ["Н"]="N", ["О"]="O",
["П"]="P", ["Р"]="R", ["С"]="S", ["Т"]="T", ["У"]="U", ["Ф"]="F", ["Х"]="H", ["Ц"]="C", ["Ч"]="CH", ["Ш"]="SH", ["Щ"]="SHCH", ["Ъ"]="''", ["Ы"]="Y", ["Ь"]="'", ["Э"]="E", ["Ю"]="IU",
["Я"]="IA", ["а"]="a", ["б"]="b", ["в"]="v", ["г"]="g", ["д"]="d", ["е"]="e", ["ё"]="e", ["ж"]="zh", ["з"]="z", ["и"]="i", ["й"]="j", ["к"]="k", ["л"]="l", ["м"]="m", ["н"]="n",
["о"]="o", ["п"]="p", ["р"]="r", ["с"]="s", ["т"]="t", ["у"]="u", ["ф"]="f", ["х"]="h", ["ц"]="c", ["ч"]="ch", ["ш"]="sh", ["щ"]="shch", ["ъ"]="''", ["ы"]="y", ["ь"]="'", ["э"]="e",
["ю"]="iu", ["я"]="ia"
}
  for key, val in pairs(t) do
    str = string.gsub(str, key, val)
  end
  return str
end

function lat_rus_mp3navig(str)
  local t = {
["SHCH"]="Щ", ["shch"]="щ", ["CH"]="Ч", ["ch"]="ч", ["SH"]="Ш", ["sh"]="ш", ["IA"]="Я", ["ia"]="я", ["IU"]="Ю", ["iu"]="ю", ["ZH"]="Ж", ["zh"]="ж", ["A"]="А", ["B"]="Б", ["V"]="В", ["G"]="Г",
["D"]="Д", ["E"]="Е", ["Z"]="З", ["I"]="И", ["J"]="Й", ["K"]="К", ["L"]="Л", ["M"]="М", ["N"]="Н", ["O"]="О", ["P"]="П", ["R"]="Р", ["S"]="С", ["T"]="Т", ["U"]="У", ["F"]="Ф",
["H"]="Х", ["C"]="Ц", ["''"]="Ъ", ["Y"]="Ы", ["'"]="Ь", ["E"]="Э", ["a"]="а", ["b"]="б", ["v"]="в", ["g"]="г", ["d"]="д", ["e"]="е", ["e"]="ё", ["z"]="з", ["i"]="и", ["j"]="й",
["k"]="к", ["l"]="л", ["m"]="м", ["n"]="н", ["o"]="о", ["p"]="п", ["r"]="р", ["s"]="с", ["t"]="т", ["u"]="у", ["f"]="ф", ["h"]="х", ["c"]="ц", ["''"]="ъ", ["y"]="ы", ["'"]="ь",
["e"]="э"
}
  for key, val in pairs(t) do
    str = string.gsub(str, key, val)
  end
  return str
end

function lat_rus_kolxo3(str)
  local t = {
["ShCh"]="Щ", ["Shch"]="Щ", ["SHCH"]="Щ", ["shch"]="щ", ["Ch"]="Ч", ["CH"]="Ч", ["ch"]="ч", ["Sh"]="Ш", ["SH"]="Ш", ["sh"]="ш", ["JA"]="Я", ["Ja"]="Я", ["ja"]="я", ["jo"]="ё", ["JO"]="Ё", ["Jo"]="Ё",
["Ju"]="Ю", ["JU"]="Ю", ["ju"]="ю", ["Ya"]="Я", ["YA"]="Я", ["ya"]="я", ["Yo"]="Ё", ["YO"]="Ё", ["yo"]="ё", ["YU"]="Ю", ["Yu"]="Ю", ["yu"]="ю", ["Zh"]="Ж", ["ZH"]="Ж", ["zh"]="ж", ["E'"]="Э",
["e'"]="э", ["%.%."]=":", ["A"]="А", ["B"]="Б", ["V"]="В", ["G"]="Г", ["D"]="Д", ["E"]="Е", ["Z"]="З", ["I"]="И", ["J"]="Й", ["K"]="К", ["L"]="Л", ["M"]="М", ["N"]="Н", ["O"]="О",
["P"]="П", ["R"]="Р", ["S"]="С", ["T"]="Т", ["U"]="У", ["F"]="Ф", ["X"]="Х", ["H"]="Х", ["C"]="Ц", ["~"]="Ъ", ["Y"]="Ы", ["a"]="а", ["b"]="б", ["v"]="в", ["g"]="г", ["d"]="д",
["e"]="е", ["z"]="з", ["i"]="и", ["j"]="й", ["k"]="к", ["l"]="л", ["m"]="м", ["n"]="н", ["o"]="о", ["p"]="п", ["r"]="р", ["s"]="с", ["t"]="т", ["u"]="у", ["f"]="ф", ["x"]="х",
["h"]="х", ["c"]="ц", ["~"]="ъ", ["y"]="ы", ["'"]="ь", ["#"]="ь", ["'"]="Ь", ["#"]="Ь"
}
  for key, val in pairs(t) do
    str = string.gsub(str, key, val)
  end
  return str
end

function rus_lat_kolxo3(str)
  local t = {
["А"]="A", ["Б"]="B", ["В"]="V", ["Г"]="G", ["Д"]="D", ["Е"]="E", ["Ё"]="YO", ["Ж"]="ZH", ["З"]="Z", ["И"]="I", ["Й"]="J", ["К"]="K", ["Л"]="L", ["М"]="M", ["Н"]="N", ["О"]="O",
["П"]="P", ["Р"]="R", ["С"]="S", ["Т"]="T", ["У"]="U", ["Ф"]="F", ["Х"]="H", ["Ц"]="C",["Ч"]="CH", ["Ш"]="SH", ["Щ"]="SHCH", ["Ъ"]="~", ["Ы"]="Y", ["Ь"]="'", ["Э"]="E'", ["Ю"]="YU",
["Я"]="YA", ["а"]="a", ["б"]="b", ["в"]="v", ["г"]="g", ["д"]="d", ["е"]="e", ["ё"]="yo", ["ж"]="zh", ["з"]="z", ["и"]="i", ["й"]="j", ["к"]="k", ["л"]="l", ["м"]="m", ["н"]="n",
["о"]="o", ["п"]="p", ["р"]="r", ["с"]="s", ["т"]="t", ["у"]="u", ["ф"]="f", ["х"]="h", ["ц"]="c", ["ч"]="ch", ["ш"]="sh", ["щ"]="shch", ["ъ"]="~", ["ы"]="y", ["ь"]="'", ["э"]="e'",
["ю"]="yu", ["я"]="ya"
}
  for key, val in pairs(t) do
    str = string.gsub(str, key, val)
  end
  return str
end

function rus_lat_calc_ru(str)
  local t = {
["А"]="A", ["Б"]="B", ["В"]="V", ["Г"]="G", ["Д"]="D", ["Е"]="E", ["Ё"]="E", ["Ж"]="Zh", ["З"]="Z", ["И"]="I", ["Й"]="Y", ["К"]="K", ["Л"]="L", ["М"]="M", ["Н"]="N", ["О"]="O",
["П"]="P", ["Р"]="R", ["С"]="S", ["Т"]="T", ["У"]="U", ["Ф"]="F", ["Х"]="Kh", ["Ц"]="Ts", ["Ч"]="Ch", ["Ш"]="Sh", ["Щ"]="Shch", ["Ъ"]="_", ["Ы"]="Y", ["Ь"]="_", ["Э"]="E", ["Ю"]="Yu",
["Я"]="Ya", ["а"]="a", ["б"]="b", ["в"]="v", ["г"]="g", ["д"]="d", ["е"]="e", ["ё"]="e", ["ж"]="zh", ["з"]="z", ["и"]="i", ["й"]="y", ["к"]="k", ["л"]="l", ["м"]="m", ["н"]="n",
["о"]="o", ["п"]="p", ["р"]="r", ["с"]="s", ["т"]="t", ["у"]="u", ["ф"]="f", ["х"]="kh", ["ц"]="ts", ["ч"]="ch", ["ш"]="sh", ["щ"]="shch", ["ъ"]="_", ["ы"]="y", ["ь"]="_", ["э"]="e",
["ю"]="yu", ["я"]="ya"
}
  for key, val in pairs(t) do
    str = string.gsub(str, key, val)
  end
  return str
end

function lat_rus_calc_ru(str)
  local t = {
["Shch"]="Щ", ["shch"]="щ", ["Ch"]="Ч", ["ch"]="ч", ["Kh"]="Х", ["kh"]="х", ["Sh"]="Ш", ["sh"]="ш", ["Ts"]="Ц", ["ts"]="ц", ["Ya"]="Я", ["ya"]="я", ["Yu"]="Ю", ["yu"]="ю", ["Zh"]="Ж", ["zh"]="ж",
["A"]="А", ["B"]="Б", ["V"]="В", ["G"]="Г", ["D"]="Д", ["E"]="Е", ["E"]="Ё", ["Z"]="З", ["I"]="И", ["Y"]="Й", ["K"]="К", ["L"]="Л", ["M"]="М", ["N"]="Н", ["O"]="О", ["P"]="П",
["R"]="Р", ["S"]="С", ["T"]="Т", ["U"]="У", ["F"]="Ф", ["Y"]="Ы", ["E"]="Э", ["a"]="а", ["b"]="б", ["v"]="в", ["g"]="г", ["d"]="д", ["e"]="е", ["e"]="ё", ["z"]="з", ["i"]="и",
["y"]="й", ["k"]="к", ["l"]="л", ["m"]="м", ["n"]="н", ["o"]="о", ["p"]="п", ["r"]="р", ["s"]="с", ["t"]="т", ["u"]="у", ["f"]="ф", ["y"]="ы", ["e"]="э"
}
  for key, val in pairs(t) do
    str = string.gsub(str, key, val)
  end
  return str
end

function rus_lat_sms(str)
  local t = {
["А"]="A", ["Б"]="B", ["В"]="V", ["Г"]="G", ["Д"]="D", ["Е"]="E", ["Ё"]="E", ["Ж"]="ZH", ["З"]="Z", ["И"]="I", ["Й"]="J", ["К"]="K", ["Л"]="L", ["М"]="M", ["Н"]="N", ["О"]="O",
["П"]="P", ["Р"]="R", ["С"]="S", ["Т"]="T", ["У"]="U", ["Ф"]="F", ["Х"]="H", ["Ц"]="TS", ["Ч"]="CH", ["Ш"]="SH", ["Щ"]="SCH", ["Ъ"]="''", ["Ы"]="YI", ["Ь"]="'", ["Э"]="YE", ["Ю"]="YU",
["Я"]="YA", ["а"]="a", ["б"]="b", ["в"]="v", ["г"]="g", ["д"]="d", ["е"]="e", ["ё"]="e", ["ж"]="zh", ["з"]="z", ["и"]="i", ["й"]="j", ["к"]="k", ["л"]="l", ["м"]="m", ["н"]="n",
["о"]="o", ["п"]="p", ["р"]="r", ["с"]="s", ["т"]="t", ["у"]="u", ["ф"]="f", ["х"]="h", ["ц"]="ts", ["ч"]="ch", ["ш"]="sh", ["щ"]="sch", ["ъ"]="''", ["ы"]="yi", ["ь"]="'", ["э"]="ye",
["ю"]="yu", ["я"]="ya"
}
  for key, val in pairs(t) do
    str = string.gsub(str, key, val)
  end
  return str
end

function lat_rus_sms(str)
  local t = {
["SCH"]="Щ", ["sch"]="щ", ["CH"]="Ч", ["ch"]="ч", ["SH"]="Ш", ["sh"]="ш", ["TS"]="Ц", ["ts"]="ц", ["YA"]="Я", ["ya"]="я", ["YE"]="Э", ["ye"]="э", ["YI"]="Ы", ["yi"]="ы", ["YU"]="Ю", ["yu"]="ю",
["ZH"]="Ж", ["zh"]="ж", ["A"]="А", ["B"]="Б", ["V"]="В", ["G"]="Г", ["D"]="Д", ["E"]="Е", ["Z"]="З", ["I"]="И", ["J"]="Й", ["K"]="К", ["L"]="Л", ["M"]="М", ["N"]="Н", ["O"]="О",
["P"]="П", ["R"]="Р", ["S"]="С", ["T"]="Т", ["U"]="У", ["F"]="Ф", ["H"]="Х", ["''"]="Ъ", ["'"]="Ь", ["a"]="а", ["b"]="б", ["v"]="в", ["g"]="г", ["d"]="д", ["e"]="е", ["e"]="ё",
["z"]="з", ["i"]="и", ["j"]="й", ["k"]="к", ["l"]="л", ["m"]="м", ["n"]="н", ["o"]="о", ["p"]="п", ["r"]="р", ["s"]="с", ["t"]="т", ["u"]="у", ["f"]="ф", ["h"]="х", ["''"]="ъ",
["'"]="ь"
}
  for key, val in pairs(t) do
    str = string.gsub(str, key, val)
  end
  return str
end

function rus_lat_rint(str)
  local t = {
["Аё"]="A'yo", ["аё"]="a'yo", ["Юё"]="Yuyo", ["юё"]="yuyo", ["Яё"]="Yayo", ["яё"]="yayo", ["Юя"]="Yuya", ["юя"]="yuya", ["Яя"]="Yaya", ["яя"]="yaya", ["Щя"]="Xq'a", ["щя"]="xq'a", ["Ея"]="Yeya", ["ея"]="yeya", ["Ёя"]="Yoya", ["ёя"]="yoya",
["Юю"]="Yuyu", ["юю"]="yuyu", ["Яю"]="Yayu", ["яю"]="yayu", ["Ёе"]="Yoye", ["ёе"]="yoye", ["Юе"]="Yuye", ["юе"]="Yuye", ["Яе"]="Yaye", ["яе"]="yaye", ["Её"]="Yeyo", ["её"]="yeyo", ["Ёё"]="Yoyo", ["ёё"]="yoyo", ["Щё"]="Xq’o", ["щё"]="xq’o",
["Ею"]="Yeyu", ["Ёю"]="Yoyu", ["ёю"]="yoyu", ["Щю"]="Xq'u", ["щю"]="xq'u", ["Ае"]="Aye", ["ае"]="aye", ["Ее"]="Eye", ["ее"]="eye", ["Ие"]="Iye", ["ие"]="iye", ["Ое"]="Oye", ["ое"]="oye", ["Уе"]="Uye", ["уе"]="uye", ["Ще"]="Xqe",
["ще"]="xqe", ["ье"]="'ye", ["Бё"]="B’o", ["бё"]="b’o", ["Вё"]="V’o", ["вё"]="v’o", ["Гё"]="G’o", ["гё"]="g’o", ["Дё"]="D’o", ["дё"]="d’o", ["Иё"]="Iyo", ["иё"]="iyo", ["Йё"]="Yyo", ["йё"]="yyo", ["Кё"]="K’o", ["кё"]="k’o",
["Лё"]="L’o", ["лё"]="l’o", ["Мё"]="M’o", ["мё"]="m’o", ["Нё"]="N’o", ["нё"]="n’o", ["Оё"]="Oyo", ["оё"]="oyo", ["Пё"]="P’o", ["пё"]="p’o", ["Рё"]="R’o", ["рё"]="r’o", ["Сё"]="S’o", ["сё"]="c’o", ["Тё"]="T’o", ["тё"]="t’o",
["Уё"]="Uyo", ["уё"]="uyo", ["Фё"]="F’o", ["фё"]="f’o", ["Хё"]="H’o", ["хё"]="h’o", ["Цё"]="C’o", ["цё"]="c’o", ["Чё"]="Q’o", ["чё"]="q’o", ["Шё"]="X’o", ["шё"]="x’o", ["Ыю"]="Wyu", ["ыю"]="wyu", ["ью"]="'yu", ["Эю"]="Eyu",
["эю"]="eyu", ["Ая"]="Aya", ["ая"]="aya", ["Бя"]="B'a", ["бя"]="b'a", ["Вя"]="V'a", ["вя"]="v'a", ["Гя"]="G'a", ["гя"]="g'a", ["Дя"]="D'a", ["дя"]="d'a", ["Ия"]="Iya", ["ия"]="iya", ["Йя"]="Yya", ["йя"]="yya", ["Кя"]="K'a",
["кя"]="k'a", ["Ля"]="L'a", ["ля"]="l'a", ["Мя"]="M'a", ["мя"]="m'a", ["Ня"]="N'a", ["ня"]="n'a", ["Оя"]="Oya", ["оя"]="oya", ["Пя"]="P'a", ["пя"]="p'a", ["Ря"]="R'a", ["ря"]="r'a", ["Ся"]="S'a", ["ся"]="s'a", ["Тя"]="T'a",
["тя"]="t'a", ["Уя"]="Uya", ["уя"]="uya", ["Фя"]="F'a", ["фя"]="f'a", ["Хя"]="H'a", ["хя"]="h'a", ["Ця"]="C'a", ["ця"]="c'a", ["Чя"]="Q'a", ["чя"]="q'a", ["Шя"]="X'a", ["шя"]="x'a", ["Ыя"]="Wya", ["ыя"]="wya", ["ья"]="'ya",
["Эя"]="Eya", ["эя"]="eya", ["ьи"]="'yi", ["ьо"]="'yo", ["Ыё"]="Wyo", ["ыё"]="wyo", ["ьё"]="'yo", ["Эё"]="Eyo", ["эё"]="eyo", ["Аю"]="Ayu", ["аю"]="ayu", ["Бю"]="B'u", ["бю"]="b'u", ["Вю"]="V'u", ["вю"]="v'u", ["Гю"]="G'u",
["гю"]="g'u", ["Дю"]="D'u", ["дю"]="d'u", ["ею"]="eyu", ["Ию"]="Iyu", ["ию"]="iyu", ["Йю"]="Yyu", ["йю"]="yyu", ["Кю"]="K'u", ["кю"]="k'u", ["Лю"]="L'u", ["лю"]="l'u", ["Мю"]="M'u", ["мю"]="m'u", ["Ню"]="N'u", ["ню"]="n'u",
["Ою"]="Oyu", ["ою"]="oyu", ["Пю"]="P'u", ["пю"]="p'u", ["Рю"]="R'u", ["рю"]="r'u", ["Сю"]="S'u", ["сю"]="s'u", ["Тю"]="T'u", ["тю"]="t'u", ["Ую"]="Uyu", ["ую"]="uyu", ["Фю"]="F'u", ["фю"]="f'u", ["Хю"]="H'u", ["хю"]="h'u",
["Цю"]="C'u", ["цю"]="c'u", ["Чю"]="Q'u", ["чю"]="Q'u", ["Шю"]="X'u", ["шю"]="x'u", ["Бе"]="Be", ["бе"]="be", ["Ве"]="Ve", ["ве"]="ve", ["Ге"]="Ge", ["ге"]="ge", ["Де"]="De", ["де"]="de", ["Йе"]="Ye", ["йе"]="ye",
["Ке"]="Ke", ["ке"]="ke", ["Ле"]="Le", ["ле"]="le", ["Ме"]="Me", ["ме"]="me", ["Не"]="Ne", ["не"]="ne", ["Пе"]="Pe", ["пе"]="pe", ["Ре"]="Re", ["ре"]="re", ["Се"]="Se", ["се"]="se", ["Те"]="Te", ["те"]="te",
["Фе"]="Fe", ["фе"]="fe", ["Хе"]="He", ["хе"]="he", ["Це"]="Ce", ["це"]="ce", ["Че"]="Qe", ["че"]="qe", ["Ше"]="Xe", ["ше"]="xe", ["ъе"]="ye", ["Ые"]="We", ["ые"]="we", ["Эе"]="Ee", ["эе"]="ee", ["ъё"]="yo",
["ъю"]="yu", ["ъя"]="ya", ["Щ"]="Xq", ["щ"]="xq", ["Ю"]="Yu", ["ю"]="yu", ["Я"]="Ya", ["я"]="ya", ["Е"]="Ye", ["е"]="ye", ["Ё"]="Yo", ["ё"]="yo", ["А"]="A", ["а"]="a", ["Б"]="B", ["б"]="b",
["В"]="V", ["в"]="v", ["Г"]="G", ["г"]="g", ["Д"]="D", ["д"]="d", ["Ж"]="J", ["ж"]="j", ["З"]="Z", ["з"]="z", ["И"]="I", ["и"]="i", ["Й"]="Y", ["й"]="y", ["К"]="K", ["к"]="k",
["Л"]="L", ["л"]="l", ["М"]="M", ["м"]="m", ["Н"]="N", ["н"]="n", ["О"]="O", ["о"]="o", ["П"]="P", ["п"]="p", ["Р"]="R", ["р"]="r", ["С"]="S", ["с"]="s", ["Т"]="T", ["т"]="t",
["У"]="U", ["у"]="u", ["Ф"]="F", ["ф"]="f", ["Х"]="H", ["х"]="h", ["Ц"]="C", ["ц"]="c", ["Ч"]="Q", ["ч"]="q", ["Ш"]="X", ["ш"]="x", ["Ы"]="W", ["ы"]="w", ["ь"]="'", ["Э"]="E",
["э"]="e", ["ъ"]=""
}
  for key, val in pairs(t) do
    str = string.gsub(str, key, val)
  end
  return str
end

function lat_rus_rint(str)
  local t = {
["A'yo"]="Аё", ["a'yo"]="аё", ["Yuyo"]="Юё", ["yuyo"]="юё", ["Yayo"]="Яё", ["yayo"]="яё", ["Yuya"]="Юя", ["yuya"]="юя", ["Yaya"]="Яя", ["yaya"]="яя", ["Xq'a"]="Щя", ["xq'a"]="щя", ["Yeya"]="Ея", ["yeya"]="ея", ["Yoya"]="Ёя", ["yoya"]="ёя",
["Yuyu"]="Юю", ["yuyu"]="юю", ["Yayu"]="Яю", ["yayu"]="яю", ["Yoye"]="Ёе", ["yoye"]="ёе", ["Yuye"]="Юе", ["Yuye"]="юе", ["Yaye"]="Яе", ["yaye"]="яе", ["Yeyo"]="Её", ["yeyo"]="её", ["Yoyo"]="Ёё", ["yoyo"]="ёё", ["Xq’o"]="Щё", ["xq’o"]="щё",
["Yeyu"]="Ею", ["Yoyu"]="Ёю", ["yoyu"]="ёю", ["Xq'u"]="Щю", ["xq'u"]="щю", ["Aye"]="Ае", ["aye"]="ае", ["Eye"]="Ее", ["eye"]="ее", ["Iye"]="Ие", ["iye"]="ие", ["Oye"]="Ое", ["oye"]="ое", ["Uye"]="Уе", ["uye"]="уе", ["Xqe"]="Ще",
["xqe"]="ще", ["'ye"]="ье", ["B’o"]="Бё", ["b’o"]="бё", ["V’o"]="Вё", ["v’o"]="вё", ["G’o"]="Гё", ["g’o"]="гё", ["D’o"]="Дё", ["d’o"]="дё", ["Iyo"]="Иё", ["iyo"]="иё", ["Yyo"]="Йё", ["yyo"]="йё", ["K’o"]="Кё", ["k’o"]="кё",
["L’o"]="Лё", ["l’o"]="лё", ["M’o"]="Мё", ["m’o"]="мё", ["N’o"]="Нё", ["n’o"]="нё", ["Oyo"]="Оё", ["oyo"]="оё", ["P’o"]="Пё", ["p’o"]="пё", ["R’o"]="Рё", ["r’o"]="рё", ["S’o"]="Сё", ["c’o"]="сё", ["T’o"]="Тё", ["t’o"]="тё",
["Uyo"]="Уё", ["uyo"]="уё", ["F’o"]="Фё", ["f’o"]="фё", ["H’o"]="Хё", ["h’o"]="хё", ["C’o"]="Цё", ["c’o"]="цё", ["Q’o"]="Чё", ["q’o"]="чё", ["X’o"]="Шё", ["x’o"]="шё", ["Wyu"]="Ыю", ["wyu"]="ыю", ["'yu"]="ью", ["Eyu"]="Эю",
["eyu"]="эю", ["Aya"]="Ая", ["aya"]="ая", ["B'a"]="Бя", ["b'a"]="бя", ["V'a"]="Вя", ["v'a"]="вя", ["G'a"]="Гя", ["g'a"]="гя", ["D'a"]="Дя", ["d'a"]="дя", ["Iya"]="Ия", ["iya"]="ия", ["Yya"]="Йя", ["yya"]="йя", ["K'a"]="Кя",
["k'a"]="кя", ["L'a"]="Ля", ["l'a"]="ля", ["M'a"]="Мя", ["m'a"]="мя", ["N'a"]="Ня", ["n'a"]="ня", ["Oya"]="Оя", ["oya"]="оя", ["P'a"]="Пя", ["p'a"]="пя", ["R'a"]="Ря", ["r'a"]="ря", ["S'a"]="Ся", ["s'a"]="ся", ["T'a"]="Тя",
["t'a"]="тя", ["Uya"]="Уя", ["uya"]="уя", ["F'a"]="Фя", ["f'a"]="фя", ["H'a"]="Хя", ["h'a"]="хя", ["C'a"]="Ця", ["c'a"]="ця", ["Q'a"]="Чя", ["q'a"]="чя", ["X'a"]="Шя", ["x'a"]="шя", ["Wya"]="Ыя", ["wya"]="ыя", ["'ya"]="ья",
["Eya"]="Эя", ["eya"]="эя", ["'yi"]="ьи", ["'yo"]="ьо", ["Wyo"]="Ыё", ["wyo"]="ыё", ["'yo"]="ьё", ["Eyo"]="Эё", ["eyo"]="эё", ["Ayu"]="Аю", ["ayu"]="аю", ["B'u"]="Бю", ["b'u"]="бю", ["V'u"]="Вю", ["v'u"]="вю", ["G'u"]="Гю",
["g'u"]="гю", ["D'u"]="Дю", ["d'u"]="дю", ["eyu"]="ею", ["Iyu"]="Ию", ["iyu"]="ию", ["Yyu"]="Йю", ["yyu"]="йю", ["K'u"]="Кю", ["k'u"]="кю", ["L'u"]="Лю", ["l'u"]="лю", ["M'u"]="Мю", ["m'u"]="мю", ["N'u"]="Ню", ["n'u"]="ню",
["Oyu"]="Ою", ["oyu"]="ою", ["P'u"]="Пю", ["p'u"]="пю", ["R'u"]="Рю", ["r'u"]="рю", ["S'u"]="Сю", ["s'u"]="сю", ["T'u"]="Тю", ["t'u"]="тю", ["Uyu"]="Ую", ["uyu"]="ую", ["F'u"]="Фю", ["f'u"]="фю", ["H'u"]="Хю", ["h'u"]="хю",
["C'u"]="Цю", ["c'u"]="цю", ["Q'u"]="Чю", ["Q'u"]="чю", ["X'u"]="Шю", ["x'u"]="шю", ["Be"]="Бе", ["be"]="бе", ["Ve"]="Ве", ["ve"]="ве", ["Ge"]="Ге", ["ge"]="ге", ["De"]="Де", ["de"]="де", ["Ye"]="Йе", ["ye"]="йе",
["Ke"]="Ке", ["ke"]="ке", ["Le"]="Ле", ["le"]="ле", ["Me"]="Ме", ["me"]="ме", ["Ne"]="Не", ["ne"]="не", ["Pe"]="Пе", ["pe"]="пе", ["Re"]="Ре", ["re"]="ре", ["Se"]="Се", ["se"]="се", ["Te"]="Те", ["te"]="те",
["Fe"]="Фе", ["fe"]="фе", ["He"]="Хе", ["he"]="хе", ["Ce"]="Це", ["ce"]="це", ["Qe"]="Че", ["qe"]="че", ["Xe"]="Ше", ["xe"]="ше", ["ye"]="ъе", ["We"]="Ые", ["we"]="ые", ["Ee"]="Эе", ["ee"]="эе", ["yo"]="ъё",
["yu"]="ъю", ["ya"]="ъя", ["Xq"]="Щ", ["xq"]="щ", ["Yu"]="Ю", ["yu"]="ю", ["Ya"]="Я", ["ya"]="я", ["Ye"]="Е", ["ye"]="е", ["Yo"]="Ё", ["yo"]="ё", ["A"]="А", ["a"]="а", ["B"]="Б", ["b"]="б",
["V"]="В", ["v"]="в", ["G"]="Г", ["g"]="г", ["D"]="Д", ["d"]="д", ["J"]="Ж", ["j"]="ж", ["Z"]="З", ["z"]="з", ["I"]="И", ["i"]="и", ["Y"]="Й", ["y"]="й", ["K"]="К", ["k"]="к",
["L"]="Л", ["l"]="л", ["M"]="М", ["m"]="м", ["N"]="Н", ["n"]="н", ["O"]="О", ["o"]="о", ["P"]="П", ["p"]="п", ["R"]="Р", ["r"]="р", ["S"]="С", ["s"]="с", ["T"]="Т", ["t"]="т",
["U"]="У", ["u"]="у", ["F"]="Ф", ["f"]="ф", ["H"]="Х", ["h"]="х", ["C"]="Ц", ["c"]="ц", ["Q"]="Ч", ["q"]="ч", ["X"]="Ш", ["x"]="ш", ["W"]="Ы", ["w"]="ы", ["'"]="ь", ["E"]="Э",
["e"]="э"}
  for key, val in pairs(t) do
    str = string.gsub(str, key, val)
  end
  return str
end

function win1251_utf8(str)
  local t = {
["А"]="Рђ", ["Б"]="Р‘", ["В"]="Р’", ["Г"]="Р“", ["Д"]="Р”", ["Е"]="Р•", ["Ё"]="РЃ", ["Ж"]="Р–", ["З"]="Р—", ["И"]="Р", ["Й"]="Р™", ["К"]="Рљ", ["Л"]="Р›", ["М"]="Рњ", ["Н"]="Рќ", ["О"]="Рћ",
["П"]="Рџ", ["Р"]="Р ", ["С"]="РЎ", ["Т"]="Рў", ["У"]="РЈ", ["Ф"]="Р¤", ["Х"]="РҐ", ["Ц"]="Р¦", ["Ч"]="Р§", ["Ш"]="РЁ", ["Щ"]="Р©", ["Ъ"]="РЄ", ["Ы"]="Р«", ["Ь"]="Р¬", ["Э"]="Р­", ["Ю"]="Р®",
["Я"]="РЇ", ["а"]="Р°", ["б"]="Р±", ["в"]="РІ", ["г"]="Рі", ["д"]="Рґ", ["е"]="Рµ", ["ё"]="С‘", ["ж"]="Р¶", ["з"]="Р·", ["и"]="Рё", ["й"]="Р№", ["к"]="Рє", ["л"]="Р»", ["м"]="Рј", ["н"]="РЅ",
["о"]="Рѕ", ["п"]="Рї", ["р"]="СЂ", ["с"]="СЃ", ["т"]="С‚", ["у"]="Сѓ", ["ф"]="С„", ["х"]="С…", ["ц"]="С†", ["ч"]="С‡", ["ш"]="С€", ["щ"]="С‰", ["ъ"]="СЉ", ["ы"]="С‹", ["ь"]="СЊ", ["э"]="СЌ",
["ю"]="СЋ", ["я"]="СЏ"
}
  for key, val in pairs(t) do
    str = string.gsub(str, key, val)
  end
  return str
end

function utf8_win1251(str)
  local t = {
["Рђ"]="А", ["Р‘"]="Б", ["Р’"]="В", ["Р“"]="Г", ["Р”"]="Д", ["Р•"]="Е", ["РЃ"]="Ё", ["Р–"]="Ж", ["Р—"]="З", ["Р"]="И", ["Р™"]="Й", ["Рљ"]="К", ["Р›"]="Л", ["Рњ"]="М", ["Рќ"]="Н", ["Рћ"]="О",
["Рџ"]="П", ["Р "]="Р", ["РЎ"]="С", ["Рў"]="Т", ["РЈ"]="У", ["Р¤"]="Ф", ["РҐ"]="Х", ["Р¦"]="Ц", ["Р§"]="Ч", ["РЁ"]="Ш", ["Р©"]="Щ", ["РЄ"]="Ъ", ["Р«"]="Ы", ["Р¬"]="Ь", ["Р­"]="Э", ["Р®"]="Ю",
["РЇ"]="Я", ["Р°"]="а", ["Р±"]="б", ["РІ"]="в", ["Рі"]="г", ["Рґ"]="д", ["Рµ"]="е", ["С‘"]="ё", ["Р¶"]="ж", ["Р·"]="з", ["Рё"]="и", ["Р№"]="й", ["Рє"]="к", ["Р»"]="л", ["Рј"]="м", ["РЅ"]="н",
["Рѕ"]="о", ["Рї"]="п", ["СЂ"]="р", ["СЃ"]="с", ["С‚"]="т", ["Сѓ"]="у", ["С„"]="ф", ["С…"]="х", ["С†"]="ц", ["С‡"]="ч", ["С€"]="ш", ["С‰"]="щ", ["СЉ"]="ъ", ["С‹"]="ы", ["СЊ"]="ь", ["СЌ"]="э",
["СЋ"]="ю", ["СЏ"]="я"
}
  for key, val in pairs(t) do
    str = string.gsub(str, key, val)
  end
  return str
end

function koi8r_win1251(str)
  local t1 = {
["б"]="/б", ["в"]="/в", ["ч"]="/ч", ["з"]="/з", ["д"]="/д", ["е"]="/е", ["ц"]="/ц", ["ъ"]="/ъ", ["й"]="/й", ["к"]="/к", ["л"]="/л", ["м"]="/м", ["н"]="/н", ["о"]="/о", ["п"]="/п", ["р"]="/р",
["т"]="/т", ["у"]="/у", ["ф"]="/ф", ["х"]="/х", ["ж"]="/ж", ["и"]="/и", ["г"]="/г", ["ю"]="/ю", ["ы"]="/ы", ["э"]="/э", ["я"]="/я", ["щ"]="/щ", ["ш"]="/ш", ["ь"]="/ь", ["а"]="/а", ["с"]="/с",
["Б"]="/Б", ["В"]="/В", ["Ч"]="/Ч", ["З"]="/З", ["Д"]="/Д", ["Е"]="/Е", ["Ц"]="/Ц", ["Ъ"]="/Ъ", ["Й"]="/Й", ["К"]="/К", ["Л"]="/Л", ["М"]="/М", ["Н"]="/Н", ["О"]="/О", ["П"]="/П", ["Р"]="/Р",
["Т"]="/Т", ["У"]="/У", ["Ф"]="/Ф", ["Х"]="/Х", ["Ж"]="/Ж", ["И"]="/И", ["Г"]="/Г", ["Ю"]="/Ю", ["Ы"]="/Ы", ["Э"]="/Э", ["Я"]="/Я", ["Щ"]="/Щ", ["Ш"]="/Ш", ["Ь"]="/Ь", ["А"]="/А", ["С"]="/С"
}
  local t2 = {
["/б"]="А", ["/в"]="Б", ["/ч"]="В", ["/з"]="Г", ["/д"]="Д", ["/е"]="Е", ["/ц"]="Ж", ["/ъ"]="З", ["/й"]="И", ["/к"]="Й", ["/л"]="К", ["/м"]="Л", ["/н"]="М", ["/о"]="Н", ["/п"]="О", ["/р"]="П",
["/т"]="Р", ["/у"]="С", ["/ф"]="Т", ["/х"]="У", ["/ж"]="Ф", ["/и"]="Х", ["/г"]="Ц", ["/ю"]="Ч", ["/ы"]="Ш", ["/э"]="Щ", ["/я"]="Ъ", ["/щ"]="Ы", ["/ш"]="Ь", ["/ь"]="Э", ["/а"]="Ю", ["/с"]="Я",
["/Б"]="а", ["/В"]="б", ["/Ч"]="в", ["/З"]="г", ["/Д"]="д", ["/Е"]="е", ["/Ц"]="ж", ["/Ъ"]="з", ["/Й"]="и", ["/К"]="й", ["/Л"]="к", ["/М"]="л", ["/Н"]="м", ["/О"]="н", ["/П"]="о", ["/Р"]="п",
["/Т"]="р", ["/У"]="с", ["/Ф"]="т", ["/Х"]="у", ["/Ж"]="ф", ["/И"]="х", ["/Г"]="ц", ["/Ю"]="ч", ["/Ы"]="ш", ["/Э"]="щ", ["/Я"]="ъ", ["/Щ"]="ы", ["/Ш"]="ь", ["/Ь"]="э", ["/А"]="ю", ["/С"]="я"
}
  for key, val in pairs(t1) do
    str = string.gsub(str, key, val)
  end
  for key, val in pairs(t2) do
    str = string.gsub(str, key, val)
  end
  return str
end

function dos866_win1251(str)
  local t1 = {
[1]="и", [2]="Ё", [3]="а", [4]="б", [5]="в", [6]="г", [7]="д", [8]="е", [9]="ж", [10]="з", [11]="й", [12]="к", [13]="л", [14]="м", [15]="н", [16]="о",
[17]="п", [18]="", [19]=" ", [20]="¤", [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]="‘", [51]="’", [52]="‚", [53]="“", [54]="”", [55]="„", [56]="†", [57]="‡", [58]="•", [59]="…", [60]="‰", [61]="‹", [62]="›", [63]="€", [64]="™"
}
  local t2 = {
[1]="ш", [2]="и", [3]="р", [4]="с", [5]="т", [6]="у", [7]="ф", [8]="х", [9]="ц", [10]="ч", [11]="щ", [12]="ъ", [13]="ы", [14]="ь", [15]="э", [16]="ю",
[17]="я", [18]="Ш", [19]="а", [20]="д", [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]="С", [51]="Т", [52]="В", [53]="У", [54]="Ф", [55]="Д", [56]="Ж", [57]="З", [58]="Х", [59]="Е", [60]="Й", [61]="Л", [62]="Ы", [63]="И", [64]="Щ"
}
  local i = 1
  while i < 65 do
    str = string.gsub(str, t1[i], t2[i]);
    i = i + 1;
  end
  return str
end
