wiki:devel:parser
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| wiki:devel:parser [2025/01/17 12:51] – [Parser (Парсер)] vladpolskiy | wiki:devel:parser [2025/01/17 13:53] (текущий) – [Преобразователь] vladpolskiy | ||
|---|---|---|---|
| Строка 515: | Строка 515: | ||
| ==== Формат данных инструкций ==== | ==== Формат данных инструкций ==== | ||
| - | Следующее показывает | + | [[wiki: |
| Исходный текст (содержит таблицу): | Исходный текст (содержит таблицу): | ||
| Строка 529: | Строка 529: | ||
| < | < | ||
| - | Array | + | Array( |
| - | ( | + | [0] => Array( |
| - | [0] => Array | + | |
| - | | + | |
| [0] => document_start | [0] => document_start | ||
| - | [1] => Array | + | [1] => Array() |
| - | | + | |
| - | | + | |
| [2] => 0 | [2] => 0 | ||
| ) | ) | ||
| - | + | | |
| - | | + | |
| - | | + | |
| [0] => p_open | [0] => p_open | ||
| - | [1] => Array | + | [1] => Array() |
| - | | + | |
| - | | + | |
| [2] => 0 | [2] => 0 | ||
| ) | ) | ||
| - | + | | |
| - | | + | |
| - | | + | |
| [0] => cdata | [0] => cdata | ||
| - | [1] => Array | + | [1] => Array( |
| - | | + | |
| [0] => | [0] => | ||
| abc | abc | ||
| ) | ) | ||
| - | |||
| [2] => 0 | [2] => 0 | ||
| ) | ) | ||
| - | + | | |
| - | | + | |
| - | | + | |
| [0] => p_close | [0] => p_close | ||
| - | [1] => Array | + | [1] => Array() |
| - | | + | |
| - | | + | |
| [2] => 5 | [2] => 5 | ||
| ) | ) | ||
| - | + | | |
| - | | + | |
| - | | + | |
| [0] => table_open | [0] => table_open | ||
| - | [1] => Array | + | [1] => Array( |
| - | | + | |
| [0] => 3 | [0] => 3 | ||
| [1] => 2 | [1] => 2 | ||
| ) | ) | ||
| - | |||
| [2] => 5 | [2] => 5 | ||
| ) | ) | ||
| - | + | | |
| - | | + | |
| - | | + | |
| [0] => tablerow_open | [0] => tablerow_open | ||
| - | [1] => Array | + | [1] => Array() |
| - | | + | |
| - | | + | |
| [2] => 5 | [2] => 5 | ||
| ) | ) | ||
| - | + | | |
| - | | + | |
| - | | + | |
| [0] => tablecell_open | [0] => tablecell_open | ||
| - | [1] => Array | + | [1] => Array( |
| - | | + | |
| [0] => 1 | [0] => 1 | ||
| [1] => left | [1] => left | ||
| ) | ) | ||
| - | |||
| [2] => 5 | [2] => 5 | ||
| ) | ) | ||
| - | + | | |
| - | | + | |
| - | | + | |
| [0] => cdata | [0] => cdata | ||
| - | [1] => Array | + | [1] => Array( |
| - | | + | |
| [0] => Row 0 Col 1 | [0] => Row 0 Col 1 | ||
| ) | ) | ||
| - | |||
| [2] => 7 | [2] => 7 | ||
| ) | ) | ||
| - | + | | |
| - | | + | |
| - | | + | |
| [0] => cdata | [0] => cdata | ||
| - | [1] => Array | + | [1] => Array( |
| - | | + | |
| [0] => | [0] => | ||
| ) | ) | ||
| - | |||
| [2] => 19 | [2] => 19 | ||
| ) | ) | ||
| - | + | | |
| - | | + | |
| - | | + | |
| [0] => tablecell_close | [0] => tablecell_close | ||
| - | [1] => Array | + | [1] => Array() |
| - | | + | |
| - | | + | |
| [2] => 23 | [2] => 23 | ||
| ) | ) | ||
| - | + | | |
| - | | + | |
| - | | + | |
| [0] => tablecell_open | [0] => tablecell_open | ||
| - | [1] => Array | + | [1] => Array( |
| - | | + | |
| [0] => 1 | [0] => 1 | ||
| [1] => left | [1] => left | ||
| ) | ) | ||
| - | |||
| [2] => 23 | [2] => 23 | ||
| ) | ) | ||
| - | + | | |
| - | | + | |
| - | | + | |
| [0] => cdata | [0] => cdata | ||
| - | [1] => Array | + | [1] => Array( |
| - | | + | |
| [0] => Row 0 Col 2 | [0] => Row 0 Col 2 | ||
| ) | ) | ||
| - | |||
| [2] => 24 | [2] => 24 | ||
| ) | ) | ||
| - | + | | |
| - | | + | |
| - | | + | |
| [0] => cdata | [0] => cdata | ||
| - | [1] => Array | + | [1] => Array( |
| - | | + | |
| [0] => | [0] => | ||
| ) | ) | ||
| - | |||
| [2] => 36 | [2] => 36 | ||
| ) | ) | ||
| - | + | | |
| - | | + | |
| - | | + | |
| [0] => tablecell_close | [0] => tablecell_close | ||
| - | [1] => Array | + | [1] => Array() |
| - | | + | |
| - | | + | |
| [2] => 41 | [2] => 41 | ||
| ) | ) | ||
| - | + | | |
| - | | + | |
| - | | + | |
| [0] => tablecell_open | [0] => tablecell_open | ||
| - | [1] => Array | + | [1] => Array( |
| - | | + | |
| [0] => 1 | [0] => 1 | ||
| [1] => left | [1] => left | ||
| ) | ) | ||
| - | |||
| [2] => 41 | [2] => 41 | ||
| ) | ) | ||
| - | + | | |
| - | | + | |
| - | | + | |
| [0] => cdata | [0] => cdata | ||
| - | [1] => Array | + | [1] => Array( |
| - | | + | |
| [0] => Row 0 Col 3 | [0] => Row 0 Col 3 | ||
| ) | ) | ||
| - | |||
| [2] => 42 | [2] => 42 | ||
| ) | ) | ||
| - | + | | |
| - | | + | |
| - | | + | |
| [0] => cdata | [0] => cdata | ||
| - | [1] => Array | + | [1] => Array( |
| - | | + | |
| [0] => | [0] => | ||
| ) | ) | ||
| - | |||
| [2] => 54 | [2] => 54 | ||
| ) | ) | ||
| - | + | | |
| - | | + | |
| - | | + | |
| [0] => tablecell_close | [0] => tablecell_close | ||
| - | [1] => Array | + | [1] => Array() |
| - | | + | |
| - | | + | |
| [2] => 62 | [2] => 62 | ||
| ) | ) | ||
| - | + | | |
| - | | + | |
| - | | + | |
| [0] => tablerow_close | [0] => tablerow_close | ||
| - | [1] => Array | + | [1] => Array() |
| - | | + | |
| - | | + | |
| [2] => 63 | [2] => 63 | ||
| ) | ) | ||
| - | + | | |
| - | | + | |
| - | | + | |
| [0] => tablerow_open | [0] => tablerow_open | ||
| - | [1] => Array | + | [1] => Array() |
| - | | + | |
| - | | + | |
| [2] => 63 | [2] => 63 | ||
| ) | ) | ||
| - | + | | |
| - | | + | |
| - | | + | |
| [0] => tablecell_open | [0] => tablecell_open | ||
| - | [1] => Array | + | [1] => Array( |
| - | | + | |
| [0] => 1 | [0] => 1 | ||
| [1] => left | [1] => left | ||
| ) | ) | ||
| - | |||
| [2] => 63 | [2] => 63 | ||
| ) | ) | ||
| - | + | | |
| - | | + | |
| - | | + | |
| [0] => cdata | [0] => cdata | ||
| - | [1] => Array | + | [1] => Array( |
| - | | + | |
| [0] => Row 1 Col 1 | [0] => Row 1 Col 1 | ||
| ) | ) | ||
| - | |||
| [2] => 65 | [2] => 65 | ||
| ) | ) | ||
| - | + | | |
| - | | + | |
| - | | + | |
| [0] => cdata | [0] => cdata | ||
| - | [1] => Array | + | [1] => Array( |
| - | | + | |
| [0] => | [0] => | ||
| ) | ) | ||
| - | |||
| [2] => 77 | [2] => 77 | ||
| ) | ) | ||
| - | + | | |
| - | | + | |
| - | | + | |
| [0] => tablecell_close | [0] => tablecell_close | ||
| - | [1] => Array | + | [1] => Array() |
| - | | + | |
| - | | + | |
| [2] => 81 | [2] => 81 | ||
| ) | ) | ||
| - | + | | |
| - | | + | |
| - | | + | |
| [0] => tablecell_open | [0] => tablecell_open | ||
| - | [1] => Array | + | [1] => Array( |
| - | | + | |
| [0] => 1 | [0] => 1 | ||
| [1] => left | [1] => left | ||
| ) | ) | ||
| - | |||
| [2] => 81 | [2] => 81 | ||
| ) | ) | ||
| - | + | | |
| - | | + | |
| - | | + | |
| [0] => cdata | [0] => cdata | ||
| - | [1] => Array | + | [1] => Array( |
| - | | + | |
| [0] => Row 1 Col 2 | [0] => Row 1 Col 2 | ||
| ) | ) | ||
| - | |||
| [2] => 82 | [2] => 82 | ||
| ) | ) | ||
| - | + | | |
| - | | + | |
| - | | + | |
| [0] => cdata | [0] => cdata | ||
| - | [1] => Array | + | [1] => Array( |
| - | | + | |
| [0] => | [0] => | ||
| ) | ) | ||
| - | |||
| [2] => 94 | [2] => 94 | ||
| ) | ) | ||
| - | + | | |
| - | | + | |
| - | | + | |
| [0] => tablecell_close | [0] => tablecell_close | ||
| - | [1] => Array | + | [1] => Array() |
| - | | + | |
| - | | + | |
| [2] => 99 | [2] => 99 | ||
| ) | ) | ||
| - | + | | |
| - | | + | |
| - | | + | |
| [0] => tablecell_open | [0] => tablecell_open | ||
| - | [1] => Array | + | [1] => Array( |
| - | | + | |
| [0] => 1 | [0] => 1 | ||
| [1] => left | [1] => left | ||
| ) | ) | ||
| - | |||
| [2] => 99 | [2] => 99 | ||
| ) | ) | ||
| - | + | | |
| - | | + | |
| - | | + | |
| [0] => cdata | [0] => cdata | ||
| - | [1] => Array | + | [1] => Array( |
| - | | + | |
| [0] => Row 1 Col 3 | [0] => Row 1 Col 3 | ||
| ) | ) | ||
| - | |||
| [2] => 100 | [2] => 100 | ||
| ) | ) | ||
| - | + | | |
| - | | + | |
| - | | + | |
| [0] => cdata | [0] => cdata | ||
| - | [1] => Array | + | [1] => Array( |
| - | | + | |
| [0] => | [0] => | ||
| ) | ) | ||
| - | |||
| [2] => 112 | [2] => 112 | ||
| ) | ) | ||
| - | + | | |
| - | | + | |
| - | | + | |
| [0] => tablecell_close | [0] => tablecell_close | ||
| - | [1] => Array | + | [1] => Array() |
| - | | + | |
| - | | + | |
| [2] => 120 | [2] => 120 | ||
| ) | ) | ||
| - | + | | |
| - | | + | |
| - | | + | |
| [0] => tablerow_close | [0] => tablerow_close | ||
| - | [1] => Array | + | [1] => Array() |
| - | | + | |
| - | | + | |
| [2] => 121 | [2] => 121 | ||
| ) | ) | ||
| - | + | | |
| - | | + | |
| - | | + | |
| [0] => table_close | [0] => table_close | ||
| - | [1] => Array | + | [1] => Array() |
| - | | + | |
| - | | + | |
| [2] => 121 | [2] => 121 | ||
| ) | ) | ||
| - | + | | |
| - | | + | |
| - | | + | |
| [0] => p_open | [0] => p_open | ||
| - | [1] => Array | + | [1] => Array() |
| - | | + | |
| - | | + | |
| [2] => 121 | [2] => 121 | ||
| ) | ) | ||
| - | + | | |
| - | | + | |
| - | | + | |
| [0] => cdata | [0] => cdata | ||
| - | [1] => Array | + | [1] => Array( |
| - | | + | |
| [0] => def | [0] => def | ||
| ) | ) | ||
| - | |||
| [2] => 122 | [2] => 122 | ||
| ) | ) | ||
| - | + | | |
| - | | + | |
| - | | + | |
| [0] => p_close | [0] => p_close | ||
| - | [1] => Array | + | [1] => Array() |
| - | | + | |
| - | | + | |
| [2] => 122 | [2] => 122 | ||
| ) | ) | ||
| - | + | | |
| - | | + | |
| - | | + | |
| [0] => document_end | [0] => document_end | ||
| - | [1] => Array | + | [1] => Array() |
| - | | + | |
| - | | + | |
| [2] => 122 | [2] => 122 | ||
| ) | ) | ||
| - | |||
| ) | ) | ||
| </ | </ | ||
| - | Верхний уровень массива --- это просто список. Каждый из его дочерних элементов описывает возвратную функцию, | + | Верхний уровень массива --- это просто список. Каждый из его дочерних элементов описывает возвратную функцию, |
| === Единственная инструкция === | === Единственная инструкция === | ||
| Строка 960: | Строка 790: | ||
| ) | ) | ||
| - | |||
| [2] => 122 | [2] => 122 | ||
| ) | ) | ||
| </ | </ | ||
| - | Первый элемент (индекс 0 ) --- это | + | Первый элемент (индекс 0) — это имя метода или функции |
| - | Второй элемент (индекс 1) --- сам является массивом, | + | Второй элемент (индекс 1) сам |
| - | В этом случае | + | В этом случае |
| <code php> | <code php> | ||
| Строка 975: | Строка 804: | ||
| </ | </ | ||
| - | Третий элемент (индекс 2) --- является индексом байта первого символа, | + | Третий элемент (индекс 2) — это индекс байта первого символа, |
| - | **Замечание:** метод '' | + | **Примечание**: Метод |
| - | Пример массив инструкций страницы с описанием [[wiki: | + | Пример массив инструкций страницы с описанием [[wiki: |
| - | ==== Преобразователь ==== | + | ==== Renderer (преобразователь) ==== |
| - | Преобразователь --- это класс (или коллекция функций), | + | Renderer (преобразователь) --- это класс (или коллекция функций), |
| <code php> | <code php> | ||
| Строка 989: | Строка 818: | ||
| class Doku_Renderer { | class Doku_Renderer { | ||
| - | // snip | + | // вырезка |
| | | ||
| - | function header($text, | + | |
| | | ||
| - | function section_open($level) {} | + | |
| | | ||
| - | function section_close() {} | + | |
| | | ||
| - | function cdata($text) {} | + | |
| | | ||
| - | function p_open() {} | + | |
| | | ||
| - | function p_close() {} | + | |
| | | ||
| - | function linebreak() {} | + | |
| | | ||
| - | function hr() {} | + | |
| | | ||
| - | // snip | + | // вырезка |
| } | } | ||
| </ | </ | ||
| - | Он используется для документирования | + | Он используется для документирования |
| - | Основной принцип того, как инструкции, | + | Основной принцип того, как инструкции, |
| - | Во фрагменте преобразователя, | + | === Вызов рендерера |
| - | === Вызов преобразователя через инструкции === | + | Клиентскому коду, использующему Parser, |
| - | + | ||
| - | К **клиентскому коду** относится | + | |
| <code php> | <code php> | ||
| - | // Получить перечень | + | // Получить |
| - | $instructions = $Parser-> | + | $instructions = $parser-> |
| - | // Создать преобразователь | + | // Создаем рендерер |
| - | $Renderer | + | $renderer |
| - | // Пройтись по всем | + | // Проходим по инструкциям |
| - | foreach ( $instructions as $instruction ) { | + | foreach ($instructions as $instruction) { |
| - | | + | // Выполняем обратный вызов |
| - | // Выполнить инструкции через преобразователь | + | call_user_func_array([$renderer, $instruction[0]], $instruction[1]); |
| - | call_user_func_array(array(&$Renderer, $instruction[0]), | + | |
| } | } | ||
| </ | </ | ||
| - | === Методы | + | === Методы |
| - | Ключевыми методами преобразователя | + | Ключевые методы Renderer |
| - | * '' | + | * '' |
| - | * Возможно, это | + | *Вероятно, это |
| - | * '' | + | * '' |
| - | * Хотя '' | + | *Хотя '' |
| - | * '' | + | * '' |
| - | * И '' | + | *Оба изображения |
| - | * '' | + | * '' |
| - | * '' | + | *Необходимость |
| - | * '' | + | * '' |
| - | * Технически, только годные '' | + | *Технически |
| - | * '' | + | * '' |
| - | * Требуется проверить только годные адреса | + | *Должен соответствовать только допустимым URL-адресам общих ресурсов Windows, но в любом |
| - | * '' | + | * '' |
| - | * '' | + | *'' |
| - | * '' | + | * '' |
| - | * Здесь проверка | + | *Это не требует |
| - | * '' | + | * '' |
| - | * '' | + | *'' |
| - | Особое внимание | + | Особого внимания требуют методы, которые |
| <code html> | <code html> | ||
| - | <a href="http:// | + | <a href="https:// |
| </ | </ | ||
| - | Аргумент '' | + | Аргумент '' |
| - | - '' | + | - '' |
| - | - строка: в качестве заголовка использована простая тестовая строка; | + | - string: в качестве заголовка использовалась простая текстовая строка |
| - | - массив | + | - array (hash): в качестве заголовка использовано изображение. |
| - | Если '' | + | Если |
| <code php> | <code php> | ||
| - | $title = array( | + | $title = [ |
| - | // Может быть ' | + | // Может быть ' |
| - | ' | + | ' |
| | | ||
| - | // URL изображения (может быть | + | // URL-адрес |
| - | ' | + | ' |
| | | ||
| - | // Для | + | // Для атрибута |
| - | ' | + | ' |
| | | ||
| - | // ' | + | // ' |
| - | ' | + | ' |
| | | ||
| - | // Ширина в пикселях или | + | // Ширина в пикселях или |
| - | ' | + | ' |
| | | ||
| - | // Высота в пикселях или | + | // Высота в пикселях или |
| - | ' | + | ' |
| | | ||
| - | // Следует ли кэшировать изображение (для внешних изображений)? | + | // Кэшировать |
| - | ' | + | ' |
| - | ); | + | ]; |
| </ | </ | ||
wiki/devel/parser.1737107504.txt.gz · Последнее изменение: — vladpolskiy
