Латинический шовинизм в модуле freelinking для Drupal

Apr 21, 2012 16:55


Моему возмущению нет предела.

Заканчиваю (в основном, на работе в перерыве) подключение запланированных модулей к Маоизм.ру. Последние несколько дней провозился с организацией Wiki; думал, потом подключу плагины к WYSIWYG-редактору, и можно будет переходить к заполнению таксономии и тонкой настройке. Ан нет, упёрся в тупик на финальной стадии: фрилинкинг не работает и всё тут. Речь об упрощённой организации ссылок: ну, типа, когда вы в Википедии набираете что-то вроде [[Российская маоистская партия]], движок автоматически подставляет ссылку на соответствующую статью. А тут ни черта не подставляет. Вот что бы стал делать простой смертный? Погуглил бы. Погуглил. Не нашёл ничего.

Сегодня занялся этим дома, где у меня открыт доступ к PHP-коду движка. Несколько диагностических сообщений - и вот она, истина. Ларчик просто открывался: /(? в модуле freelinking. Чувствуете подвох? Да, квантификатор ? относится тут только к двоеточию, а не к названию плагина вместе с двоеточием, как должно быть в соответствии с описанием модуля. То есть вот это будет работать - [[Path:Российская маоистская партия]]. И у западных пользователей работает без названия плагина, как полагается,- пока то, что они пишут в скобках, начинается с буквы из английской латиницы (или цифры). Регулярка принимает это выражение, как будто оно начинается с корректного указания плагина, дальнейший код не видит в совпадающем фрагменте двоеточия, заключает, что плагин не указан, подставляет умолчательный и всё тип-топ. …Пока какой-нибудь перфекционист, мой брат по духу, не вздумает написать, например, [[Škoda Holding]]. Тогда его ждёт сюрприз - фрилинкинг не сработает, ссылка не подставится.

Оказывается, эта проблема обсуждалась с участием кириллицепишущего и шведа. В результате родился патч, в коем регулярка заменяется на /(?. Сделайте меня развидеть это! Она работает, но, вероятно, пропускает и множество некорректных вариантов. Не разумею, как можно сразу не углядеть, что это полностью эквивалентно более простому /(?, то есть чему угодно в паре квадратных скобок вообще? Я так понимаю, у патчеров в мозгах витала нездоровая мысль, что пайп (|) в регулярке эквивалентен возможному пайпу в синтаксисе фрилинкинга.

Придётся зарегистрироваться, чтобы рассказать им, как они неправы. Мне видится, что правильно было бы так: /(?. Испытано, работает.

drupal, программирование, Web-программирование, некомпетентность

Previous post Next post
Up