משתמש:Ijon/uktr.js
מראה
הערה: לאחר הפרסום, ייתכן שיהיה צורך לנקות את זיכרון המטמון (cache) של הדפדפן כדי להבחין בשינויים.
- פיירפוקס / ספארי: להחזיק את המקש Shift בעת לחיצה על טעינה מחדש (Reload) או ללחוץ על צירוף המקשים Ctrl-F5 או Ctrl-R (במחשב מק: ⌘-R).
- גוגל כרום: ללחוץ על צירוף המקשים Ctrl-Shift-R (במחשב מק: ⌘-Shift-R).
- אדג': להחזיק את המקש Ctrl בעת לחיצה על רענן (Refresh) או ללחוץ על צירוף המקשים Ctrl-F5.
// transliterate any Ukrainian into Hebrew according to the Hebrew Wikipedia's transliteration standards
// actual transliteration logic
function uktr_isvowel(ch) {
return ch.match(/[АЕІОУИаеіоуи]/);
}
function uktr_tr(ch, nikkud, pos, prev, uprev) {
if(uprev == ch)
return ''; // skip double consonants
switch(ch) {
case "Б":
case "б": return 'ב';
case "В":
case "в": return (pos == -1 ? 'ו' : (pos == 1 ? 'ב' : (prev == 'ו' ? 'ב' : 'וו')));
case "Г":
case "г": return 'ה';
case "Ґ":
case "ґ": return 'ג';
case "Д":
case "д": return 'ד';
case "Ж":
case "ж": return "ז'";
case "З":
case "з": return 'ז';
case "Й":
case "й": return (pos == -1 ? 'י' : (pos == 1 ? (prev == 'י' ? '' : 'י' ) : (prev == 'י' ? 'י' :'יי')));
case "К":
case "к": return 'ק';
case "Л":
case "л": return 'ל';
case "М":
case "м": return (pos == 1 ? 'ם' : 'מ');
case "Н":
case "н": return (pos == 1 ? 'ן' : 'נ');
case "П":
case "п": return 'פ';
case "Р":
case "р": return 'ר';
case "С":
case "с": return 'ס';
case "Т":
case "т": return 'ט';
case "Ф":
case "ф": return (pos == 1 ? 'ף' : 'פ');
case "Х":
case "х": return 'ח';
case "Ц":
case "ц": return (pos == 1 ? 'ץ' : 'צ');
case "Ч":
case "ч": return (pos == 1 ? "ץ'" : "צ'");
case "Ш":
case "ш": return 'ש';
case "Щ":
case "щ": return (pos == 1 ? "שץ'" : "שצ'");
case "А":
case "а́":
case "а": return (uktr_isvowel(uprev) ? (pos == 1 ? 'אה' : 'א') : (pos == 1 ? 'ה' : (pos == -1 ? 'א' : '')));
case "Е":
case "е́":
case "е": return (uktr_isvowel(uprev) ? 'א' : (pos == -1 ? 'א' : ''));
case "І":
case "і́":
case "і": return (uktr_isvowel(uprev) ? 'אי' : (pos == -1 ? 'אי' : 'י'));
case "О":
case "о́":
case "о": return (uktr_isvowel(uprev) ? 'או' : (pos == -1 ? 'או' : 'ו'));
case "У":
case "у́":
case "у": return (uktr_isvowel(uprev) ? 'או' : (pos == -1 ? 'או' : 'ו'));
case "Є":
case "є": return (pos == -1 ? 'י' : 'יי');
case "Ї":
case "ї": return (prev == 'י' ? 'י' : 'יי');
case "Ю":
case "Ю́":
case "ю": return 'יו';
case "Я":
case "я́":
case "я": return (pos == 1 ? 'יה' : 'י');
case "Ь":
case "ь":
case "'": return '';
case "И":
case "и́":
case "и": return 'י';
}
return ch;
}
function uktr_do(str, nikkud) {
var out = '';
var buf = str.replace(/\.|,|\?|!́/g,'')
var stress_removal = {'а́':'а','е́':'е','і́':'і', 'о́':'о', 'у́':'у', 'и́':'и', 'є́':'є', 'я́':'я', 'ю́':'ю', 'ї́':'ї'};
//buf = buf.replace(/[а́е́і́о́у́и́є́я́ю́ї́]/g, m => stress_removal[m]);
var words = buf.split(/\s/);
var len = words.length;
var i = 0;
for(i = 0; i < len; i += 1) {
var j = 0;
var prev = '';
var jlen = words[i].length;
for(; j < jlen; j += 1) {
uprev = (j === 0 ? '' : words[i].charAt(j - 1));
prev = uktr_tr(words[i].charAt(j), nikkud, (j === 0 ? -1 : ( j == jlen - 1 ? 1 : 0)), prev, uprev);
out += prev;
}
if(words[i].charAt(jlen - 1) == 'Е' || words[i].charAt(jlen - 1) == 'е' || words[i].charAt(jlen - 1) == 'е́')
out += 'ה';
out += ' ';
}
return out;
}
// Import the jQuery dialog plugin before starting the rest of this script
mw.loader.using(['jquery.ui'], function() {
function renderUKTRDialog( ) {
var $dialog = $( '<div></div>' )
.html(
'תעתוק אוקראינית' +
'<br /><textarea id="uktr_in"></textarea><p /><button id="uktr_go">תעתק!</button><br>תעתיק ללא ניקוד<br><textarea id="uktr_out"></textarea><p />תעתיק מנוקד (בעתיד)<br /><textarea id="uktr_out_nikkud" />'
)
.dialog({
autoOpen: true,
title: 'תעתוק אוקראינית',
width: '70%',
modal: true
});
$('#uktr_go').click(function(){
$('#uktr_out').val(uktr_do($('#uktr_in').val(), false));
$('#uktr_out_nikkud').val(uktr_do($('#uktr_in').val(), true));
});
}
function uktr() {
renderUKTRDialog();
}
$(document).ready( function() {
// Add a link to the toolbox
var link = mw.util.addPortletLink(
'p-tb',
'#',
'תעתוק אוקראינית',
't-prettylinkwidget',
'תעתוק אוטומטי של טקסט אוקראיני לעברית',
'/',
'#t-whatlinkshere'
);
// Create a jQuery object for this link so that we get
// to use jQuery awesomeness like .click() for binding functions to events
// and methods like e.preventDefault();
$(link).click( function( e ) {
// Avoid the browser going to '#'
e.preventDefault();
uktr();
});
});
});