Обсуждение Википедии:Викификатор/Архив/2013
Вложенные кавычки
[править код]Следующая фраза не обрабатывается:
и в своей статье «Бабизм Бабеля в "Красной нови"» (1924)
--Ignatus 15:01, 7 февраля 2013 (UTC)
- и в своей статье «Бабизм Бабеля в „Красной нови“» (1924). Что я делаю не так? St. Johann 15:11, 7 февраля 2013 (UTC)
Замена HTML-мнемоник и кодов
[править код]fromCharCode
[править код]Пока что убрана замена
r(/&#(\d+);/g, function(n,a){return String.fromCharCode(a)}) //́
как выяснилось, не все символы заменяются правильно, в частности, & #151;, кстати заменямый в коде ниже. Участник Kalan обещал попробовать исправить. При возвращении это замены перед ней нужно будет вставить
if (wgNamespaceNumber==10) hide('|')// |
чтобы не заменять это в шаблонах (обсуждается выше). — AlexSm 20:05, 3 сентября 2009 (UTC)
Умляуты
[править код]Можно ли добавить замену html умляутов (например ü [ü]) на соответствующие utf cимволы (т.е. ü) викификатором?
С уважением, Amishaa (обс) 22:27, 8 апреля 2011 (UTC)
- Можно попробовать. Нужно только подумать, не вызовет ли это проблем. — putnik 19:41, 15 июля 2011 (UTC)
- Проблемы может вызвать: 1) замена для символов, имеющих специальное значение в вики-разметке — например, замена
|
на|
; 2) замена
на юникодовский неразрывный пробел, поскольку браузеры при редактировании страницы потом автоматически заменят его на простой пробел. То есть менять надо только для символов с кодами больше 160 (A0). — Monedula 22:54, 15 июля 2011 (UTC)
- Проблемы может вызвать: 1) замена для символов, имеющих специальное значение в вики-разметке — например, замена
Вариант решения
[править код]Думаю, стоит все текущие замены символов поменять на что-нибудь универсальное вроде такого:
r(/&(#x[0-9a-f]{2,4}|#[0-9]{3,4}|[0-9a-f]{2,8});/gi, function(s){
var t = document.createElement('textarea')
t.innerHTML = s
var c = t.value
if (c.length == 1 && c.charCodeAt(0) > 127)
return c
return s
}
— putnik 02:41, 7 октября 2011 (UTC)
- Хочу вернуться к этому предложению. На обычном (почти всегда уже викифицированном) тексте оно сильно (3—10 раз) выигрывает по скорости у столбика замен
r(/&#x([0-9a-f]{1,4});/gi, function(n,a){return String.fromCharCode(eval('0x'+a.substr(-4)))});
r(/©/gi,'©');
r(/®/gi,'®');
r(/§/gi,'§');
r(/€/gi,'€');
r(/¥/gi,'¥');
r(/£/gi,'£');
r(/°/gi,'°');
r(/™/gi,'™');
r(/…/gi,'…');
r(/±/gi,'$1±');
- за счёт меньшего количества проходов. Жду возражений ещё пару месяцев. — putnik 21:45, 7 февраля 2013 (UTC)
- Включаю. Для ПИ шаблонов пока замены будут отключена. — putnik 14:46, 27 марта 2013 (UTC)
- Включено. — putnik 02:03, 31 марта 2013 (UTC)
Обработка вложенных шаблонов
[править код]Просьба сопровождающих взглянуть на этот набор правок. Полностью скрывает шаблоны от обработки с учётом их вложенности. Wizardist обс +вкл 16:15, 6 января 2013 (UTC)
- Круто, наконец-то у кого-то дошли руки до этой вечной проблемы. Исходя из того, что интерпретируемые языки для явной работы со строками не очень подходят, я её по-быстрому попробовал переписать (пока толком не тестировал):
function hideTemplates() {
'use strict';
var lvl = 0,
hash = [],
tpl = {},
i = 0,
left,
right;
while (true) {
left = txt.indexOf('{{', i);
right = txt.indexOf('}}', i);
if (left === -1 && right === -1) {
break;
}
if (left !== -1 && (left < right || right === -1)) {
if (!(lvl++)) {
tpl.left = left;
}
i = left + 2;
}
else {
if (!(--lvl)) {
tpl.right = right + 2;
hash.push(tpl);
tpl = {};
lvl = 0;
}
i = right + 2;
}
}
for (i = hash.length - 1; i >= 0; --i) {
tpl = txt.substring(hash[i].left, hash[i].right);
txt = txt.substring(0, hash[i].start) + '\x01' + hidden.push(tpl) + '\x02' + txt.substr(hash[i].end);
}
}
- По замерам в Хроме конкретно этот кусок работает раз в тридцать быстрее. Надо бы потестировать и выкатить. — putnik 16:20, 7 февраля 2013 (UTC)
- Раз уж я в это встрял, то замечу, что хорошо бы ещё протестировать рекурсивное скрытие. Если оно будет не сильно проигрывать по производительности, то выбор очевидно в его пользу, ибо в будущем это даст возможность обработки параметров шаблонов. — putnik 20:48, 7 февраля 2013 (UTC)
- Да, спасибо за оптимизацию цикла, я в общем начал с PoC и потом увлёкся. Параметры шаблонов — это будет бомба :) Wizardist обс +вкл 00:05, 17 марта 2013 (UTC)
- Продолжим. Вот вариант с рекурсивным скрытием:
- Да, спасибо за оптимизацию цикла, я в общем начал с PoC и потом увлёкся. Параметры шаблонов — это будет бомба :) Wizardist обс +вкл 00:05, 17 марта 2013 (UTC)
function hideTemplates() {
'use strict';
var pos = 0,
stack = [],
tpl,
left,
right;
while (true) {
left = txt.indexOf('{{', pos);
right = txt.indexOf('}}', pos);
if (left === -1 && right === -1 && !stack.length) {
break;
}
if (left !== -1 && (left < right || right === -1)) {
stack.push(left);
pos = left + 2;
}
else {
left = stack.pop();
if (typeof left === 'undefined') {
if (right === -1) {
pos += 2;
continue;
}
else {
left = 0;
}
}
if (right === -1) {
right = txt.length;
}
right += 2;
tpl = txt.substring(left, right);
// Сюда можно добавить функцию обработки параметров
txt = txt.substring(0, left) + '\x01' + hidden.push(tpl) + '\x02' + txt.substr(right);
pos = right - tpl.length;
}
}
}
- Работает он сравнимое время, как посчитать точно. я не знаю. — putnik 00:49, 24 марта 2013 (UTC)
- Сделано. — putnik 02:03, 31 марта 2013 (UTC)
Кавычки
[править код]Что это он надумал вытворить с фигурными кавычками? Нам такого не надо. †Йо Асакура† ♠бла-бла♠ 19:49, 25 февраля 2013 (UTC)
- Ответ стандартный: исправьте расстановку кавычек в статье. — AlexSm 19:52, 25 февраля 2013 (UTC)
- То есть это единичный случай? Я уж было обеспокоился. Не люблю нововведений... †Йо Асакура† ♠бла-бла♠ 19:54, 25 февраля 2013 (UTC)
Ошибка при обработке слова «тождественны»
[править код]Викификатор заменяет слово «тождественны» словом «тождетственны», что не есть хорошо. --Bff 23:03, 23 марта 2013 (UTC)
- Исправлено. Это я «накатил» орфографию за последние 9 месяцев. Так и думал, что где-нибудь сломается. — putnik 23:30, 23 марта 2013 (UTC)
- Замена "рождество" на "рождеТство" прекратилась, но осталась замена "пЪедестал" на "пЬеСдестал" вместо "пЬедестал". Kalendar 14:37, 24 марта 2013 (UTC)
- Тоже поправил. — putnik 22:04, 24 марта 2013 (UTC)
- Замена "рождество" на "рождеТство" прекратилась, но осталась замена "пЪедестал" на "пЬеСдестал" вместо "пЬедестал". Kalendar 14:37, 24 марта 2013 (UTC)
Ошибка при обработке словосочетания «В Чёрной Мезе»
[править код]По состоянию на 27.11.2012 текст статьи Half-Life «В Чёрной Мезе» при викификации заменяется на «ВЧёрной Мезе» (замечено при предпросмотре обработанного текста). --Sabunero 13:37, 27 ноября 2012 (UTC)
- Исправлено ([1], [2], [3]). — putnik 09:59, 26 марта 2013 (UTC)
Планируемое обновление
[править код]Наконец дошли руки заняться Викификатором, поэтому заранее предупреждаю, что скоро будет обновление, в которое войдут #Замена HTML-мнемоник и кодов и #Обработка вложенных шаблонов. Заодно добавлен 'use strict'
и в целом код отформатирован более корректно. Текущее состояние можно посмотреть на Гитхабе. Я ещё недельку-две его потестирую и выложу. — putnik 10:39, 25 марта 2013 (UTC)
- Обновил. Очень надеюсь, что не будет проблем. Если будут — откатывайте. — putnik 02:03, 31 марта 2013 (UTC)