МедияУики:Common.js/Wikificator.js: Разлика между версии
Изтрито е съдържание Добавено е съдържание
копиране от Уикипедия |
ползване на файла от Уикипедия |
||
Ред 1: | Ред 1: | ||
document.write('<script type="text/javascript" src="http://bg.wikipedia.org/w/index.php?title=%D0%9C%D0%B5%D0%B4%D0%B8%D1%8F%D0%A3%D0%B8%D0%BA%D0%B8:Common.js/Wikificator&action=raw&ctype=text/javascript"><\/scr'+'ipt>'); |
|||
var txt; // текста, който ще се обработва от Уикификатора |
|||
// BEGIN код от [[:ru:MediaWiki:Summary]], вижте [[:ru:Википедия:Викификатор]] |
|||
function obrabotka(bds) { |
|||
check_regexp();//Проверяем поддерживаются ли рег. выражения |
|||
document.editform.wpTextbox1.focus(); |
|||
var txtarea = document.editform.wpTextbox1; |
|||
if(document.selection && !is_gecko)/* IE*/ { |
|||
txt = " "+document.selection.createRange().text; |
|||
if (txt == " ") {all_text(bds);} //Если ничего не выделено |
|||
else{ |
|||
zamena(bds); |
|||
txt = txt.substr (1, txt.length-1); |
|||
document.selection.createRange().text = txt; |
|||
} |
|||
} else if((txtarea.selectionStart || txtarea.selectionStart == '0')&&(navigator.productSub>20031000)) /*Gecko-браузеры старше 10.2003*/ { |
|||
var startPos = txtarea.selectionStart; |
|||
var endPos = txtarea.selectionEnd; |
|||
var scrollTop=txtarea.scrollTop; |
|||
txt = " "+(txtarea.value).substring(startPos, endPos); |
|||
if (txt == " ") {all_text(bds);} //Если ничего не выделено |
|||
else{ |
|||
zamena(bds); |
|||
txt = txt.substr (1, txt.length-1); |
|||
txtarea.value = txtarea.value.substring(0, startPos) + txt + txtarea.value.substring(endPos, txtarea.value.length); |
|||
txtarea.focus(); |
|||
} |
|||
} else if (confirm("Уикификатор ще обработи ЦЕЛИЯ текст в статията. Да продължи ли?")) { |
|||
all_text(bds); // Прочие браузеры |
|||
} |
|||
} |
|||
function all_text(bds) { //Обрабатываем текст целиком |
|||
txt = " "+document.editform.wpTextbox1.value; |
|||
zamena(bds); |
|||
txt = txt.substr (1, txt.length-1); |
|||
document.editform.wpTextbox1.value=txt; |
|||
} |
|||
function check_regexp() { //Проверяем поддерживаются ли рег. выражения |
|||
if ("код".replace(/д/g, "т") != "кот"){ |
|||
alert("Уикификатор не може да работи с вашия браузър");exit; |
|||
} |
|||
var b_ver=navigator.appVersion.substr(0, 1); |
|||
if (navigator.appName=="Netscape"&&b_ver<5){ |
|||
alert("Уикификатор не може да работи с браузър Netscape 4.x или по-стари версии");exit; |
|||
} |
|||
} |
|||
function zamena(bds) { |
|||
if (bds) { zamena_5ko(); return; } |
|||
// Заменяем теги <b>, <strong> и <i>, <em> на ''' и '' |
|||
txt = txt.replace(/\<\/?(b|strong)\>/g, "\'\'\'"); |
|||
txt = txt.replace(/\<\/?(i|em)\>/g, "\'\'"); |
|||
//Исключаем из обработки всё, что находится между тегами <nowiki> и </nowiki> |
|||
i_nowiki=0; |
|||
a_nowiki=txt.match(/\<nowiki\>(.+)\<\/nowiki\>/g) |
|||
r_nowiki=/\<nowiki\>(.+)\<\/nowiki\>/; |
|||
while (r_nowiki.test(txt)) |
|||
{ |
|||
i_nowiki++; |
|||
txt = txt.replace(r_nowiki, "\x03"+i_nowiki+"\x04"); |
|||
} |
|||
//Исключаем из обработки всё, что находится между тегами <math> и </math> |
|||
i_math=0; |
|||
a_math=txt.match(/\<math\>(.+)\<\/math\>/g) |
|||
r_math=/\<math\>(.+)\<\/math\>/; |
|||
while (r_math.test(txt)) |
|||
{ |
|||
i_math++; |
|||
txt = txt.replace(r_math, "\x05"+i_math+"\x06"); |
|||
} |
|||
//Исключаем из обработки строки, начинающиеся с пробела |
|||
f_space=txt.substr (0, 1); |
|||
txt = txt.substr (1, txt.length-1); |
|||
i_space=0; |
|||
a_space=txt.match(/^( )(.+)$/mg) |
|||
r_space=/^( )(.+)$/m; |
|||
while (r_space.test(txt)) |
|||
{ |
|||
i_space++; |
|||
txt = txt.replace(r_space, "\x07"+i_space+"\x08"); |
|||
} |
|||
txt=f_space+txt; |
|||
//Исключаем всё между [[ и ]] |
|||
i_links=0; |
|||
a_links=txt.match(/(\[\[)(.*?)(\]\])/g) |
|||
r_links=/(\[\[)(.*?)(\]\])/; |
|||
while (r_links.test(txt)) |
|||
{ |
|||
i_links++; |
|||
txt = txt.replace(r_links, "\x15"+i_links+"\x16"); |
|||
} |
|||
//Исключаем из обработки весь текст в кавычках после знака "=" |
|||
i_equal=0; |
|||
a_equal=txt.match(/(=)(\s?)(\")(.*?)(\")/g) |
|||
r_equal=/(=)(\s?)(\")(.*?)(\")/; |
|||
while (r_equal.test(txt)) |
|||
{ |
|||
i_equal++; |
|||
txt = txt.replace(r_equal, "\x11"+i_equal+"\x14"); |
|||
} |
|||
//Заменяем обычными кавычками сочетания << и >>. |
|||
txt = txt.replace(/(\<|\>|\&[lg]t;)\1/g, "\""); |
|||
//Исключаем из обработки прочие HTML-теги ("<" и ">") |
|||
i=0; |
|||
a=txt.match(/<([^>]*)>/g) |
|||
r=/<([^>]*)>/; |
|||
while (r.test(txt)) |
|||
{ |
|||
i++; |
|||
txt = txt.replace(r, "\x01"+i+"\x02"); |
|||
} |
|||
//Заменяем правильные символы на неверные, чтобы ничего не пропустить |
|||
txt = txt.replace(/–/g, "-"); |
|||
txt = txt.replace(/(«|»|“|”|„|\&((la|ra|bd|ld)quo|#132|#147|#148|quot);)/g, "\""); |
|||
// Заменяем "...", … и … на многоточие |
|||
txt = txt.replace(/(\.{3}|\&(hellip|#133);)/g, '…'); |
|||
// Обработчик знака градуса и "+-" |
|||
txt = txt.replace(/(\+[--])/g, "±"); |
|||
txt=txt.replace(/([\s\>\(\*\"]|^)\-([0-9\.\,]+)\s?\^?\s?([FC])(?=[\s\"\.\,;\<]|$)/g, "$1-$2\u00A0\u00B0$3"); |
|||
txt=txt.replace(/([\s\>\(\*\"]|^)\+([0-9\.\,]+)\s?\^?\s?([FC])(?=[\s\.\,;\<\"]|$)/g, "$1+$2\u00A0\u00B0$3"); |
|||
txt=txt.replace(/([\s\>\(\*\"]|^)\±([0-9\.\,]+)\s?\^?\s?([FC])(?=[\s\.\,;\<\"]|$)/g, "$1±$2\u00A0\u00B0$3"); |
|||
txt=txt.replace(/\°/g, "\u00B0"); |
|||
// Обработчик минуса |
|||
txt=txt.replace(/([sup\>|sub\>|\s])(-)(\d)/g, "$1-$3"); |
|||
txt = txt.replace(/(\d )(-)( \d)/g, "$1-$3"); |
|||
// Заменяем кавычки |
|||
//(") с „“ |
|||
txt = txt.replace(/([\x01-(\s\|\"])(\")([^\"]{0,})([^\s\"(])(\")/g, "$1„\$3\$4“"); |
|||
// Кавычки внутри кавычек |
|||
if (/"/.test(txt)) |
|||
{ |
|||
txt = txt.replace(/([\x01(\s\"])(\")([^\"]{0,})([^\s\"(])(\")/g, "\$1„\$3\$4“"); |
|||
while (/(„)([^“]*)(„)/.test(txt)) |
|||
txt = txt.replace(/(„)([^“]*)(„)([^“]*)(“)/g, "\$1\$2«\$4»"); |
|||
} |
|||
// Заменяем " - " на тире |
|||
txt = txt.replace(/( |\s)-{1,2} /g,'$1\u2014 '); |
|||
txt = txt.replace (/^- /g,"\u2014 "); |
|||
txt = txt.replace(/(\d)--(\d)/g, "$1–$2"); |
|||
txt = txt.replace(/(^|\s)(\d{4})-(\d{4})($|\s|\.|,)/mg, "$1$2–$3$4"); |
|||
txt = txt.replace(/(^|\s)([IVXLCDM]+)-([IVXLCDM]+)($|\s|\.|,)/img, "$1$2–$3$4"); |
|||
txt = txt.replace(/--/g, "—"); |
|||
// Спец-значки ©, ®, ™, § и €. |
|||
txt = txt.replace(/(\((c|с)\)|\©)/gi, "©"); |
|||
txt = txt.replace(/(\(r\)|\®)/gi, "®"); |
|||
txt = txt.replace(/(\((tm|тм)\)|\™)/gi, "™"); |
|||
txt = txt.replace(/(\(p\)|\§)/gi, "\u00A7"); |
|||
txt = txt.replace (/\€/gi, "€"); |
|||
// Вставляем пропущенные и убираем лишние пробелы |
|||
txt=txt.replace(/([А-Я]\.)([А-Я]\.)([А-Я][а-я])/g, "$1 $2 $3"); |
|||
txt=txt.replace(/([А-Я]\.)([А-Я]\.)/g, "$1 $2"); |
|||
txt=txt.replace(/^([#\*])([\*#]*)([\[\"\(\„\w\dа-яё])/mg, "$1$2 $3"); |
|||
txt=txt.replace(/^(=+)([^\s^=])([^=]+)([^\s^=])(=+)/mg, "$1 $2$3$4 $5"); |
|||
txt=txt.replace(/([а-я])(\.)([А-ЯA-Z])/g, "$1$2 $3"); |
|||
txt = txt.replace(/([а-яa-z\)\»\“\"\]])(\s*)(\,)([а-яa-z\(\«\„\"\[])/g, "$1$3 $4"); |
|||
txt = txt.replace(/([а-яa-z\)\»\“\"\]])(\s)([\,\;])(\s)([а-яa-z\(\«\„\"\[])/g, "$1$3 $5"); |
|||
txt = txt.replace(/(\d)(\s)([%‰])/g, "$1$3"); |
|||
//Убираем двойные пробелы. |
|||
txt = txt.substr (1, txt.length-1); |
|||
txt=txt.replace(/^(?! )(.*?)( {2,})(\S)/mg, "$1 $3"); |
|||
txt=" "+txt; |
|||
//Возвращаем обратно строки, начинающиеся с пробела. |
|||
i_space=0; |
|||
r_space=/\x07([0-9]*)\x08/; |
|||
while (r_space.test(txt)) |
|||
{ |
|||
i_space++; |
|||
txt = txt.replace(r_space, a_space[i_space-1]); |
|||
} |
|||
//Возвращаем обратно всё, что было между тегами "math". |
|||
i_math=0; |
|||
r_math=/\x05([0-9]*)\x06/; |
|||
while (r_math.test(txt)) |
|||
{ |
|||
i_math++; |
|||
txt = txt.replace(r_math, a_math[i_math-1]); |
|||
} |
|||
//Возвращаем обратно всё, что было между тегами "nowiki". |
|||
i_nowiki=0; |
|||
r_nowiki=/\x03([0-9]*)\x04/; |
|||
while (r_nowiki.test(txt)) |
|||
{ |
|||
i_nowiki++; |
|||
txt = txt.replace(r_nowiki, a_nowiki[i_nowiki-1]); |
|||
} |
|||
//Возвращаем обратно HTML-теги ("<" и ">") |
|||
i=0; |
|||
r=/\x01([0-9]*)\x02/; |
|||
while (r.test(txt)) |
|||
{ |
|||
i++; |
|||
txt = txt.replace(r, a[i-1]); |
|||
} |
|||
//Возвращаем обратно текст между [[ и ]] |
|||
i_links=0; |
|||
r_links=/\x15([0-9]*)\x16/; |
|||
while (r_links.test(txt)) |
|||
{ |
|||
i_links++; |
|||
txt = txt.replace(r_links, a_links[i_links-1]); |
|||
} |
|||
//Возвращаем обратно текст в кавычках после знака "=" |
|||
i_equal=0; |
|||
r_equal=/\x11([0-9]*)\x14/; |
|||
while (r_equal.test(txt)) |
|||
{ |
|||
i_equal++; |
|||
txt = txt.replace(r_equal, a_equal[i_equal-1]); |
|||
} |
|||
} |
|||
// END код от [[:ru:MediaWiki:Summary]] |
|||
function zamena_5ko() { |
|||
//Исключаем из обработки всё ("<" и ">") ѣز bgmaps и др. |
|||
var r=/(?:(\b([0-1]?[0-9]|2[0-4])\.(?:00|30)\b)|(?:\<nowiki\>.+?\<\/nowiki\>)|(\<math\>.+?\<\/math\>)|(&#x?[0-9a-f]+;)|(<([^>]*)>)|(=\s?'.*?')|(=\s?".*?")|(\[\[[^\[\]]+\]\])|((bgmaps|sat)=.*$)|(\[[a-z]+:\/\/[^\]]+\])|\b[a-z0-9\._-]+@[a-z0-9\.-]+)/gmi; |
|||
// Руснаците са хитри, ама ние сме по-хитри: |
|||
var a_petko=txt.match(r); |
|||
txt = txt.replace(r, "\x03\x04\x05"); |
|||
r=/\d+,\d+,\d[\d,]*/g; |
|||
var a_zlatko = txt.match(r); var i=0; |
|||
while (r.test(txt)) { txt = txt.replace(r, a_zlatko[i++].replace(/,/g, '')); } |
|||
// Разделяне: |
|||
r=/([=-]?[^,\.\w][1-9]\d*)(\d{3}\b)/gm; |
|||
while(1) |
|||
{ |
|||
var old = txt; |
|||
txt=txt.replace(r, "$1 $2"); |
|||
if(old == txt) break; |
|||
} |
|||
// Разделител на хилядите: |
|||
r=/(\d) (\d\d\d(?:\D|$))/gm; |
|||
while(1) |
|||
{ |
|||
var old = txt; |
|||
txt=txt.replace(r, "$1 $2"); |
|||
if(old == txt) break; |
|||
} |
|||
// Десетична точка: |
|||
r=/(\d)\.(\d+(?:[-\D\n\r]|$))/gm; |
|||
txt=txt.replace(r, "$1,$2"); |
|||
// Край. |
|||
// Ако е четирицифрено, се пише слято: |
|||
r=/(\b\d) (\d\d\d(?:[^\d&]|$))/gm; |
|||
txt=txt.replace(r, "$1$2"); |
|||
// Всичко обратно: |
|||
i=0; |
|||
r=/\x03\x04\x05/; |
|||
while (r.test(txt)) |
|||
{ |
|||
txt = txt.replace(r, a_petko[i++]); |
|||
} |
|||
} |