Top

Advanced search  

News:

Новый дизайн сайта. О недостатках и пожеланиях пишите на форуме в разделе "Наш сайт".

Author Topic: Транслитератор для FireFox  (Read 10583 times)

Alexander Grinshpun

  • Эксперт
  • *****
  • Offline Offline
  • Posts: 282
Транслитератор для FireFox
« on: 26 December, 2007, 17:53:21 »

Если вы используете транслитератор и вам порядком поднадоело постоянно переходить из одного окна в другое, то приложенный GreaseMonkey user script, может вам помочь автоматически добавить поддержку транслита к текстовым редакторам на определённом
сайте, в данном случае - www.newrisc.com.

// ==UserScript==
// @name           Translit
// @namespace      chainwheel.menja.net
// @include        http://www.newrisc.com/*
// ==/UserScript==


/*
(C) 2006 Lenny Domnitser
Use this freely under the GNU GPL, http://www.gnu.org/licenses/gpl.html
*/
function bind(func, this_) {
  return function() {
    func.apply(this_, arguments);
  };
}

function Transliterator(input) {
  this.input = input;
  this.keyListener = bind(this.keyListener, this);
  this.latMode = false;
  function clearLastKey() {
    delete this.lastChar;
  }
  clearLastKey = bind(clearLastKey, this);
  input.addEventListener('click', clearLastKey, false);
  input.addEventListener('blur', clearLastKey, false);
}

Transliterator.lookup = {
  'A': '\u0410',                       'a': '\u0430',
  'B': '\u0411',                       'b': '\u0431',
  'V': '\u0412',                       'v': '\u0432',
  'G': '\u0413',                       'g': '\u0433',
  'D': '\u0414',                       'd': '\u0434',
  'E': '\u0415',                       'e': '\u0435',
  'Yo': '\u0401',                      'yo': '\u0451',
  'Zz': '\u0416',                      'zh': '\u0436',
  'Zh': '\u0416',
  'Z': '\u0417',                       'z': '\u0437',
  'I': '\u0418',                       'i': '\u0438',
  'J': '\u0419',                       'j': '\u0439',
  'K': '\u041A',                       'k': '\u043A',
  'L': '\u041B',                       'l': '\u043B',
  'M': '\u041C',                       'm': '\u043C',
  'N': '\u041D',                       'n': '\u043D',
  'O': '\u041E',                       'o': '\u043E',
  'P': '\u041F',                       'p': '\u043F',
  'R': '\u0420',                       'r': '\u0440',
  'S': '\u0421',                       's': '\u0441',
  'T': '\u0422',                       't': '\u0442',
  'U': '\u0423',                       'u': '\u0443',
  'F': '\u0424',                       'f': '\u0444',
  'X': '\u0425', 'H': '\u0425',        'x': '\u0445', 'h': '\u0445',
  'C': '\u0426', 'Ts': '\u0426',       'c': '\u0446', 'ts': '\u0446',
  'Ch': '\u0427',                      'ch': '\u0447',
  'Sh': '\u0428',                      'sh': '\u0448',
  'w': '\u0429',                       'W': '\u0449',
  '""': '\u042A',                      "''": '\u044A',
  'Y': '\u042B',                       'y': '\u044B',
  '"': '\u042C',                       "'": '\u044C',
  'Je': '\u042D',                      'je': '\u044D',
  'Ju': '\u042E', 'Yu': '\u042E',      'ju': '\u044E', 'yu': '\u044E',
  'Ja': '\u042F', 'Ya': '\u042F',      'ja': '\u044F', 'ya': '\u044F'
};

