Обсуждение Википедии:Викификатор/Архив/2013

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Здесь находятся завершившиеся обсуждения. Просьба не вносить изменений.

Вложенные кавычки[править код]

Следующая фраза не обрабатывается:

 и в своей статье «Бабизм Бабеля в "Красной нови"» (1924)

--Ignatus 15:01, 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 умляутов (например ü [&uuml]) на соответствующие utf cимволы (т.е. ü) викификатором?

С уважением, Amishaa (обс) 22:27, 8 апреля 2011 (UTC)[ответить]

Можно попробовать. Нужно только подумать, не вызовет ли это проблем. — putnik 19:41, 15 июля 2011 (UTC)[ответить]
Проблемы может вызвать: 1) замена для символов, имеющих специальное значение в вики-разметке — например, замена | на |; 2) замена   на юникодовский неразрывный пробел, поскольку браузеры при редактировании страницы потом автоматически заменят его на простой пробел. То есть менять надо только для символов с кодами больше 160 (A0). — Monedula 22:54, 15 июля 2011 (UTC)[ответить]

Вариант решения[править код]

Думаю, стоит все текущие замены символов поменять на что-нибудь универсальное вроде такого:

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)[ответить]
Продолжим. Вот вариант с рекурсивным скрытием:
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)[ответить]

Ошибка при обработке словосочетания «В Чёрной Мезе»[править код]

По состоянию на 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)[ответить]