| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия |
| 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 ===== |