Разработка типографа

Проектирование

С учётом выявленных в предыдущей главе достоинств и недостатков была спроектирована и реализована на языке PHPпрограммная библиотека, автоматизирующая применение правил экранной типографики к текстам, публикуемым в Интернете. Созданный инструмент, в отличие от своих аналогов, имеет гибкую модульную архитектуру, позволяющую разработчикам независимо развивать и совершенствовать данный типограф. Это становится особенно актуальным в связи с тем, что исходный код библиотеки доступен на площадке для совместной разработки – GitHub.

При проектировании библиотеки был выбран объектно-ориентированный подход. Ключевыми объектами, выделенными в процессе проектирования, являются внешний интерфейс типографа (Typo), объект для работы с текстом (Text) и абстрактный класс модуля (Module). UMLдиаграмма основных классов, используемых в библиотеке, представлена на рисунке 3.1. На данный момент реализовано шесть модулей, отвечающих за определённые группы правил экранной типографики:

Core– центральный модуль, организующий взаимодействие остальных модулей. Управляет кодировкой текста, задаёт режим кодирования спецсимволов и т. п.

Html– обрабатываетHTMLтеги в тексте.

Punct– отвечает за правильную расстановку пунктуации в тексте.

Space– управляет расстановкой пробелов.

Nobr– образует неразрывные конструкции.

Url – добавляет гиперссылки.

Диаграмма основных классов библиотеки

Рисунок 3.1. Диаграмма основных классов библиотеки

Процесс обработки текста разделён на стадии, обозначенные заглавными латинскими буквами (A,B,C,…). Каждый из модулей может содержать код, выполняемый в одной или более стадиях с указанием приоритетов выполнения относительно других модулей. Все стадии выполняются последовательно. Если в каком-либо модуле отсутствует код, выполняемый в текущей стадии – этот модуль пропускается.

Не смотря на то, что разработчики модулей вправе сами решать, каким образом разделить код обработки текста на стадии внутри модуля, для стадий «A», «B» и «C» существуют рекомендации, которых следует придерживаться.

На стадии «A» реализуется предварительная фильтрация текста, например замена участков текста (например, HTMLтегов) на специальные блоки с целью их сохранения. На стадии «B» необходимо применить конкретные правила экранной типографики, реализуемые модулем. На стадии «C» с помощью специальных методов осуществляются операции, обратные стадии «A» – восстановление вырезанных участков текста.

Основу обработки текста составляет механизм Perl-совместимых регулярных выражений (PCRE), позволяющий осуществлять гибкий анализ и обработку текстовых конструкций. Для удобства разработки в классеModuleреализованы специальные методы, упрощающие процесс применения правил экранной типографики в конкретных модулях:

Module::applyRulesPregReplace(array $rules, $text = null)
Применяет ассоциативный массив правил $rules, в котором в качестве ключей указаны регулярные выражения, а в качестве значений – строки для замены. Если указан необязательный параметр $text, то правила будут применены не к текущему обрабатываемому тексту, а к значению $text.

Module::applyRulesReplace(array $rules)
Применяет ассоциативный массив правил $rules, в котором в качестве ключей указаны искомые подстроки, а в качестве значений – строки для замены.

 
Оригинал текста доступен для загрузки на странице содержания
< Пред   СОДЕРЖАНИЕ   Скачать   След >