Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия |
wiki:devel:syntax_plugins [2025/01/09 22:04] – vladpolskiy | wiki:devel:syntax_plugins [2025/01/09 22:44] (текущий) – [Написание своего собственного плагина] vladpolskiy |
---|
====== Синтаксические плагины ====== | ====== Синтаксические плагины ====== |
| |
Синтаксические плагины --- это плагины расширения синтаксиса «[[ru:dokuwiki|ДокуВики]]». Чтобы понять, что необходимо для регистрации нового синтаксиса в «ДокуВики», вы должны прочитать, как работает [[parser|парсер]]. | Синтаксические плагины --- это плагины расширения синтаксиса «[[wiki:dokuwiki|ДокуВики]]». Чтобы понять, что необходимо для регистрации нового синтаксиса в «ДокуВики», вы должны прочитать, как работает [[parser|парсер]]. |
| |
===== Краткий обзор ===== | ===== Краткий обзор ===== |
* <del>''getInfo()'' --- возвращает хэш с информацией о плагине: автор, электропочта, дата, название, описание, ссылки.</del>\\ **Теперь вместо неё прилагается отдельный файл plugin.info.txt** | * <del>''getInfo()'' --- возвращает хэш с информацией о плагине: автор, электропочта, дата, название, описание, ссылки.</del>\\ **Теперь вместо неё прилагается отдельный файл plugin.info.txt** |
* ''getType()'' --- должен возвращать тип синтаксиса (см. [[#синтаксические типы|ниже]]). | * ''getType()'' --- должен возвращать тип синтаксиса (см. [[#синтаксические типы|ниже]]). |
* ''getSort()'' --- возвращает число, по которому определяется, в каком порядке должны добавляться состояния, см. также [[devel:parser#order_of_adding_modes_important|parser, order of adding modes]] и [[devel:parser:getSort list]]. | * ''getSort()'' --- возвращает число, по которому определяется, в каком порядке должны добавляться состояния, см. также [[wiki:devel:parser#order_of_adding_modes_important|parser, order of adding modes]] и [[wiki:devel:parser:getSort list]]. |
* ''connectTo($mode)'' --- эта функция наследуется от класса Doku_Parser_Mode, определённого в ''inc/parser/parser.php''. Это место, где регистрируется регулярные выражения, необходимые для опознания вашего синтаксиса. | * ''connectTo($mode)'' --- эта функция наследуется от класса Doku_Parser_Mode, определённого в ''inc/parser/parser.php''. Это место, где регистрируется регулярные выражения, необходимые для опознания вашего синтаксиса. |
* ''handle($match, $state, $pos, Doku_Handler $handler)'' --- функция для подготовки совпавшего синтаксиса для использования рендером. | * ''handle($match, $state, $pos, Doku_Handler $handler)'' --- функция для подготовки совпавшего синтаксиса для использования рендером. |
====== Руководство: разбор синтаксического плагина ====== | ====== Руководство: разбор синтаксического плагина ====== |
| |
Цель данного руководства --- разобрать концепции, касающиеся [[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 ===== |