Transliterator.prototype.keyListener = function(event) {
  if(event.altKey || event.metaKey) {
    return;
  }

  var curChar = String.fromCharCode(event.which);

  if(event.ctrlKey) {
      if(curChar == "T") {
          event.preventDefault();
          this.latMode = !this.latMode;
      }
      return;
  }

  if(this.latMode) {
      return;
  }

  var sl = this.input.scrollLeft;
  var st = this.input.scrollTop;

  var rusText;
  rusText = Transliterator.lookup[this.lastChar + curChar.toLowerCase()];

  if(rusText) {
    event.preventDefault();
    var ss = this.input.selectionStart;
    this.input.value = this.input.value.substring(0, this.input.selectionStart - 1) + rusText + this.input.value.substring(this.input.selectionEnd, this.input.textLength);
    this.input.selectionStart = ss;
    this.input.selectionEnd = ss;
  } else {
    rusText = Transliterator.lookup[curChar];
    if(rusText) {
      event.preventDefault();
      var ss = this.input.selectionStart;
      this.input.value = this.input.value.substring(0, this.input.selectionStart) + rusText + this.input.value.substring(this.input.selectionEnd, this.input.textLength);
      this.input.selectionStart = ss + 1;
      this.input.selectionEnd = ss + 1;
    }
  }
  if(rusText) {
    this.input.scrollLeft = sl;
    this.input.scrollTop = st;
  }
  this.lastChar = curChar;
};

Transliterator.prototype.enable = function() {
  this.input.addEventListener('keypress', this.keyListener, false);
};

Transliterator.prototype.disable = function() {
  this.input.removeEventListener('keypress', this.keyListener, false);
};

function armAll() {
    var result = document.evaluate('//input[not(@type) or @type="text"] | //textarea', document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);

    for(var c = 0; input = result.snapshotItem(c); c++) {
        var translit = new Transliterator(input);
        translit.enable();
    }
}


armAll();

Logged
Когда у общества нет цветовой дифференциации штанов, то нет цели!

GreenA

  • Administrator
  • Бог, просто бог
  • ******
  • Offline Offline
  • Posts: 1914
    • http://greena.livejournal.com
Re: Транслитератор для FireFox
« Reply #1 on: 26 December, 2007, 18:12:06 »

полезная штука
Logged
If I sleep with you tonight, it doesn't mean I'll ski with you tomorrow

Alexander Grinshpun

  • Эксперт
  • *****
  • Offline Offline
  • Posts: 282
Re: Транслитератор для FireFox
« Reply #2 on: 26 December, 2007, 18:26:18 »

К сожалению, работает только с простыми редакторами, а именно - редакторами, основанными на <textarea> или <input type="text">, для различных же WISIWIGов (наподобие редактора в gmail)- пока нет, но работа в данном направлении ведётся.
« Last Edit: 26 December, 2007, 18:27:54 by chainwheel »
Logged
Когда у общества нет цветовой дифференциации штанов, то нет цели!

Ilyan

  • Бывалый
  • ****
  • Offline Offline
  • Posts: 126
Re: Транслитератор для FireFox
« Reply #3 on: 26 December, 2007, 20:10:40 »

А почему правила транслита не полностью соответствуют http://translit.ru/ ? ;)
Logged
054-4290345

Alexander Grinshpun

  • Эксперт
  • *****
  • Offline Offline
  • Posts: 282
Re: Транслитератор для FireFox
« Reply #4 on: 26 December, 2007, 22:04:22 »

Таблица транслитерации - личое дело каждого и её довольно просто настроить, но при случае    добавлю возможность динамической настройки (сразу после решения проблемы gmail и odnoklassniki.ru). Да, что более важно: CTRL-SHIFT-T переводит редактор из кириллицы в латиницу и обратно.
Logged
Когда у общества нет цветовой дифференциации штанов, то нет цели!

skostik

  • Настоящий лыжeбордер
  • ***
  • Offline Offline
  • Posts: 74
    • http://dura-matera.livejournal.com/
Re: Транслитератор для FireFox
« Reply #5 on: 26 December, 2007, 22:36:37 »

A не проще поменять раскладку на клаве? К примеру этим: http://www.microsoft.com/downloads/details.aspx?familyid=8BE579AA-780D-4253-9E0A-E17E51DB2223&displaylang=en
Это будет работать во всех прогах...
Logged

Alexander Grinshpun

  • Эксперт
  • *****
  • Offline Offline
  • Posts: 282
Re: Транслитератор для FireFox
« Reply #6 on: 27 December, 2007, 12:18:49 »

Проще. Соответствующая клавиатура прилагается.
« Last Edit: 27 December, 2007, 12:38:14 by chainwheel »
Logged
Когда у общества нет цветовой дифференциации штанов, то нет цели!
 

Bottom
Russian America Top. Рейтинг ресурсов русской Америки. Member of skinet topsites