Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   транслитератор. кажется сразу надо было сюда (https://javascript.ru/forum/css-html/46012-transliterator-kazhetsya-srazu-nado-bylo-syuda.html)

lodkin 25.03.2014 00:51

транслитератор. кажется сразу надо было сюда
 
добрый день. вобщем, проблема вот в чем:
транслитератор на vbscript, работает только в браузере IE, хочется переписать его на js. язык абхазский, 64 буквы. алгоритм такой:

1. создаются массивы для транслитерации из латиницы в кириллицу

а. сочетания из четырех символов
б. сочетания из трех символов
в. сочетания из двух символов
г. один символ

создаются массивы для транслитерации из кириллицы в латиницу
а. сочетания из трех символов
б. сочетания из двух символов
в. один символ

2. скрипт ищет сначала сочетания а, потом б, и, когда сочетаний не остается, транслирует уже одиночные символы

транслитератор делали оч давно, в эпоху IE6.. язык абхазский. сам не программер. тогда помню с большим рудом добился корректной работы именно на vbs, а js транслитерировал некорректно

спасибо за внимание, подсказки, корректировку, вижу что форум живой

krasovsky 25.03.2014 09:43

А что собственно корректировать тут? Ну кроме как грамматические ошибки - но тут я не могу ни чем помочь, сам не мастер. Это на какой нибудь форум русского языка.

А вот подсказку дать могу - тут могут помочь с конкретным вопросом,а не написать за тебя.

lodkin 25.03.2014 12:40

http://www.codeguru.com.ua/article/a-183.html
Виды процедур
В VBScript существует два вида процедур: подпрограмма (Sub) и функция (Function)

код транслитератора такой:

' VBScript File
Sub clickMutateVB()
Document.getElementById("e").Value = MutateVB(Document.getElementById("e").Value, Document.getElementById("from").Value + Document.getElementById("to").Value)
End Sub




Function MutateVB(str, flag)
'Латиница в кириллицу(Unicode)
if flag = 301 OR flag = 401 then
for l = 0 to UBound(lattoc4)
str = Replace(str,lattoc4(l), ltocir4(l))
next

for l = 0 to UBound(lattoc3)
str = Replace(str,lattoc3(l), ltocir3(l))
next

for l = 0 to UBound(lattoc2)
str = Replace(str,lattoc2(l), ltocir2(l))
next

for l = 0 to UBound(lattoc1)
str = Replace(str,lattoc1(l), ltocir1(l))
next
end if



'Кириллица(Unicode) в латиницу
if flag = 103 OR flag = 104 then
for l = 0 to UBound(cirtol4)
str = Replace(str,cirtol4(l), ctolat4(l))
next

for l = 0 to UBound(lattoc3)
str = Replace(str,cirtol3(l), ctolat3(l))
next

for l = 0 to UBound(lattoc2)
str = Replace(str,cirtol2(l), ctolat2(l))
next

for l = 0 to UBound(lattoc1)
str = Replace(str,cirtol1(l), ctolat1(l))
next
end if

далее массивы

lodkin 25.03.2014 12:41

я смог додуматься только до вот такого, но он транслирует посимвольно, не учитывает сочтания

function cirTolat(text) {
var a = document.getElementById('area');
if(a) {
var let = a.value.split('');

for(var j = 0; j < let.length; j++) {
if(let[j] != ' ') {
for(var i = 0; i < cirilica.length; i++) {
if(let[j] == cirilica[i]) {
let[j] = latinica[i];
}
}
}
}
document.getElementById('area2').value=let.join('' );
}
}

function latTocir() {
var a = document.getElementById('area2');
if(a) {
var let = a.value.split('');

for(var j = 0; j < let.length; j++) {
if(let[j] != ' ') {
for(var i = 0; i < latinica.length; i++) {
if(let[j] == latinica[i]) {
let[j] = cirilica[i];
}
}
}
}
document.getElementById('area').value=let.join('') ;
}
}

рони 25.03.2014 13:16

lodkin,
Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.

вопрос почему в одном случае массивов 4 а обратно 3?

рони 25.03.2014 13:22

lodkin,
алгоритм тотже самый брать следующий элемент массива пока он есть -- перезаписывать все совпадения в строке - переходить к следующему массиву и также - разбивать строку нет необходимости


Часовой пояс GMT +3, время: 11:19.