Advertisement
Guest User

lat.user.js

a guest
Jan 13th, 2017
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name        lat
  3. // @namespace   lat
  4. // @description латинизация страницы
  5. // @include     *
  6. // @version     0.1
  7. // @grant       none
  8. // ==/UserScript==
  9.  
  10. setTimeout(function(){
  11.  
  12.   function latinisation(str) {
  13.  
  14.     // popytka vosstanovitj ё tam, gde prosto е
  15.     str = str.replace(/( |^)(е|Е)ще/g, "$1$2щё");
  16.     str = str.replace(/( |^)(е|Е)е/g, "$1$2ё");
  17.     str = str.replace(/( |^)(в|В)ре(т|шь)/g, "$1$2рё$3");
  18.     str = str.replace(/( |^)(в|В)се (это|же|время|поймет|будет|объяснится|больше|более|самое)/g, "$1$2сё $3");
  19.  
  20.     // -ca vmesto -tsya/-tjsya
  21.     str = str.replace(/(([ёйцукенгшщзхъфывапролджэячсмитьбюЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ])ться|тся)/g, "$2ца");
  22.     str = str.replace(/(([ёйцукенгшщзхъфывапролджэячсмитьбюЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ])ТЬСЯ|ТСЯ)/g, "$2ЦА");
  23.  
  24.     // ne vzletelo
  25.     // // zhi/shi/ci pishi s y
  26.     // str = str.replace(/(ж|ш|ц)и/g, "$1ы");
  27.     // str = str.replace(/(Ж|Ш|Ц)и/g, "$1ы");
  28.     // str = str.replace(/(Ж|Ш|Ц)И/g, "$1Ы");
  29.  
  30.     str = str.replace(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])(ь|Ь)([еЕёЁиИюЮяЯ])/g, function(a) {
  31.       a = a.replace(/ь/g, "j");
  32.       a = a.replace(/Ь/g, "J");
  33.       a = a.replace(/е/g, "e");
  34.       a = a.replace(/Е/g, "E");
  35.       a = a.replace(/ё/g, "o");
  36.       a = a.replace(/Ё/g, "O");
  37.       a = a.replace(/и/g, "i");
  38.       a = a.replace(/И/g, "I");
  39.       a = a.replace(/ю/g, "u");
  40.       a = a.replace(/Ю/g, "U");
  41.       a = a.replace(/я/g, "a");
  42.       a = a.replace(/Я/g, "A");
  43.       a = a.replace(/е/g, "e");
  44.       a = a.replace(/Е/g, "E");
  45.       return a;
  46.     });
  47.  
  48.     str = str.replace(/([бвгдзклмнпрстфхцБВГДЗКЛМНПРСТФХЦ])ь/g, "$1j");
  49.     str = str.replace(/([бвгдзклмнпрстфхцБВГДЗКЛМНПРСТФХЦ])Ь/g, "$1J");
  50.     str = str.replace(/([жчшщЖЧШЩ])ь/g, "$1");
  51.     str = str.replace(/([жчшщЖЧШЩ])Ь/g, "$1");
  52.  
  53.     str = str.replace(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])е/g, "$1e");
  54.     str = str.replace(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])Е/g, "$1E");
  55.     // str = str.replace(/([бвгдзклмнпрстфхцБВГДЗКЛМНПРСТФХЦ])е/g, "$1ye"); // popytka oboznachitj smyagchenije
  56.     // str = str.replace(/([бвгдзклмнпрстфхцБВГДЗКЛМНПРСТФХЦ])Е/g, "$1Ye"); // pered "е". ne vzletelo
  57.     // str = str.replace(/([жчшщЖЧШЩ])е/g, "$1e");
  58.     // str = str.replace(/([жчшщЖЧШЩ])Е/g, "$1e");
  59.     str = str.replace(/е/g, "je");
  60.     str = str.replace(/Е/g, "Je");
  61.  
  62.     str = str.replace(/([бвгдзклмнпрстфхцБВГДЗКЛМНПРСТФХЦ])ё/g, "$1yo");
  63.     str = str.replace(/([бвгдзклмнпрстфхцБВГДЗКЛМНПРСТФХЦ])Ё/g, "$1Yo");
  64.     str = str.replace(/([жчшщЖЧШЩ])ё/g, "$1o");
  65.     str = str.replace(/([жчшщЖЧШЩ])Ё/g, "$1o");
  66.     str = str.replace(/ё/g, "jo");
  67.     str = str.replace(/Ё/g, "Jo");
  68.  
  69.     str = str.replace(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ю/g, "$1yu");
  70.     str = str.replace(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])Ю/g, "$1Yu");
  71.     str = str.replace(/ю/g, "ju");
  72.     str = str.replace(/Ю/g, "Ju");
  73.  
  74.     str = str.replace(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])я/g, "$1ya");
  75.     str = str.replace(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])Я/g, "$1Ya");
  76.     str = str.replace(/я/g, "ja");
  77.     str = str.replace(/Я/g, "Ja");
  78.  
  79.     str = str.replace(/щ/g, "sch");
  80.     str = str.replace(/Щ/g, "Sch");
  81.  
  82.     str = str.replace(/зх|Зх|ЗХ|зХ|цх|Цх|ЦХ|цХ|сх|Сх|СХ|сХ|ыо|ЫО|ыО|Ыо|ыу|Ыу|ыУ|ЫУ|ыа|ЫА|ыА|Ыа/g, function(a) {
  83.       return a[0]+"'"+a[1];
  84.     });
  85.  
  86.     str = str.replace(/[ъЪ]/g, "");
  87.  
  88.     var symbolsFrom, symbolsTo, re;
  89.     symbolsFrom = "абвгдезийклмнопрстуфхцыьэАБВГДЕЗИЙКЛМНОПРСТУФХЦЫЬЭ";
  90.     symbolsTo =   "abvgdezijklmnoprstufhcyjeABVGDEZIJKLMNOPRSTUFHCYJE";
  91.  
  92.     for (var i = 0; i < symbolsFrom.length; i++) {
  93.       re = new RegExp(symbolsFrom[i], "g");
  94.       str = str.replace(re, symbolsTo[i]);
  95.     };
  96.  
  97.     symbolsFrom = ["ж", "Ж", "ч", "Ч", "ш", "Ш"];
  98.     symbolsTo =   ["zh","Zh","ch","Ch","sh","Sh"];
  99.  
  100.     for (var i = 0; i < symbolsFrom.length; i++) {
  101.       re = new RegExp(symbolsFrom[i], "g");
  102.       str = str.replace(re, symbolsTo[i]);
  103.     };
  104.  
  105.     // fiksim KAPS
  106.     str = str.replace(/([ABVGDEZIJKLMNOPRSTUFHCY])(Sch)/g, "$1SCH");
  107.     str = str.replace(/(Sch)([ABVGDEZIJKLMNOPRSTUFHCY])/g, "SCH$2");
  108.     str = str.replace(/([ABVGDEZIJKLMNOPRSTUFHCY])(Z|C|S)h/g, "$1$2H");
  109.     str = str.replace(/(Z|C|S)h([ABVGDEZIJKLMNOPRSTUFHCY])/g, "$1H$2");
  110.     str = str.replace(/([ABVGDEZIJKLMNOPRSTUFHCY])(Y|J)o/g, "$1$2O");
  111.     str = str.replace(/(Y|J)o([ABVGDEZIJKLMNOPRSTUFHCY])/g, "$1O$2");
  112.     str = str.replace(/([ABVGDEZIJKLMNOPRSTUFHCY])(Y|J)u/g, "$1$2U");
  113.     str = str.replace(/(Y|J)u([ABVGDEZIJKLMNOPRSTUFHCY])/g, "$1U$2");
  114.     str = str.replace(/([ABVGDEZIJKLMNOPRSTUFHCY])(Y|J)a/g, "$1$2A");
  115.     str = str.replace(/(Y|J)a([ABVGDEZIJKLMNOPRSTUFHCY])/g, "$1A$2");
  116.     str = str.replace(/([ABVGDEZIJKLMNOPRSTUFHCY])(Y|J)e/g, "$1$2E");
  117.     str = str.replace(/(Y|J)e([ABVGDEZIJKLMNOPRSTUFHCY])/g, "$1E$2");
  118.  
  119.     str = str.replace(/( |^)SSHA/g, "$1SShA");
  120.  
  121.     return str;
  122.  
  123.   };
  124.  
  125.   // rekursivnyj obhod elementov
  126.   function getElem(node) {
  127.     for (var childItem in node.childNodes) {
  128.       if (node.childNodes[childItem].nodeType === 1) {
  129.         (function(){
  130.           var newItem = node.childNodes[childItem];
  131.           // asinhronno vyzyvajem
  132.           setTimeout(function(){
  133.             getElem(newItem);
  134.           },0);
  135.         })();
  136.         // zamena v knopkah
  137.         if ((node.childNodes[childItem].type === "button")||(node.childNodes[childItem].type === "submit")) {
  138.           node.childNodes[childItem].value = latinisation(node.childNodes[childItem].value);
  139.         }
  140.         // zamena v title
  141.         if (node.childNodes[childItem].title)
  142.           if ((node.childNodes[childItem].title.search(
  143.               /[ёйцукенгшщзхъфывапролджэячсмитьбюЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ]/) !== -1)) {
  144.             node.childNodes[childItem].title = latinisation(node.childNodes[childItem].title);
  145.           }
  146.       }
  147.       // zamena v tekstovyh polyah
  148.       if (node.childNodes[childItem].nodeType === 3) {
  149.         if (node.childNodes[childItem].nodeValue.search(
  150.             /[ёйцукенгшщзхъфывапролджэячсмитьбюЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ]/) !== -1) {
  151.           node.childNodes[childItem].nodeValue =
  152.               latinisation(node.childNodes[childItem].nodeValue);
  153.          }
  154.       }
  155.     }
  156.   }
  157.  
  158.   // dobavlyajem knopku sprava vnizu
  159.   var latButton = document.createElement("div");
  160.   document.body.appendChild(latButton);
  161.   latButton.innerHTML = "lat";
  162.   latButton.style["position"] = "fixed";
  163.   latButton.style["bottom"] = "3px";
  164.   latButton.style["right"] = "3px";
  165.   latButton.style["border"] = "1px solid #999";
  166.   latButton.style["padding"] = "3px";
  167.   latButton.style["background"] = "#fff";
  168.   latButton.style["color"] = "#000";
  169.   latButton.style["z-index"] = "9999999999";
  170.   latButton.style["cursor"] = "pointer";
  171.   latButton.style["opacity"] = "0.3";
  172.   latButton.style["font-size"] = "10px";
  173.   latButton.style["font-family"] = "sans-serif";
  174.  
  175.   latButton.onclick = function () {
  176.     document.title = latinisation(document.title);
  177.     getElem(document.body);
  178.   }
  179.  
  180.   // jesli na stranice jestj kirillica - konvertirujem
  181.   if (document.body.innerHTML.search(
  182.       /[ёйцукенгшщзхъфывапролджэячсмитьбюЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ]/) !== -1) {
  183.     // document.title = latinisation(document.title);
  184.     getElem(document);
  185.   }
  186.  
  187. },10);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement