Advertisement
AHOHNMYC

Typography on screen

May 31st, 2016
317
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name        Typography on screen
  3. // @namespace   2ch culture
  4. // @include     *
  5. // @homepage    http://artlebedev.ru/kovodstvo/62
  6. // @version     v0.1.3.1
  7. // @grant       none
  8. // ==/UserScript==
  9.  
  10. /*
  11. Спецсимволы:
  12.   L" — «
  13.   R" — »
  14.  (C) — ©
  15.  (R) — ®
  16. (tm) — ™ (tm не зависит от регистра)
  17.   +- — ±
  18. */
  19.  
  20. function replacer() {
  21.     var replacer = function() {
  22.         var replacer = function(tmp) {
  23.             var replacer = function(m) {
  24.                 switch (m) {
  25.                     case 'L"':
  26.                         s = '«';
  27.                         n = 1;
  28.                         break;
  29.                     case 'R"':
  30.                         s = '»';
  31.                         n = 1;
  32.                         break;
  33.                     case '(C)':
  34.                         s = '©';
  35.                         n = 2;
  36.                         break;
  37.                     case '(R)':
  38.                         s = '®';
  39.                         n = 2;
  40.                         break;
  41.                     case '+-':
  42.                         s = '±';
  43.                         n = 1;
  44.                         break;
  45.                     case '...':
  46.                         s = '…';
  47.                         n = 2;
  48.                         break;
  49.                     default:
  50.                         s = '™';
  51.                         n = 3;
  52.                 }
  53.                 selSt -= n;
  54.                 selEn -= n;
  55.                 return s;
  56.             };
  57.             // Тире (с неразрывным пробелом)
  58.             tmp = tmp.replace(/ +-(?= )/g, ' —');
  59.             // Короткое тире
  60.             tmp = tmp.replace(/(?!\d{4})-(?=\d{1,4}($| | ?г+))/g, '–');
  61.             // Дефис
  62.             tmp = tmp.replace(/(?![a-яё]|\d)-(?=[a-яё])/g, '-');
  63.  
  64.             // Левая кавычка
  65.             tmp = tmp.replace(/L"/g, replacer);
  66.             // Правая кавычка
  67.             tmp = tmp.replace(/R"/g, replacer);
  68.  
  69.             // Неразрывный пробел
  70.             // 1. Единицы измерения
  71.             tmp = tmp.replace(/(?!\d+) (?=[а-яё]{1,3})/gi, ' ');
  72.             // 2. Маленькие слова
  73.             tmp = tmp.replace(/(?! [а-яё]{1,3}) /gi, ' ');
  74.  
  75.             // Знак охраны авторского права
  76.             tmp = tmp.replace(/\(C\)/g, replacer);
  77.             // Символ зарегистрированного товарного знака
  78.             tmp = tmp.replace(/\(R\)/g, replacer);
  79.             // Символ товарного знака
  80.             tmp = tmp.replace(/\(tm\)/gi, replacer);
  81.  
  82.             // Плюс-минус
  83.             tmp = tmp.replace(/\+-/g, replacer);
  84.             // Многоточие
  85.             tmp = tmp.replace(/\.\.\./g, replacer);
  86.             return tmp;
  87.         };
  88.         var selSt = this.selectionStart,
  89.             selEn = this.selectionEnd,
  90.             selDr = this.selectionDirection,
  91.             replaced = replacer(this.value);
  92.         if (this.value != replaced) {
  93.             this.value = replaced;
  94.             this.setSelectionRange(selSt, selEn, selDr);
  95.         }
  96.     };
  97.     var TAs = document.getElementsByTagName('textarea');
  98.     for (var i = 0; i < TAs.length; i++) {
  99.         TAs[i].addEventListener('keyup', replacer);
  100.     }
  101. }
  102. // document.addEventListener('DOMContentLoaded', replacer);
  103. replacer();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement