Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Обсуждение форума > Transliteration again and again


Автор: neutrino 26.1.2003, 02:22
Privetstvuju vseh!

2Admin: Exhe ne vyskazyval svoego mnenija na schet novogo dvijka... Bystro! Ochen' bystro! No, kak-to chujdo vse slishkom. Kak-to menja ottalkivaet teper' vse jeto. Ne znaju pochemu. No, takie banal'nye zhertvy versus takaja skorost' - prosto nichto! Molodec!

A teper' o chem hotel skazat'. Sobstvenno, vy navernoe obratili vnimanie na to, chto jetot topik napisan na translite smile.gif. "Zadolbal uje so svoim translitom, sjad' da napishi ty jetot poganyi' skript." - skajite vy, i budete pravy. No! Ja chestnoe pionerskoe segodnja pytalsja ego napisat'. V itoge obnarujil, chto moih znanii' (vernee ih otsutstvie) nedostatochno dlja ego napisanija. Ja ne znaju jelementarno kak skopirovat' odnu stroku v druguju. Vot ja vynujden prosit' kogo-nibud' ego napisat'. Za osnovu ja bral skript BearBeer ( A gde on? Propal nasovsem?). Dalee u menja nichego ne vyshlo. Vot kak ja pytalsja sdelat':

Код

    var lat=new Array("url","jo","zh","i'","ch","sh","xh","je","ju","ja","a","b","v","g","d","e","z","i","k","l","m","n","o","p","r","s","t","u","f","c","'","y","`","j","h");
    var cyr=new Array("url","ё", "ж", "й", "ч", "ш", "щ", "э", "ю", "я", "а","б","в","г","д","е","з","и","к","л","м","н","о","п","р","с","т","у","ф","ц","ь","ы","ъ","ж","х");
    var latcap=new Array("JO","Jo","ZH","Zh","I'","Ch","CH","Sh","SH","Xh","XH","Je","JE","Ju","JU","Ja","JA","A","B","V","G","D","E","Z","I","K","L","M","N","O","P","R","S","T","U","F","C","Y","J","H");
    var cyrcap=new Array("Ё","Ё","Ж","Ж","Й","Ч","Ч","Ш","Ш","Щ","Щ","Э","Э","Ю","Ю","Я","Я","А","Б","В","Г","Д","Е","З","И","К","Л","М","Н","О","П","Р","С","Т","У","Ф","Ц","Ы","Ж","Х");

function replace(text, pos, from, to) {
 var i;
 var j;
 bool f;
 for (i=0; i<from.length; i++) {
   f=1;
   for (j=0; j<from[i].length; j++) {
     if (text[pos+j]!=from[j]) {
       f=0;
       break;
     }
   }
   if (f) text.replace(from[i], to[i]);
 }
 return text;
}

  function transform(_tex, _src, _repl){
     var i;
     for (i=0;i<_tex.length;i++){
       switch (_tex[i]) {
         case '[': if ((_tex[i+1]=='e')&&(_tex[i+2]=='n')&&(_tex[i+3]=='g')&&(_tex[i+4]==']')) {
                     i+=4;
                     while (i<_tex.length) if ((_tex[i]=='[')&&(_tex[i+1]=='/')&&(_tex[i+2]=='e')&&(_tex[i+3]=='n')&&(_tex[i+4]=='g')&&(_tex[i+5]==']')) {
                       i+=4;
                       break;
                     } else i++;
                   } else {
                     while (i++<_tex.length) if (_tex[i]==']') break;
                   }
                   break;
         case ':': while (i<_tex.length) if (_tex[i++]==' ') break;
                   break;
         default:   _tex=replace(_tex, i, _src, _repl);
       }
     }
     return _tex;
  }

  function toRus(tex){
     tex=transform(tex, latcap, cyrcap);
     tex=transform(tex, lat, cyr);
       return tex;
  }


  function onClickBtnRu(){
 var txt = document.SENDDATA.message.value;
 txt = toRus(txt);
 document.SENDDATA.message.value = txt;
 document.SENDDATA.message.focus;
  }


Nu, ideja ponjatna, a implementacija - nepravil'na. withstupid.gif

P.S. Vse vyshe skazannoe otnositsja tol'ko k "uluchshenijam" starogo translita. Jasnyi' perec, chto mojno ego skatat' so starogo foruma. Jetot zhe ne perevodit mejdu [eng] [/eng] i tjegi [code] [color] ... V obxhem vse.

Автор: Cepera 26.1.2003, 06:45
спасибо, нейтрино...
я только не согласен с использованием je, i' и так далее...
уже в каком-то постинге писал

Автор: Wowa 26.1.2003, 07:10
Давайте думать, доработаем и поместим новый код сразу.

Автор: Cepera 26.1.2003, 16:12
Код
var lat=new Array("url", "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", "xh", "'", "yy", "`", "ye", "yu", "ya");
   var cyr=new Array("url", "а", "б", "в", "г", "д", "е", "ё", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ь", "ы", "ъ", "э", "ю", "я");
   var latcap=new Array("A", "B", "V", "G", "D", "E", "YO", "Yo", "ZH", "Zh", "Z", "I", "I'", "K", "L", "M", "N", "O", "P", "R", "S", "T", "U", "F", "H", "C", "CH", "Ch", "SH", "Sh", "XH", "Xh", "YY", "Yy", "YE", "Ye", "YU", "Yu", "YA", "Ya");
   var cyrcap=new Array("А", "Б", "В", "Г", "Д", "Е", "Ё", "Ё", "Ж", "Ж", "З", "И", "Й", "К", "Л", "М", "Н", "О", "П", "Р", "С", "Т", "У", "Ф", "Х", "Ц", "Ч", "Ч", "Ш", "Ш", "Щ", "Щ", "Ы", "Ы", "Э", "Э", "Ю", "Ю", "Я", "Я");



собственно исправил лишь сами массивы, да и то чуть-чуть...
1. пересортировал
2. изменил правила для "ё, й, ы, э, ю, я"
3. убрал повторяющиеся "ж"


а так, neutrino, respect smile.gif

Автор: neutrino 26.1.2003, 19:12
Privet!

Cepera, a ja to tam nepravil'no funkciju replace napisal. Ja prosto ne znakom s ob`ektami jazyka Java Script. Ved' tam nichego ne rabotaet. Da i optimizirovat', navernoe, nado. Na schet "je", ty prav. Skol'ko ja parilsja, kogda pisal slova "jelezka", "jutko"... Jeto ujas!!! Pravil'no sdelal, chto ubral. A v osnovu "uluchshenija" zalojen algoritm implementirovannyi' v funkcii transform. On doljen rabotat' tak: esli uvideli "[", to, esli jeto ne "[eng]", nichego ne delat' do "]", inache, nichego ne delat' do [/eng]. A smai'liki nachinajutsja s dvoetochija, i tak my ne perevodim ot dvoetochija do probela (ved' posle dvoetochija v russkom jazyke pishut vsegda probel).

Автор: Cepera 27.1.2003, 00:47
Цитата
ved' posle dvoetochija v russkom jazyke pishut vsegda probel

если человек грамотный, то да

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)