Типографический фильтр

Как уже сообщалось, был разработан модуль с фильтром типографического толку. Модуль называется typofilter и вводит одноименный фильтр в систему фильтрации содержимого Drupal 6. В качестве типографического движка используется несколько измененный «Типограф». Модуль я назвал Lite-версией, поскольку в нем меньше типографических правил, чем в оригинале. Текущая версия модуля — 0.6. Ниже приводится краткое описание сделанного.

Модуль не создает новых таблиц в БД, но вводит две переменные (для хранения опций фильтрации и пользовательских сейф-блоков). Работает все в UTF-8. Для работы в CP1251 нужно однократно конвертнуть файлы модуля в эту кодировку с помощью iconv или других известных вам способов.

Настройка модуля осуществляется со страницы админки (admin/settings/typofilter).

Пользователь может изменять (вкл./выкл.) опции фильтрации и добавлять безопасные блоки, внутри которых фильтр работать не будет. Блоки следует добавлять аналогично перечисленным на странице админки встроенным блокам, т.е. с использованием регулярных выражений, если они требуются.

Опции фильтрации:
 — замена (c) на ©;
 — замена (r) на ®;
 — замена (tm) на ™;
 — замена нескольких точек на многоточия;
 — замена +- на ±;
 — исправление кавычек;
 — исправление вложенных кавычек;
 — исправление тире;
 — короткое тире в числовых диапазонах;
 — удаление пробелов между числом и знаком процента.

Движок типографа подключается отдельным файлом typofilter.engine.inc (включен в архив).
Изменения в исходниках движка:
 — файл переконвертирован в UTF-8, соответственно, изменено выражение для слов ($word=…), удален параметр кодировки и ликвидированы вызовы iconv;
 — класс типографа переименован в Typographus_Lite_UTF8;
 — к дефолтным сейф-блокам добавлен вымышленный тег <safeblock> для явного указания выключения фильтрации в блоке;
 — заполненный массив дефолтных сейф-блоков вынесен за пределы класса, в классе оставлен пустой по-умолчанию массив, заполняемый при вызове;
 — из фильтрации удалены все правила кроме перечисленных в опциях выше;
 — функции process() и typo_text() теперь вторым параметром принимают массив включенных опций фильтрации;
 — в код функции добавлены соответствующие условные операторы.

Инсталляция модуля

  1. Для начала убедитесь, что у вас именно drupal 6.
  2. Скачайте исходники модуля и залейте в директорию sites/all/modules (относительно корня вашего сайта).
  3. На странице admin/build/modules активируйте модуль typofilter.
  4. Настройте опции фильтрации и добавьте сейф-блоки на странице admin/settings/typofilter.
  5. На странице admin/settings/filters разрешите фильтр в нужных форматах ввода.
  6. Если вы используете фильтр для формата «Filtered HTML», убедитесь, что используемые сейф-блоки разрешены.
  7. Если вы используете фильтр для оформления красивых листингов программ, например, GeSHi, убедитесь, что Typofilter имеет меньший вес. И не забудьте добавить теги фильтра в сейф-блоки.

Модуль носит версию 0.6, потому что некоторые вещи можно сделать более гибким и изящным способом. Также правильным тоном было бы сделать все интерфейсные элементы англоязычными, использовать функцию t() и приложить файл перевода. Но я пока использую все как есть, а дальше видно будет. Если кто хочет взять и изменить — очень хорошо.

Архив с модулем.
typofilter 0.5 (предыдущая версия).

Также прошу обратить внимание на скрипт Typofilter.js, интегрирующийся в WYSIWYG-редакторы и типографирующий текст прямо в браузере, без отправки на сервер.

Прикрепленный файлРазмер
typofilter.zip7.69 кб
typofilter.0.5.zip7.82 кб
graker
Аватар пользователя graker

Есть небольшая проблема - из-за встроенного в Друпал удаления пробелов. Проблема с прямой речью: если нод начинается с прямой речи, то пробел перед дефисом будет автоматически удален системой и тогда дефис на тире не заменится.

Поэтому будьте внимательны, начиная нод с прямой речи.

Alinaki (гость)
Аватар пользователя Alinaki

Спасибо! Освободили меня от работы )))
А какая версия вышеупомянутого типографа использована, обновляли ли?

graker
Аватар пользователя graker

Ne za 4to :)
Pro versiju - ne pomnu, ispolzoval tu, kotoraja bila dostupna na moment napisanija etoj stranici. S teh por ne znaju, obnovljalsja li tipograf. V etoj versii modula kstati est neto4nost', ja ee ispravil no vilojit ne uspel. Viloju kogd vernus iz otpuska, eto budet v sledujushee voskresenie. Zahodite, esli interesno.

