Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия |
wiki:devel:syntax_plugins [2025/01/09 22:24] – vladpolskiy | wiki:devel:syntax_plugins [2025/01/09 22:44] (текущий) – [Написание своего собственного плагина] vladpolskiy |
---|
====== Руководство: разбор синтаксического плагина ====== | ====== Руководство: разбор синтаксического плагина ====== |
| |
Цель данного руководства --- разобрать концепции, касающиеся [[syntax_plugins|синтаксических плагинов]] «[[ru:dokuwiki|ДокуВики]]» и пройти шаги, связанные с написанием своего собственного плагина. | Цель данного руководства --- разобрать концепции, касающиеся [[syntax_plugins|синтаксических плагинов]] «[[wiki:dokuwiki|ДокуВики]]» и пройти шаги, связанные с написанием своего собственного плагина. |
| |
Для тех, кто с особым нетерпением жаждет начать: возьмите копию плагина [[syntax_plugin_skeleton|syntax plugin skeleton]]. Это своего рода костяк --- плагин, который выводит «Hello World!», когда встречает токен «''%%<TEST>%%''» в статье вики. Начните наращивать на него «мясо». | Для тех, кто с особым нетерпением жаждет начать: возьмите копию плагина [[syntax_plugin_skeleton|syntax plugin skeleton]]. Это своего рода костяк --- плагин, который выводит «Hello World!», когда встречает токен «''%%<TEST>%%''» в статье вики. Начните наращивать на него «мясо». |
Этот номер используется лексером((Lexer --- часть парсера, анализируящая «сырую» (исходную) статью вики.)) для управления порядком, в котором он проверяет шаблоны синтаксических состояний на «сырых» (исходных) данных вики. Это важно только в том случае, если один и тот же участок данных попадает в шаблоны, относящиеся к двум или более состояниям. После проверки будет выбран шаблон, относящийся к состоянию с наименьшим порядковым номером. | Этот номер используется лексером((Lexer --- часть парсера, анализируящая «сырую» (исходную) статью вики.)) для управления порядком, в котором он проверяет шаблоны синтаксических состояний на «сырых» (исходных) данных вики. Это важно только в том случае, если один и тот же участок данных попадает в шаблоны, относящиеся к двум или более состояниям. После проверки будет выбран шаблон, относящийся к состоянию с наименьшим порядковым номером. |
| |
Вы можете использовать это свойство для написания плагина, который заменяет или расширяет «родной» хендлер «ДокуВики» для той же синтаксической конструкции. Примером является плагин «[[plugin:Code]]». | Вы можете использовать это свойство для написания плагина, который заменяет или расширяет «родной» хендлер «ДокуВики» для той же синтаксической конструкции. Примером является плагин «[[wiki:plugin:Code]]». |
| |
Подробности о существующих порядковых номерах доступны для обоих [[parser]] ([[ru:devel:parser:getsort_list|sort list]]). | Подробности о существующих порядковых номерах доступны для обоих [[parser]] ([[wiki:devel:parser:getsort_list|sort list]]). |
:?: | :?: |
| |
Параметр ''$mode'' --- имя формата состояния финального вывода произведённого рендером. В настоящее время «ДокуВики» поддерживает только один формат вывода --- ''XHTML'' ((Существует ещё специальное состояние ''metadata'', которое ничего не выводит, только собирает метаданные для страницы. Используйте его для вставки значений в массив метаданных.)). | Параметр ''$mode'' --- имя формата состояния финального вывода произведённого рендером. В настоящее время «ДокуВики» поддерживает только один формат вывода --- ''XHTML'' ((Существует ещё специальное состояние ''metadata'', которое ничего не выводит, только собирает метаданные для страницы. Используйте его для вставки значений в массив метаданных.)). |
| |
Новые состояния могут быть представлены в [[renderer_plugins|плагинах рендера]]. Плагины должны производить вывод только для тех форматов, которые они поддерживают, это значит, что эта функция должна быть структурирована... | Новые состояния могут быть представлены в [[wiki:devel:renderer_plugins|плагинах рендера]]. Плагины должны производить вывод только для тех форматов, которые они поддерживают, это значит, что эта функция должна быть структурирована... |
<code> | <code> |
if ($mode == 'xhtml') { // supported mode | if ($mode == 'xhtml') { // supported mode |
| |
==== Локализация ==== | ==== Локализация ==== |
| |
FIXME | FIXME |
| Смотрите статьи «[[wiki:devel:common_plugin_functions#локализация|Локализация]]» и «[[plugin_file_structure|Структура файлов плагина]]». |
Смотрите статьи «[[common_plugin_functions#локализация|Локализация]]» и «[[plugin_file_structure|Структура файлов плагина]]». | |
| |
==== Конфигурация ==== | ==== Конфигурация ==== |
| |
==== Использование CSS и JavaScript ==== | ==== Использование CSS и JavaScript ==== |
| |
FIXME | FIXME |
| |
Смотрите статью «[[plugin_file_structure|Структура файлов плагина]]». | Смотрите статью «[[plugin_file_structure|Структура файлов плагина]]». |
| |
* если у вас есть входной и выходной шаблоны, не забудьте обработать не совпавшие с шаблоном данные; | * если у вас есть входной и выходной шаблоны, не забудьте обработать не совпавшие с шаблоном данные; |
* относитесь к сырым данным вики с подозрением (вниманием) и убедитесь, что все спецсимволы прошли конвертор последовательностей. | * относитесь к сырым данным вики с подозрением (вниманием) и убедитесь, что все спецсимволы прошли конвертор последовательностей. |
- Протестируйте и добавьте плагин на [[ru:plugins|страницу плагинов]] «ДокуВики». | - Протестируйте и добавьте плагин на [[wiki:plugins|страницу плагинов]] «ДокуВики». |
| |
===== Пример 1-й плагина — Now ===== | ===== Пример 1-й плагина — Now ===== |