Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //:name=Utils - Translit :description=Transliterate current target or selection
- /*******************************************************************************
- * @Name : "translit(a, b)" // Имя
- * @Params : str - транслитерируемая строка // Параметры запуска
- typ - [123456]
- system A = 1-диакритика
- system B =(2-Беларусь;3-Болгария;4-Македония;5-Россия;6-Украина)
- Если typ отрицательное - обратная транслитерация
- * @Descrp : Прямая и обратная транслитерация // Описание
- по стандарту ISO 9 или ISO 9:1995 или ГОСТ 7.79-2000 системы А и Б
- * @ExtURL : ru.wikipedia.org/wiki/ISO_9 // Внешний URL
- * #Guid : {E7088033-479F-47EF-A573-BBF3520F493C} // GUID
- * @Exampl : "example()" // Пример использования
- * GPL applies. No warranties XGuest[11.02.2015/03:44:01] translit [ver.1.0.1]
- *******************************************************************************/
- var dia = false;
- //var loc = java.util.Locale.getDefault().getLanguage();
- var prop = project.getProjectProperties();
- var ste = editor.currentEntry;
- if (editor.selectedText){
- var target = editor.selectedText;
- }else{
- var target = editor.getCurrentTranslation();
- }
- var tlcode = prop.getTargetLanguage().getLanguageCode();
- var suplang = ["BE", "BG", "MK", "RU", "UK"];
- if ((/[\u0400-\u04ff]+/ig).test(target)){
- transcode = suplang.indexOf(tlcode) ? suplang.indexOf(tlcode) + 2 : 0 ;
- transcode = dia ? 1 : transcode ;
- }else{
- transcode = suplang.indexOf(tlcode) ? -(suplang.indexOf(tlcode) + 2) : 0 ;
- transcode = dia ? -1 : transcode ;
- }
- exports = function (str, typ) {
- var func = function (typ) {
- /* Function Expression
- * Вспомогательная функция.
- *
- * В ней и хотелось навести порядок.
- *
- * Проверяет направление транслитерации.
- * Предобработка строки (правила из ГОСТ).
- * Возвращает массив из 2 функций:
- * построения таблиц транслитерации.
- * и пост-обработки строки (правила из ГОСТ).
- *
- * @param {Number} typ
- * @return {Array}
- */
- var abs = Math.abs(typ); // Абсолютное значение транслитерации
- if(typ === abs) { // Прямая транслитерация(кирилица в латиницу)
- // Правила транслитерации (из ГОСТ).
- // "i`" только перед согласными в ст. рус. и болг.
- // str = str.replace(/(i(?=.[^аеиоуъ\s]+))/ig, "$1`");
- str = str.replace(/(\u0456(?=.[^\u0430\u0435\u0438\u043E\u0443\u044A\s]+))/ig, "$1`");
- return [ // Возвращаем массив функций
- function (col, row) { // создаем таблицу и RegExp
- var chr; // Символ
- if(chr = col[0] || col[abs]) { // Если символ есть
- trantab[row] = chr; // Добавляем символ в объект преобразования
- regarr.push(row); // Добавляем в массив RegExp
- }
- },
- // функция пост-обработки
- function (str) { // str - транслируемая строка.
- // Правила транслитерации (из ГОСТ).
- return str.replace(/i``/ig, "i`"). // "i`" только перед согласными в ст. рус. и болг.
- replace(/((c)z)(?=[ieyj])/ig, "$2");// "cz" в символ "c"
- }];
- } else { // Обратная транслитерация (латиница в кирилицу)
- str = str.replace(/(c)(?=[ieyj])/ig, "$1z"); // Правило сочетания "cz"
- return [ // Возвращаем массив функций
- function (col, row) { // Создаем таблицу и RegExp
- var chr; // Символа
- if(chr = col[0] || col[abs]) { // Если символ есть
- trantab[chr] = row; // Добавляем символ в объект преобразования
- regarr.push(chr); // Добавляем в массив RegExp
- }
- },
- // функция пост-обработки
- function (str) {return str;}]; // nop - пустая функция.
- }
- }(typ);
- var iso9 = { // Объект описания стандарта
- // Имя - кириллица
- // 0 - общие для всех
- // 1 - диакритика 4 - MK|MKD - Македония
- // 2 - BY|BLR - Беларусь 5 - RU|RUS - Россия
- // 3 - BG|BGR - Болгария 6 - UA|UKR - Украина
- /*-Имя---------0-,-------1--,---2-,---3-,---4-,----5-,---6-*/
- "\u0449": [ "", "\u015D", "","sth", "", "shh","shh"], // "щ"
- "\u044F": [ "", "\u00E2", "ya", "ya", "", "ya", "ya"], // "я"
- "\u0454": [ "", "\u00EA", "", "", "", "", "ye"], // "є"
- "\u0463": [ "", "\u011B", "", "ye", "", "ye", ""], // ять
- "\u0456": [ "", "\u00EC", "i", "i`", "", "i`", "i"], // "і" йота
- "\u0457": [ "", "\u00EF", "", "", "", "", "yi"], // "ї"
- "\u0451": [ "", "\u00EB", "yo", "", "", "yo", ""], // "ё"
- "\u044E": [ "", "\u00FB", "yu", "yu", "", "yu", "yu"], // "ю"
- "\u0436": [ "zh", "\u017E"], // "ж"
- "\u0447": [ "ch", "\u010D"], // "ч"
- "\u0448": [ "sh", "\u0161"], // "ш"
- "\u0473": [ "","f\u0300", "", "fh", "", "fh", ""], // фита
- "\u045F": [ "","d\u0302", "", "", "dh", "", ""], // "џ"
- "\u0491": [ "","g\u0300", "", "", "", "", "g`"], // "ґ"
- "\u0453": [ "", "\u01F5", "", "", "g`", "", ""], // "ѓ"
- "\u0455": [ "", "\u1E91", "", "", "z`", "", ""], // "ѕ"
- "\u045C": [ "", "\u1E31", "", "", "k`", "", ""], // "ќ"
- "\u0459": [ "","l\u0302", "", "", "l`", "", ""], // "љ"
- "\u045A": [ "","n\u0302", "", "", "n`", "", ""], // "њ"
- "\u044D": [ "", "\u00E8", "e`", "", "", "e`", ""], // "э"
- "\u044A": [ "", "\u02BA", "", "a`", "", "``", ""], // "ъ"
- "\u044B": [ "", "y", "y`", "", "", "y`", ""], // "ы"
- "\u045E": [ "", "\u01D4", "u`", "", "", "", ""], // "ў"
- "\u046B": [ "", "\u01CE", "", "o`", "", "", ""], // юс
- "\u0475": [ "", "\u1EF3", "", "yh", "", "yh", ""], // ижица
- "\u0446": [ "cz", "c"], // "ц"
- "\u0430": [ "a"], // "а"
- "\u0431": [ "b"], // "б"
- "\u0432": [ "v"], // "в"
- "\u0433": [ "g"], // "г"
- "\u0434": [ "d"], // "д"
- "\u0435": [ "e"], // "е"
- "\u0437": [ "z"], // "з"
- "\u0438": [ "", "i", "", "i", "i", "i", "y`"], // "и"
- "\u0439": [ "", "j", "j", "j", "", "j", "j"], // "й"
- "\u043A": [ "k"], // "к"
- "\u043B": [ "l"], // "л"
- "\u043C": [ "m"], // "м"
- "\u043D": [ "n"], // "н"
- "\u043E": [ "o"], // "о"
- "\u043F": [ "p"], // "п"
- "\u0440": [ "r"], // "р"
- "\u0441": [ "s"], // "с"
- "\u0442": [ "t"], // "т"
- "\u0443": [ "u"], // "у"
- "\u0444": [ "f"], // "ф"
- "\u0445": [ "x", "h"], // "х"
- "\u044C": [ "", "\u02B9", "`", "`", "", "`", "`"], // "ь"
- "\u0458": [ "","j\u030C", "", "", "j", "", ""], // "ј"
- "\u2019": [ "'", "\u02BC"], // "’"
- "\u2116": [ "#"] // "№"
- }, regarr = [], trantab = {};
- for(var row in iso9) {func[0](iso9[row], row);} // Создание таблицы и массива RegExp
- return func[1]( // функция пост-обработки строки (правила и т.д.)
- str.replace( // Транслитерация
- new RegExp(regarr.join("|"), "gi"), // Создаем RegExp из массива
- function (R) { // CallBack Функция RegExp
- if( // Обработка строки с учетом регистра
- R.toLowerCase() === R) {
- return trantab[R];
- } else {
- return trantab[R.toLowerCase()].toUpperCase();
- }
- }));
- };
- if (! target){
- console.println("Target is empty");
- } else {
- var newtarget = exports(target, transcode)
- if (newtarget == target){
- console.println("Could not transliterate");
- }else{
- if (editor.selectedText){
- editor.insertText(newtarget);
- }else{
- editor.replaceEditText(newtarget);
- }
- console.clear();
- console.println(target + "\n↓\n" + newtarget);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement