// file: translit.js // Herve Saint-Amand // Saarbruecken // Sun Sep 3 18:36:22 2006 //----------------------------------------------------------------------------- var translit_chars = { // combinaisons 'tS': '\u0442\u0441', // majuscules 'Yo': '\u0401', 'YO': '\u0401', 'Zh': '\u0416', 'ZH': '\u0416', 'Kh': '\u0425', 'KH': '\u0425', 'H': '\u0425', 'X': '\u0425', 'Ts': '\u0426', 'TS': '\u0426', 'Shch': '\u0429', 'SHCH': '\u0429', 'Ch': '\u0427', 'CH': '\u0427', 'Sh': '\u0428', 'SH': '\u0428', 'Yu': '\u042E', 'YU': '\u042E', 'Ya': '\u042F', 'YA': '\u042F', // majuscules 'A': '\u0410', 'B': '\u0411', 'V': '\u0412', 'W': '\u0412', 'G': '\u0413', 'D': '\u0414', 'E': '\u0415', 'Z': '\u0417', 'I': '\u0418', 'J': '\u0419', 'K': '\u041A', 'L': '\u041B', 'M': '\u041C', 'N': '\u041D', 'O': '\u041E', 'P': '\u041F', 'R': '\u0420', 'S': '\u0421', 'T': '\u0422', 'U': '\u0423', 'F': '\u0424', 'Y': '\u042B', '`E': '\u042D', // minuscules 'zh': '\u0436', 'x': '\u0445', 'kh': '\u0445', 'h': '\u0445', 'ts': '\u0446', 'shch': '\u0449', 'ch': '\u0447', 'sh': '\u0448', 'yu': '\u044E', 'ya': '\u044F', 'yo': '\u0451', // minuscules '`e': '\u044D', 'a': '\u0430', 'b': '\u0431', 'v': '\u0432', 'w': '\u0432', 'g': '\u0433', 'd': '\u0434', 'e': '\u0435', 'z': '\u0437', 'i': '\u0438', 'j': '\u0439', 'k': '\u043A', 'l': '\u043B', 'm': '\u043C', 'n': '\u043D', 'o': '\u043E', 'p': '\u043F', 'r': '\u0440', 's': '\u0441', 't': '\u0442', 'u': '\u0443', 'f': '\u0444', 'y': '\u044B', // autres '`': '\u044A', "'": '\u044C' }; //----------------------------------------------------------------------------- // main var elTextIn; var elTextOut; var max; function onLoad () { elTextIn = document.getElementById ('textIn'); elTextOut = document.getElementById ('textOut'); max = 0; for (i in translit_chars) { if (i.length > max) max = i.length; } // see if we have some initial text passed from the URL var href = location.href; var argp = '?text='; var i = href.indexOf (argp); if (i > 0) { var iniText = href.substring (i + argp.length); elTextIn.value = unescape (iniText); translit (); elTextOut.select (); // if not, focus input text area } else { elTextIn.focus (); } } function translit () { var textIn = elTextIn.value; var textOut = ''; var l = textIn.length; var c, p, o, f, n; var i = 0; while (i < l) { f = false; // \Q ... \E escapes if (i+4 < l && textIn.substring (i, i+2) == "\\Q") { n = textIn.indexOf ("\\E", i+2); if (n > 0) { textOut += textIn.substring (i+2, n); i = n+2; continue; } } for (c = max; c > 0; c--) { if (i+c <= l) { p = textIn.substring (i, i+c); o = translit_chars[p]; if (o != null) { textOut += o; i += c; f = true; break; } } } if (!f) { textOut += textIn.substring (i, i+1); i++; } } elTextOut.value = textOut; } //-----------------------------------------------------------------------------