Строка 35: |
Строка 35: |
| | | |
| // Скрытие преформатированных тегов и прочих тегов, не подлежащих викификации: | | // Скрытие преформатированных тегов и прочих тегов, не подлежащих викификации: |
− | s = hideTags (s, hidden, 'nowiki', 'templatedata', | + | s = hideTags (s, 'nowiki', 'templatedata', |
| 'pre', 'source', 'syntaxhighlight', 'code', 'kbd', 'tt', 'gallery', | | 'pre', 'source', 'syntaxhighlight', 'code', 'kbd', 'tt', 'gallery', |
| 'graph', 'svgcode', 'graphviz', 'mscgen', 'score', 'math', 'hiero', 'timeline', | | 'graph', 'svgcode', 'graphviz', 'mscgen', 'score', 'math', 'hiero', 'timeline', |
Строка 43: |
Строка 43: |
| s = r (s, /(IS[BS]N):?\s*([\s\d‒−—-]{8,17}[X\d])/ig, '{{$1|$2}}'); // -- ISBN/ISSN теперь в шаблон. | | s = r (s, /(IS[BS]N):?\s*([\s\d‒−—-]{8,17}[X\d])/ig, '{{$1|$2}}'); // -- ISBN/ISSN теперь в шаблон. |
| | | |
− | s = hide (s, /\{\{[\s\S]+?}}/g, hidden);// — шаблоны. | + | s = hide (s, /\{\{[\s\S]+?}}/g);// — шаблоны. |
− | s = hide (s, /^ .*/mg, hidden); // — преформатированный текст. | + | s = hide (s, /^ .*/mg); // — преформатированный текст. |
| | | |
| s = r (s, /<\s*a\s+href\s*=\s*(["'])\s*https?:\/\/in(?:formatorium)?\.wiki(?:\/wiki)?\/(\S+?)\s*\1\s*>(.+?)<\s*\/a\s*>/gi, wikifyInternalLinks); | | s = r (s, /<\s*a\s+href\s*=\s*(["'])\s*https?:\/\/in(?:formatorium)?\.wiki(?:\/wiki)?\/(\S+?)\s*\1\s*>(.+?)<\s*\/a\s*>/gi, wikifyInternalLinks); |
Строка 51: |
Строка 51: |
| s = r (s, /\[\s*(https?:\/\/[^\]\s]+)\s*([^\]]*)\]/gi, internalise); // — замена внешних ссылок на загруженные документы. | | s = r (s, /\[\s*(https?:\/\/[^\]\s]+)\s*([^\]]*)\]/gi, internalise); // — замена внешних ссылок на загруженные документы. |
| | | |
− | s = hide (s, /(?:https?|ftp|news|nntp|telnet|irc|gopher|magnet):\/\/[^\s\[\]<>"]+ ?/gi, hidden); // — гиперссылки. | + | s = hide (s, /(?:https?|ftp|news|nntp|telnet|irc|gopher|magnet):\/\/[^\s\[\]<>"]+ ?/gi); // — гиперссылки. |
− | s = hide (s, /^#(?:redirect|перенапр(авление)?)/i, hidden); // — перенаправления. | + | s = hide (s, /^#(?:redirect|перенапр(авление)?)/i); // — перенаправления. |
| | | |
| s = r (s, / +(\n|\r)/g, '$1'); // -- пробелы в конце строки. | | s = r (s, / +(\n|\r)/g, '$1'); // -- пробелы в конце строки. |
Строка 80: |
Строка 80: |
| s = r (s, /\[\[ *([a-zA-Zа-яёА-ЯЁ\u00A0-\u00FF %!\"$&'()*,\-.\/0-9:;=?\\@\^_`’~]+) *\| *([^|[\]]+) *\]\]([a-zа-яё]+)/g, '[[$1|$2$3]]'); // -- ". | | s = r (s, /\[\[ *([a-zA-Zа-яёА-ЯЁ\u00A0-\u00FF %!\"$&'()*,\-.\/0-9:;=?\\@\^_`’~]+) *\| *([^|[\]]+) *\]\]([a-zа-яё]+)/g, '[[$1|$2$3]]'); // -- ". |
| | | |
− | s = hide (s, /\[\[[^\]|]+/g, hidden); // -- скрытие викиссылок. | + | s = hide (s, /\[\[[^\]|]+/g); // -- скрытие викиссылок. |
| | | |
| // Все теги в <> надо обработать здесь: | | // Все теги в <> надо обработать здесь: |
Строка 131: |
Строка 131: |
| s = r (s, /((?:<ref\sname=".+?">[\s\S]+?<\/ref>)+)\s*$/, '<references>$1</references>\n'); // -- раздел сносок. | | s = r (s, /((?:<ref\sname=".+?">[\s\S]+?<\/ref>)+)\s*$/, '<references>$1</references>\n'); // -- раздел сносок. |
| | | |
− | s = hide(s, /<[a-z][^>]*?>/gi, hidden); // -- hide all HTML tags. | + | s = hide(s, /<[a-z][^>]*?>/gi); // -- hide all HTML tags. |
| | | |
− | s = hide(s, /^(?:{\||\|-).*/mg, hidden); // -- таблицы и ряды. | + | s = hide(s, /^(?:{\||\|-).*/mg); // -- таблицы и ряды. |
− | s = hide(s, /(?:^\||^!|!!|\|\|) *[a-z]+=[^|]+\|(?!\|)/mgi, hidden); // -- стили ячеек. | + | s = hide(s, /(?:^\||^!|!!|\|\|) *[a-z]+=[^|]+\|(?!\|)/mgi); // -- стили ячеек. |
− | s = hide(s, /\| +/g, hidden); // -- форматированные ячейки. | + | s = hide(s, /\| +/g); // -- форматированные ячейки. |
| | | |
| // Двойные пробелы: | | // Двойные пробелы: |
Строка 262: |
Строка 262: |
| | | |
| // Скрытие фрагментов путём окружения \x01 и \x02: | | // Скрытие фрагментов путём окружения \x01 и \x02: |
− | function hide (txt, re, hidden) { | + | function hide (txt, re) { |
| console.log ('Hiding ' + re); | | console.log ('Hiding ' + re); |
| return txt.replace (re, function (s) {return '\x01' + hidden.push (s) + '\x02'}); | | return txt.replace (re, function (s) {return '\x01' + hidden.push (s) + '\x02'}); |
Строка 271: |
Строка 271: |
| var args = Array.prototype.slice.call (arguments); | | var args = Array.prototype.slice.call (arguments); |
| var txt = args.shift () | | var txt = args.shift () |
− | var hidden = args.shift ()
| |
| var tags = args.join ('|'); | | var tags = args.join ('|'); |
| return hide (txt, RegExp ('<(' + tags + ')( [^>]+)?>[\\s\\S]+?<\\/\\1>', 'gi')); | | return hide (txt, RegExp ('<(' + tags + ')( [^>]+)?>[\\s\\S]+?<\\/\\1>', 'gi')); |
− | } // -- function hideTags (txt, tags, hidden) | + | } // -- function hideTags (txt, tags) |
| | | |
| // Восстановление скрытого: | | // Восстановление скрытого: |
− | function restore (/* String */ s, /* Array */ hidden) { | + | function restore (/* String */ s) { |
| if ('0'.replace('0', '$$') === '$') { // -- $ в регэксах, как всегда, IE особенный. | | if ('0'.replace('0', '$$') === '$') { // -- $ в регэксах, как всегда, IE особенный. |
| for (i = 0; i < hidden.length; i++) { | | for (i = 0; i < hidden.length; i++) { |
Строка 288: |
Строка 287: |
| } | | } |
| return s; | | return s; |
− | } // -- function restore (/* String */ s, /* Array */ hidden) | + | } // -- function restore (/* String */ s) |
| | | |
| // Эти функции ничего не делают в браузере, но реализованы в серверном викификаторе: | | // Эти функции ничего не делают в браузере, но реализованы в серверном викификаторе: |