graker
Аватар пользователя graker

Вышла версия 0.6 фильтра. Список изменений.

Alinaki (гость)
Аватар пользователя Alinaki

Спасибо! Оттестирую эту версию. Просто проблем оказалось больше, чем надо - некоторые тексты - в основном, скопированные из интернета - клали типограф на лопатки так сильно, что весь текст пропадал. Я слил обновленную версию, буду дебажить. Заодно с оригинальным тоже поработаю.

graker
Аватар пользователя graker

Понятно. Я полномасштабно не тестировал - мне только для собственных текстов надо пока что. Несколько мелких недочетов видел, исправил, какие-то еще остались наверное. Но так чтобы целые тексты исчезали - у меня не получалось :) Точнее, получалось, но только когда я сейфблоки тестировал.

Но вы пишите, пожалуйста, об ошибках, буду исправлять по ходу дела.

Alinaki (гость)
Аватар пользователя Alinaki

Таки имеется как минимум одна проблема: если я пишу 20" (что есть 20 дюймов), он ставит русскую закрывающую кавычку.

Ещё у меня всплыло несколько проблем, но я пока не пойму - я в них виноват, или нет... Отпишусь.

graker
Аватар пользователя graker

Это наверное потому что я цифры вставил в набор, на границе которого кавычки обрабатываются. Надо подумать, как это лучше поправить. С одной стороны, заключать кавычку в сейфблок неудобно, а с другой - нужно как-то обрабатывать числовые названия. Например, сериал "24" и т.п. :)

Гость (гость)
Аватар пользователя Гость

Спасибо за фильтр!

graker
Аватар пользователя graker

Пользуйтесь на здоровье.

Алексей alladdin (гость)
Аватар пользователя Алексей alladdin

Добрый день,

спасибо большое за ваш модуль, очень рад, что он есть, пользуюсь им на всех сайтах уже давно.
Возникла небольшая проблема. Вот эта часть кода
$rules_main['~ +(?:--?|—|&mdash;)(?=\s)~'] = $sym['nbsp'].$sym['mdash'];
вставляет символ пробела nbsp, а хотелось бы, чтобы вставляла обычный пробел " ". Помогите пожалуйста решить этот вопрос.

Спасибо

graker
Аватар пользователя graker

Ну так вы $sym['nbsp'] замените пробелом (' ') — и все будет.
$rules_main['~ +(?:--?|—|&mdash;)(?=\s)~'] = ' '.$sym['mdash'];

А вообще, я этим модулем больше не пользуюсь (а значит — не поддерживаю), перешел на Typofilter.js.

Алексей alladdin (гость)
Аватар пользователя Алексей alladdin

Спасибо. Что-то я не подумал, :)

Про Typofilter.js
Насколько я понял, Typofilter.js - это скрипт, который цепляется к редактору. То есть если сейчас отключить модуль и подключить джава-скрипт, то нужно пересохранять все тексты, чтобы в них все правильно расставилось?

graker
Аватар пользователя graker

Ага, правильно, все тексты испортятся :)

UksusoFF (гость)
Аватар пользователя UksusoFF

А под семерку не планируется фильтр?

graker
Аватар пользователя graker

UksusoFF пишет:
А под семерку не планируется фильтр?
Долгая практика применения фильтра привела меня к выводу, что использовать Typofilter.js круче и эффективнее. Поэтому — нет, не планируется.
Кстати, Typofilter.js можно прикручивать к редакторам как в шестерке, так и в семерке.

UksusoFF (гость)
Аватар пользователя UksusoFF

graker пишет:
Долгая практика применения фильтра привела меня к выводу, что использовать Typofilter.js круче и эффективнее. Поэтому — нет, не планируется.
Кстати, Typofilter.js можно прикручивать к редакторам как в шестерке, так и в семерке.

Жаль, просто есть некоторое количество пользователей которые будут публиковать новости, то им хрен объяснишь почему два пробела или пробел перед точкой это не торт...

graker
Аватар пользователя graker

Попробуй сам, вроде фильтры под семерку несложно портировать.
Только по мне так лучше жаваскрипт. С фильтром проблемы когда возникают — запаришься объяснять, что надо вложенные кривые кавычки выискивать и т.п.

UksusoFF (гость)
Аватар пользователя UksusoFF

да там вложеных кавычек не придвидится =) ок попробуем на досуге

Отправить комментарий

CAPTCHA
Пройдите, пожалуйста, проверку. Она нужна, чтобы отличать людей от спам-роботов. А если не хотите проходить эту проверку регулярно — зарегистрируйтесь.
Image CAPTCHA
Введите цифры, изображенные на картинке (без пробелов).