Создание переводчика транслита
Привожу код работающего транслятора (тоесть то что смог написать)
[HTML]<style>
.bgcolor4 {background: #D1DEEA;}
.bgcolor5 {background: white;}
input, textarea, select {background: #FAFAFA; color: #000000; border: 1px #D1DEEA solid; font-size: 11px; font-family: Verdana, Helvetica; text-decoration: none;}
input:hover, textarea:hover, select:hover {border: 1px #A2BCD5 solid;}
input:focus, textarea:focus, select:focus {border: 1px #83A5C7 solid;}
</style>
<script language="JavaScript">
var latcode = new Array();
var cyrcode = new Array();
var lat2 = new Array("JO","SCH","ZH","CH","SH","JE","JU","JA","jo","sch","zh","ch","sh","je","ju","ja");
var cyr2 = new Array("Ё", "Щ", "Ж", "Ч", "Ш", "Э", "Ю", "Я", "ё", "щ", "ж", "ч", "ш", "э", "ю", "я");
var lat = new Array("A", "B", "V", "G", "D", "E", "Z", "I", "J", "K", "L", "M", "N", "O", "P", "R", "S", "T", "U", "F", "H", "C", ",", "Y", "'", "a", "b", "v", "g", "d", "e", "z", "i", "j", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "h", "c", ",","y", "'");
var cyr = new Array("А", "Б", "В", "Г", "Д", "Е", "З", "И", "Й", "К", "Л", "М", "Н", "О", "П", "Р", "С", "Т", "У", "Ф", "Х", "Ц", "Ъ", "Ы", "Ь", "а", "б", "в", "г", "д", "е", "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ъ", "ы", "ь");
var rules = "<table align='center' width='100%' class='bgcolor4'><tr class='bgcolor5'><td align='center'>A</td><td align='center'>B</td><td align='center'>V</td><td align='center'>G</td><td align='center'>D</td><td align='center'>E</td><td align='center'>JO</td><td align='center'>ZH</td><td align='center'>Z</td><td align='center'>I</td><td align='center'>J</td><td align='center'>K</td><td align='center'>L</td><td align='center'>M</td><td align='center'>N</td><td align='center'>O</td><td align='center'>P</td><td align='center'>R</td><td align='center'>S</td><td align='center'>T</td><td align='center'>U</td><td align='center'>F</td><td align='center'>H</td><td align='center'>C</td><td align='center'>CH</td><td align='center'>SH</td><td align='center'>SCH</td><td align='center'>,</td><td align='center'>Y</td><td align='center'>'</td><td align='center'>JE</td><td align='center'>JU</td><td align='center'>JA</td></tr><tr class='bgcolor5'><td align='center'>A</td><td align='center'>Б</td><td align='center'>В</td><td align='center'>Г</td><td align='center'>Д</td><td align='center'>Е</td><td align='center'>Ё</td><td align='center'>Ж</td><td align='center'>З</td><td align='center'>И</td><td align='center'>Й</td><td align='center'>К</td><td align='center'>Л</td><td align='center'>М</td><td align='center'>Н</td><td align='center'>О</td><td align='center'>П</td><td align='center'>Р</td><td align='center'>С</td><td align='center'>Т</td><td align='center'>У</td><td align='center'>Ф</td><td align='center'>Х</td><td align='center'>Ц</td><td align='center'>Ч</td><td align='center'>Ш</td><td align='center'>Щ</td><td align='center'>Ъ</td><td align='center'>Ы</td><td align='center'>Ь</td><td align='center'>Э</td><td align='center'>Ю</td><td align='center'>Я</td></tr></table>";
var enabled_translit = 0;
var translate=1;
function enabled(id){
var buf = new String;
var selection = false;
var txtarea = document.getElementById(id);
var regexp;
var i;
if (enabled_translit==0){
document.getElementById('button1').value="Выключить транслятор";
document.getElementById('button1').style.color="red";
txtarea.onkeyup=function(){
buf = txtarea.value;
for (i = 0; i < cyr2.length; i++){
eval('regexp = /'+cyr2+'/g');
buf = buf.replace(regexp, lat2);
}
for (i = 0; i < cyr.length; i++){
eval('regexp = /'+cyr+'/g');
buf = buf.replace(regexp, lat);
}
for (i = 0; i < lat2.length; i++){
eval('regexp = /'+lat2+'/g');
buf = buf.replace(regexp, cyr2);
}
for (i = 0; i < lat.length; i++){
eval('regexp = /'+lat+'/g');
buf = buf.replace(regexp, cyr);
}
txtarea.value = buf;
return;
}
txtarea.focus();
enabled_translit=1;
document.getElementById('rulestranslit').innerHTML=rules;
txtarea.focus();
} else {
document.getElementById('button1').value="Включить транслятор";
document.getElementById('button1').style.color="green";
txtarea.onkeyup=OnKeyUp=function(){}
enabled_translit=0;
document.getElementById('rulestranslit').innerHTML="";
txtarea.focus();
}
}
</script>
<H1>Translit</H1><br>
<input style="width: 200px; color: green;" type="button" id="button1" value="Включить транслятор" onclick="enabled('message')">
<input style="width: 50px; color: orange;" type="button" value="" onclick="document.getElementById('message').value+=''; document.getElementById('message').focus();">
<input style="width: 50px; color: orange;" type="button" value="" onclick="document.getElementById('message').value+=''; document.getElementById('message').focus();">
<input style="width: 50px; color: orange;" type="button" value="" onclick="document.getElementById('message').value+=''; document.getElementById('message').focus();">
<input style="width: 50px; color: orange;" type="button" value="
<input style="width: 50px; color: orange;" type="button" value="
'; document.getElementById('message').focus();"><br><br>
<textarea style="width: 100%" id="message" rows="15"></textarea><br><br>
<div id="rulestranslit"></div>[/HTML]
Создание переводчика транслита
Доброго времени суток вот на днях был загорелся сделать такую штуку вот только уперся рогами в тупик и хоть убей не знаю как можно исправить багу ))
Привожу код работающего транслятора (тоесть то что смог написать)
Проблема заключается в том что не могу заставить чтобы он не переводил текст заключений в [….] и <….>. Возможно выбран не правильный подход перевода. Если есть идеи внимательно их выслушаю.
P.S. Причиной написания транслятора стало то что в инете работающего на всех браузерах не нашел, точнее все были под ИЕ, та и код в них куда более моего разобраться тяжело.
если встретили открывающую скобку [ то перестаете транслировать и пока не встретите закрывающую ] просто вне режима трансляции оставляете текст
правда для этого придется наверно серьезно поменять структуру скрипта (
Если бы както реализовать буфер в котором бы постоянно были только латинские буквы, то может с этого что-то бы и получилось, но тоже пребывал брать последний символ со строки и заносить в буфер с этого выплыла следующая проблема что если пользователь ввел текс потом решил в тексте (не в конец) дописать букву в моем примере заносилась опять последняя. Ужу переведенная и весь транслит летел.
Если реализовать правильно этот буфер тогда еще можно что-то придумать.
Так и есть. До реализации на JS руки не дошли. Будет желание допишу :)
Не возникает. Просто при проверке текущего символа имей в виду, что замена может быть двойной. Т.е. если текущий символ s, то проверь следующий за ним символ, если это c и потом h, то транслируй их в нужную комбинацию, если нет, то транслируй в c.
перебирать всю строку я думаю будет самый простой вариант
с учетом того что тебе сказал alekciy
ну можно скажем еще строку разбивать на куски по признакам разграничения [...][/...] и применять вашу функцию только к тому что осталось между разграничителями