<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="https://wwoss.direct.quickconnect.to/lib/exe/css.php?s=feed" type="text/css"?>
<rss version="2.0">
    <channel xmlns:g="http://base.google.com/ns/1.0">
        <title>worldwide open-source software - wiki:devel</title>
        <description></description>
        <link>https://wwoss.direct.quickconnect.to/</link>
        <lastBuildDate>Fri, 10 Apr 2026 20:11:57 +0000</lastBuildDate>
        <generator>FeedCreator 1.8</generator>
        <image>
            <url>https://wwoss.direct.quickconnect.to/lib/exe/fetch.php?media=wiki:logo.png</url>
            <title>worldwide open-source software</title>
            <link>https://wwoss.direct.quickconnect.to/</link>
        </image>
        <item>
            <title>action_modes</title>
            <link>https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:action_modes&amp;rev=1693665383</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;режимы_действий_они_же_режимы_do&quot;&gt;Режимы действий, они же режимы do&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Список возможных режимов действий (возможно еще не полный) с их описанием. Эти действия обычно определяются параметром &lt;code&gt;?do=&lt;/code&gt;, переданным диспетчеру &lt;code&gt;doku.php&lt;/code&gt;. Знание текущего режима может быть полезно для создания более динамических &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:templates&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:templates&quot; data-wiki-id=&quot;wiki:devel:templates&quot;&gt;шаблонов&lt;/a&gt; или написания &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:action_plugins&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:action_plugins&quot; data-wiki-id=&quot;wiki:devel:action_plugins&quot;&gt;плагинов действий&lt;/a&gt;. Текущий режим может быть доступен через глобальную переменную &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:environment#act&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:environment&quot; data-wiki-id=&quot;wiki:devel:environment&quot;&gt;$ACT&lt;/a&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0420\u0435\u0436\u0438\u043c\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439, \u043e\u043d\u0438 \u0436\u0435 \u0440\u0435\u0436\u0438\u043c\u044b do&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0440\u0435\u0436\u0438\u043c\u044b_\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439_\u043e\u043d\u0438_\u0436\u0435_\u0440\u0435\u0436\u0438\u043c\u044b_do&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-747&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;действия_со_статьями&quot;&gt;Действия со статьями&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441\u043e \u0441\u0442\u0430\u0442\u044c\u044f\u043c\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f_\u0441\u043e_\u0441\u0442\u0430\u0442\u044c\u044f\u043c\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;748-799&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit3&quot; id=&quot;процесс_редактирования&quot;&gt;Процесс редактирования&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;show&lt;/strong&gt; — действие по умолчанию, если никакое действие не указано, используется это. Это действие просто вызывает отображение текущей статьи.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;edit&lt;/strong&gt; — загружает текущую статью в окно редактора вместо отображения.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;source&lt;/strong&gt; — просмотр исходного текста страницы (часто используется при недостатке прав на редактирование).&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;preview&lt;/strong&gt; — тоже самое, что и предыдущее, но кроме того показывает предварительное изображение статьи под окном редактора.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;save&lt;/strong&gt; — используется для сохранения текущей статьи, после сохранения осуществляется перенаправление в режим show. Вы никогда не должны использовать этот режим в своих шаблонах&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;conflict&lt;/strong&gt; — внутренний режим. Сообщает о возникновении конфликта при сохранении статьи.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;cancel&lt;/strong&gt; — используется для возвращения отредактированного текста в исходное состояние при возникновении конфликта (ошибки) - после этого текущая статья отображается вновь.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;denied&lt;/strong&gt; — внутренний режим. Используется для загрузки сообщения об отказе в доступе.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;locked&lt;/strong&gt; — внутренний режим. Используется для отображения сообщения о блокировке статьи.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;wordblock&lt;/strong&gt; — внутренний режим. Отображает сообщение &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:blacklist&quot; class=&quot;wikilink1&quot; title=&quot;wiki:blacklist&quot; data-wiki-id=&quot;wiki:blacklist&quot;&gt;о блокировании спама&lt;/a&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u0440\u043e\u0446\u0435\u0441\u0441_\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;800-2947&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit4&quot; id=&quot;действия_с_черновиком&quot;&gt;Действия с черновиком&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;draft&lt;/strong&gt; — отображает черновик текущей статьи. &lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;draftdel&lt;/strong&gt; — удаляет черновик текущей статьи, после чего активирует режим отображения текущей статьи (show mode). &lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;recover&lt;/strong&gt; — восстанавливает текст вики из черновика текущей статьи и загружает его в редактор. 	 &lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u0447\u0435\u0440\u043d\u043e\u0432\u0438\u043a\u043e\u043c&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f_\u0441_\u0447\u0435\u0440\u043d\u043e\u0432\u0438\u043a\u043e\u043c&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;2948-3460&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit5&quot; id=&quot;различные_представления_содержимого_статьи&quot;&gt;Различные представления содержимого статьи&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;export_raw&lt;/strong&gt; — экспорт (например в текстовый файл) в виде разметки вики.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;export_xhtml&lt;/strong&gt; — экспорт в виде XHTML.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;export_xhtmlbody&lt;/strong&gt; — экспорт только тела XHTML.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0420\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0441\u0442\u0430\u0442\u044c\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435_\u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f_\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e_\u0441\u0442\u0430\u0442\u044c\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;3461-3813&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit6&quot; id=&quot;другие_функции&quot;&gt;Другие функции&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;subscribe&lt;/strong&gt; — добавляет текущего пользователя в список email-рассылки об изменениях текущей статьи.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;backlink&lt;/strong&gt; — показывает список статей, в которых есть ссылки на текущую статью.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;revisions&lt;/strong&gt; — показывает изменения и их авторов текущей статьи.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;revert&lt;/strong&gt; — откатывает страницу, в режиме show - на прошлую ревизию, в режиме diff - на раннюю из выбранных.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;diff&lt;/strong&gt; — генерирует отображение diff для удобного сравнения двух ревизий статьи.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0414\u0440\u0443\u0433\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0434\u0440\u0443\u0433\u0438\u0435_\u0444\u0443\u043d\u043a\u0446\u0438\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;3814-4616&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit7&quot; id=&quot;действия_с_сайтом&quot;&gt;Действия с сайтом&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u0441\u0430\u0439\u0442\u043e\u043c&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f_\u0441_\u0441\u0430\u0439\u0442\u043e\u043c&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;4617-4662&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit8&quot; id=&quot;основные_функции&quot;&gt;Основные функции&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;index&lt;/strong&gt; — показывает автоматически составленный индекс статей и пространств имён.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;sitemap&lt;/strong&gt; — отдаёт (возвращает) &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:sitemap&quot; class=&quot;wikilink1&quot; title=&quot;wiki:sitemap&quot; data-wiki-id=&quot;wiki:sitemap&quot;&gt;карту сайта&lt;/a&gt; поисковому движку в зависимости от значения параметра «&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:config:sitemap&quot; class=&quot;wikilink1&quot; title=&quot;wiki:config:sitemap&quot; data-wiki-id=&quot;wiki:config:sitemap&quot;&gt;sitemap&lt;/a&gt;» (не применимо к шаблонам).&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;recent&lt;/strong&gt; — отображает список с последними измененными статьями и позволяет показать diff.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;search&lt;/strong&gt; — функциональность поиска.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;media&lt;/strong&gt; — менеджер файлов (Media Manager)&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435_\u0444\u0443\u043d\u043a\u0446\u0438\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;4663-5421&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit9&quot; id=&quot;связанные_с_acl_списком_контроля_доступа&quot;&gt;Связанные с ACL (списком контроля доступа)&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;register&lt;/strong&gt; — регистрация нового пользователя.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;login&lt;/strong&gt; — вход пользователя в систему.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;logout&lt;/strong&gt; — выход пользователя из системы.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;profile&lt;/strong&gt; — работа с профилем пользователя.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;resendpwd&lt;/strong&gt; — отправляет электронное письмо с паролем пользователя на указанный им ранее адрес.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;admin&lt;/strong&gt; — отображает меню администратора со всеми инсталлированными &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:admin_plugins&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:admin_plugins&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:admin_plugins&quot;&gt;плагинами администрирования&lt;/a&gt;; доступен для залогиненных суперпользователей или менеджеров.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0421\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 ACL (\u0441\u043f\u0438\u0441\u043a\u043e\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430)&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435_\u0441_acl_\u0441\u043f\u0438\u0441\u043a\u043e\u043c_\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f_\u0434\u043e\u0441\u0442\u0443\u043f\u0430&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;5422-6307&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit10&quot; id=&quot;другие_функции1&quot;&gt;Другие функции&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;check&lt;/strong&gt; — снимает дамп с информацией о правах пользователя и установке «&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:dokuwiki&quot; class=&quot;wikilink1&quot; title=&quot;wiki:dokuwiki&quot; data-wiki-id=&quot;wiki:dokuwiki&quot;&gt;ДокуВики&lt;/a&gt;».&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;debug&lt;/strong&gt; — снимает дамп с отладочной информацией (доступна только при включённой опции «&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:config:allowdebug&quot; class=&quot;wikilink1&quot; title=&quot;wiki:config:allowdebug&quot; data-wiki-id=&quot;wiki:config:allowdebug&quot;&gt;allowdebug&lt;/a&gt;»).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0414\u0440\u0443\u0433\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0434\u0440\u0443\u0433\u0438\u0435_\u0444\u0443\u043d\u043a\u0446\u0438\u04381&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;6308-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Sat, 02 Sep 2023 14:36:23 +0000</pubDate>
        </item>
        <item>
            <title>action_plugins</title>
            <link>https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:action_plugins&amp;rev=1723675982</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;action_plugins&quot;&gt;Action Plugins&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:action_plugins&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:action_plugins&quot; data-wiki-id=&quot;wiki:devel:action_plugins&quot;&gt;Action Plugins&lt;/a&gt; предназначены, чтобы работать с &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=devel:events&quot; class=&quot;wikilink2&quot; title=&quot;devel:events&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;devel:events&quot;&gt;событиями&lt;/a&gt; Dokuwiki и иметь возможность добавить свой расширеный функционал в любой части &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:dokuwiki&quot; class=&quot;wikilink1&quot; title=&quot;wiki:dokuwiki&quot; data-wiki-id=&quot;wiki:dokuwiki&quot;&gt;Dokuwiki&lt;/a&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Action Plugins&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;action_plugins&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-323&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;описание&quot;&gt;Описание&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Action plugins загружаются до того, как вики делает что-либо значительное. Сразу же после загрузки, вики вызывает метод &lt;code&gt;register()&lt;/code&gt; каждого плагина для того чтобы дать ему возможность зарегистрировать свои обработчики событий. Когда происходит некоторое событие, все зарегистрированные на него обработчики вызываются по очереди (в произвольном порядке) и им передается по ссылке объект события. Обработчик получает возможность выполнить какое-либо действие на основании данных, хранящихся в этом объекте, модифицировать эти данные или повлиять на дальнейшую обработку события.  На странице &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=devel:events&quot; class=&quot;wikilink2&quot; title=&quot;devel:events&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;devel:events&quot;&gt;events&lt;/a&gt; можно узнать больше о том, как устроена система событий, а также просмотреть их полный список.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;324-1612&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;техническое_описание&quot;&gt;Техническое описание&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Action plugins используют такой же основной формат и правила наименоваения, как и другие типы плагинов для Dokuwiki.
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; каждый плагин должен располагаться в собственной директории внутри каталога &lt;code&gt;lib/plugins&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; скрипт плагина должен называться &lt;code&gt;action.php&lt;/code&gt;, или должен располагаться в подкаталоге &lt;code&gt;action&lt;/code&gt;, и тогда называться как угодно, смотрите &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=devel:plugin&quot; class=&quot;wikilink2&quot; title=&quot;devel:plugin&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;devel:plugin&quot;&gt;файловую структуру&lt;/a&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; плагин должен содержать один класс &lt;code&gt;action_plugin_&amp;lt;plugin name&amp;gt;&lt;/code&gt; как расширение базового класса&lt;code&gt;DokuWiki_Action_Plugin&lt;/code&gt;, который можно найти в &lt;code&gt;lib/plugins/action.php&lt;/code&gt;. Если файл плагина располагается в подкаталоге &lt;code&gt;action&lt;/code&gt;, тогда класс необходимо назвать &lt;code&gt;action_plugin_&amp;lt;plugin name&amp;gt;_&amp;lt;action plugin filename&amp;gt;&lt;/code&gt; (где action_plugin_filename не должно содержать расширение &amp;#039;.php&amp;#039;).&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; плагин поддерживает стандартные introspection, локализации и конфигурации через базовый класс &lt;code&gt;DokuWiki_Plugin&lt;/code&gt;, который располагается в файле &lt;code&gt;inc/plugin.php&lt;/code&gt;, смотрите &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=devel:common_plugin_functions&quot; class=&quot;wikilink2&quot; title=&quot;devel:common_plugin_functions&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;devel:common_plugin_functions&quot;&gt;Встроенные функции плагина&lt;/a&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; плагин должен иметь два метода, &lt;code&gt;getInfo()&lt;/code&gt; и &lt;code&gt;register()&lt;/code&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; внешние библиотеки могут быть загружены в тот момент, когда это необходимо плагину или в конструкторе, но не в самом начале файла&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0435_\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;1613-3587&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit4&quot; id=&quot;getinfo&quot;&gt;getInfo()&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
&lt;strong&gt;!!! Теперь вместо неё прилагается отдельный файл plugin.info.txt !!!&lt;/strong&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;обязательный&lt;/strong&gt;
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; getInfo&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
      &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
        &lt;span class=&quot;st_h&quot;&gt;&#039;author&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;имя автора плагина&amp;gt;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;st_h&quot;&gt;&#039;email&#039;&lt;/span&gt;  &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;контактный e-mail автора плагина&amp;gt;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;st_h&quot;&gt;&#039;date&#039;&lt;/span&gt;   &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;дата версии плагина&amp;gt;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;st_h&quot;&gt;&#039;name&#039;&lt;/span&gt;   &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;название плагина&amp;gt;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;st_h&quot;&gt;&#039;desc&#039;&lt;/span&gt;   &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;описание плагина (поддерживается многострочие)&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;st_h&quot;&gt;&#039;url&#039;&lt;/span&gt;    &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;домашная страничка плагина: ссылка, где можно найти информацию по плагину&amp;gt;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;getInfo()&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;getinfo&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;3588-4362&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit5&quot; id=&quot;register&quot;&gt;register()&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
&lt;strong&gt;обязательный&lt;/strong&gt;
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;    &lt;span class=&quot;co4&quot;&gt;/**
     * plugin should use this method to register its handlers with the dokuwiki&#039;s event controller
     *
     * @param    $controller   Dokuwiki&#039;s event controller object. Also available as global $EVENT_HANDLER
     *
     * @return   not required
     */&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; register&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;Doku_Event_Handler &lt;span class=&quot;re0&quot;&gt;$controller&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
      &lt;span class=&quot;re0&quot;&gt;$controller&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;register_hook&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;lt;&lt;/span&gt;EVENT NAME&lt;span class=&quot;sy0&quot;&gt;&amp;gt;,&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;lt;&lt;/span&gt;EVENT ADVISE&lt;span class=&quot;sy0&quot;&gt;&amp;gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;lt;&lt;/span&gt;event handler function&lt;span class=&quot;sy0&quot;&gt;&amp;gt;,&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;lt;&lt;/span&gt;parameters to be passed to event handler&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;register()&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;register&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;4363-4901&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit6&quot; id=&quot;event_handler&quot;&gt;&amp;lt;event handler&amp;gt;()&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
&lt;strong&gt;необязательный&lt;/strong&gt; их может быть любое количество; может быть назван любым именем, которое не используется этим плагином или его предками
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;    &lt;span class=&quot;co4&quot;&gt;/**
     * custom event handler
     *
     * @param    $param   (mixed)   the parameters passed to register_hook when this handler was registered
     * @param    $event   (object)  event object by reference
     *
     * @return   not required
     */&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;lt;&lt;/span&gt;event_handler&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$event&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$param&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
      &lt;span class=&quot;co1&quot;&gt;// custom script statements ...&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;lt;event handler&amp;gt;()&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;event_handler&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;4902-5551&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit7&quot; id=&quot;examples&quot;&gt;Examples&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Action plugins are a way to modify many aspects of how DokuWiki behaves in certain cases independent of a page&amp;#039;s syntax. To be able to modify a DokuWiki internal behavior it needs to trigger an event. Your action plugin can register as a handler for such an event and then work with the given event data.
&lt;/p&gt;

&lt;p&gt;
To learn more about events, read the following pages:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:events&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:events&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:events&quot;&gt;events&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:events_list&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:events_list&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:events_list&quot;&gt;events list&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:event_handlers&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:event_handlers&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:event_handlers&quot;&gt;event handlers&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Examples&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;examples&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;5552-5995&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit8&quot; id=&quot;sample_action_plugin_1&quot;&gt;Sample action plugin 1&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Insert a javascript script link in all pages.
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Register the &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:events_list#tpl_metaheader_output&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:events_list&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:events_list&quot;&gt;TPL_METAHEADER_OUTPUT&lt;/a&gt; event, with a before EVENT_ADVISE.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Add javascript information to «script» meta headers as array type.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;dl class=&quot;file&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=wiki:devel:action_plugins&amp;amp;codeblock=3&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_php&quot;&gt;action.php&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code file php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class=&quot;co4&quot;&gt;/**
 * Example Action Plugin:   Example Component.
 * 
 * @author     Samuele Tognini &amp;lt;samuele@cli.di.unipi.it&amp;gt;
 */&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;&lt;a href=&quot;http://www.php.net/defined&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;defined&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;DOKU_INC&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/die&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;die&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;&lt;a href=&quot;http://www.php.net/defined&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;defined&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;DOKU_PLUGIN&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/define&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;define&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;DOKU_PLUGIN&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;DOKU_INC&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;lib/plugins/&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;require_once&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;DOKU_PLUGIN&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;action.php&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; action_plugin_example &lt;span class=&quot;kw2&quot;&gt;extends&lt;/span&gt; DokuWiki_Action_Plugin &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
  &lt;span class=&quot;co4&quot;&gt;/**
   * return some info
   */&lt;/span&gt;
  &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; getInfo&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
		 &lt;span class=&quot;st_h&quot;&gt;&#039;author&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;Me name&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
		 &lt;span class=&quot;st_h&quot;&gt;&#039;email&#039;&lt;/span&gt;  &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;myname@example.org&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
		 &lt;span class=&quot;st_h&quot;&gt;&#039;date&#039;&lt;/span&gt;   &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;2006-12-17&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
		 &lt;span class=&quot;st_h&quot;&gt;&#039;name&#039;&lt;/span&gt;   &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;Example (action plugin component)&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
		 &lt;span class=&quot;st_h&quot;&gt;&#039;desc&#039;&lt;/span&gt;   &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;Example action functions.&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
		 &lt;span class=&quot;st_h&quot;&gt;&#039;url&#039;&lt;/span&gt;    &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;http://www.example.org&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
		 &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
  &lt;span class=&quot;co4&quot;&gt;/**
   * Register its handlers with the dokuwiki&#039;s event controller
   */&lt;/span&gt;
  &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; register&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;Doku_Event_Handler &lt;span class=&quot;re0&quot;&gt;$controller&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$controller&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;register_hook&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;TPL_METAHEADER_OUTPUT&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;BEFORE&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;  &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;_hookjs&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
  &lt;span class=&quot;co4&quot;&gt;/**
   * Hook js script into page headers.
   *
   * @author Samuele Tognini &amp;lt;samuele@cli.di.unipi.it&amp;gt;
   */&lt;/span&gt;
  &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; _hookjs&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$event&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$param&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
	&lt;span class=&quot;re0&quot;&gt;$event&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;script&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;type&amp;quot;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
                                          &lt;span class=&quot;st0&quot;&gt;&amp;quot;charset&amp;quot;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;utf-8&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
					  &lt;span class=&quot;st0&quot;&gt;&amp;quot;_data&amp;quot;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
					  &lt;span class=&quot;st0&quot;&gt;&amp;quot;src&amp;quot;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; DOKU_BASE&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;lib/plugins/example/example.js&amp;quot;&lt;/span&gt;
				          &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Sample action plugin 1&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;sample_action_plugin_1&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;5996-7529&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit9&quot; id=&quot;sample_action_plugin_2&quot;&gt;Sample Action Plugin 2&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Inserts a button into the editor toolbar:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; registers as handler for the &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:events_list#toolbar_define&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:events_list&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:events_list&quot;&gt;TOOLBAR_DEFINE&lt;/a&gt; event with an AFTER advise&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; adds a button definition to the event&amp;#039;s &lt;code&gt;data&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;dl class=&quot;file&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=wiki:devel:action_plugins&amp;amp;codeblock=4&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_php&quot;&gt;action.php&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code file php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class=&quot;co4&quot;&gt;/**
 * Example Action Plugin: Inserts a button into the toolbar
 *
 * @author Gina Haeussge &amp;lt;osd@foosel.net&amp;gt;
 */&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;&lt;a href=&quot;http://www.php.net/defined&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;defined&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;DOKU_INC&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/die&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;die&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;&lt;a href=&quot;http://www.php.net/defined&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;defined&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;DOKU_PLUGIN&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/define&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;define&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;DOKU_PLUGIN&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; DOKU_INC &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;lib/plugins/&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;require_once&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;DOKU_PLUGIN &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;action.php&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; action_plugin_actionexample &lt;span class=&quot;kw2&quot;&gt;extends&lt;/span&gt; DokuWiki_Action_Plugin &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co4&quot;&gt;/**
     * Return some info
     */&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; getInfo&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
            &lt;span class=&quot;st_h&quot;&gt;&#039;author&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;Some name&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;st_h&quot;&gt;&#039;email&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;foo@bar.org&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;st_h&quot;&gt;&#039;date&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;2007-04-05&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;st_h&quot;&gt;&#039;name&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;Toolbar Action Plugin&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;st_h&quot;&gt;&#039;desc&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;Inserts a button into the toolbar&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;st_h&quot;&gt;&#039;url&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;http://www.example.com/plugin/toolbar&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co4&quot;&gt;/**
     * Register the eventhandlers
     */&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; register&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;Doku_Event_Handler &lt;span class=&quot;re0&quot;&gt;$controller&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$controller&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;register_hook&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;TOOLBAR_DEFINE&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;AFTER&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;insert_button&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co4&quot;&gt;/**
     * Inserts the toolbar button
     */&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; insert_button&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$event&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$param&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;kw2&quot;&gt;global&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$lang&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;kw2&quot;&gt;global&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$conf&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;include_once&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/dirname&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;dirname&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw4&quot;&gt;__FILE__&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;/lang/en/lang.php&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;sy0&quot;&gt;@&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;include_once&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/dirname&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;dirname&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw4&quot;&gt;__FILE__&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;/lang/&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$conf&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;lang&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;/lang.php&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;re0&quot;&gt;$event&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
            &lt;span class=&quot;st_h&quot;&gt;&#039;type&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;format&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;st_h&quot;&gt;&#039;title&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$lang&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;qb_abutton&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;st_h&quot;&gt;&#039;icon&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;../../plugins/actionexample/abutton.png&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;st_h&quot;&gt;&#039;open&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;abutton&amp;gt;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;st_h&quot;&gt;&#039;close&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;/abutton&amp;gt;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.dokuwiki.org/wiki:devel:action_plugins&quot; class=&quot;urlextern&quot; title=&quot;https://www.dokuwiki.org/wiki:devel:action_plugins&quot; rel=&quot;ugc nofollow&quot;&gt;https://www.dokuwiki.org/wiki:devel:action_plugins&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Sample Action Plugin 2&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;sample_action_plugin_2&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;7530-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Wed, 14 Aug 2024 22:53:02 +0000</pubDate>
        </item>
        <item>
            <title>caching</title>
            <link>https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:caching&amp;rev=1739732578</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;кэширование&quot;&gt;Кэширование&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
«&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:dokuwiki&quot; class=&quot;wikilink1&quot; title=&quot;wiki:dokuwiki&quot; data-wiki-id=&quot;wiki:dokuwiki&quot;&gt;ДокуВики&lt;/a&gt;» ускоряет просмотр статей с помощью кэширования разобранных файлов&lt;sup&gt;&lt;a href=&quot;#fn__1&quot; id=&quot;fnt__1&quot; class=&quot;fn_top&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt;. Если существует актуальная скэшированная версия документа, то будет доставлена именно эта скэшированная копия вместо того, чтобы разбирать все данные заново. При редактировании и предпросмотре никакого кэширования не применяется.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-806&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;очистка_кэша&quot;&gt;Очистка кэша&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Для принудительной очистки кэша отдельной статьи добавьте к её &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; параметр &lt;code&gt;purge&lt;/code&gt;. Например:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;http://www.example.com/namespace/page?purge=true&lt;/pre&gt;

&lt;p&gt;
Для принудительной очистки кэша всех статей, включая страницы инструкций, примените команду &lt;a href=&quot;http://man.cx/touch&quot; class=&quot;interwiki iw_man&quot; title=&quot;http://man.cx/touch&quot;&gt;touch&lt;/a&gt; к локальному файлу конфигурации &lt;code&gt;conf/local.php&lt;/code&gt;&lt;sup&gt;&lt;a href=&quot;#fn__2&quot; id=&quot;fnt__2&quot; class=&quot;fn_top&quot;&gt;2)&lt;/a&gt;&lt;/sup&gt;.
&lt;/p&gt;

&lt;p&gt;
Для принудительной очистки кэша только xhtml-страниц, примените &lt;code&gt;touch&lt;/code&gt; к &lt;code&gt;inc/parser/xhtml.php&lt;/code&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041e\u0447\u0438\u0441\u0442\u043a\u0430 \u043a\u044d\u0448\u0430&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043e\u0447\u0438\u0441\u0442\u043a\u0430_\u043a\u044d\u0448\u0430&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;807-1756&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;двухстадийное_кэширование&quot;&gt;Двухстадийное кэширование&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
«ДокуВики» использует два файла кэша для каждой статьи. Для того, чтобы понять это, вы должны знать, что статья до того, как быть отображенной в XHTML, сначала разбирается в промежуточный формат инструкций. «ДокуВики» сохраняет в кэше оба представления — и инструкции и подготовленный XHTML.
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Кэш инструкций&lt;/strong&gt;&lt;br/&gt;
Файл кэша инструкций подвергается обновлению только при изменений статьи, конфигурационных файлов&lt;sup&gt;&lt;a href=&quot;#fn__3&quot; id=&quot;fnt__3&quot; class=&quot;fn_top&quot;&gt;3)&lt;/a&gt;&lt;/sup&gt;, некоторых php-файлов «ДокуВики»&lt;sup&gt;&lt;a href=&quot;#fn__4&quot; id=&quot;fnt__4&quot; class=&quot;fn_top&quot;&gt;4)&lt;/a&gt;&lt;/sup&gt; или при добавлении/удалении/включении/выключении плагина с помощью менеджера  &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:plugin:plugin&quot; class=&quot;wikilink2&quot; title=&quot;wiki:plugin:plugin&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:plugin:plugin&quot;&gt;плагинов&lt;/a&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Кэш XHTML&lt;/strong&gt;&lt;br/&gt;
На кэш XHTML кроме перечисленного выше влияет опция максимального возраста кэша (&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:config:cachetime&quot; class=&quot;wikilink1&quot; title=&quot;wiki:config:cachetime&quot; data-wiki-id=&quot;wiki:config:cachetime&quot;&gt;cachetime&lt;/a&gt;), собственные метаданные, некоторые другие php-файлы &lt;sup&gt;&lt;a href=&quot;#fn__5&quot; id=&quot;fnt__5&quot; class=&quot;fn_top&quot;&gt;5)&lt;/a&gt;&lt;/sup&gt;, то существует или не существует цель внутренней ссылки, и то, что рассылка &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:rss&quot; class=&quot;wikilink1&quot; title=&quot;wiki:rss&quot; data-wiki-id=&quot;wiki:rss&quot;&gt;RSS&lt;/a&gt; требует обновления.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0414\u0432\u0443\u0445\u0441\u0442\u0430\u0434\u0438\u0439\u043d\u043e\u0435 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0434\u0432\u0443\u0445\u0441\u0442\u0430\u0434\u0438\u0439\u043d\u043e\u0435_\u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;1757-3445&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit4&quot; id=&quot;размещение&quot;&gt;Размещение&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Кэши  XHTML и инструкций располагаются в директориях &lt;code&gt;data/cache/*&lt;/code&gt;&lt;sup&gt;&lt;a href=&quot;#fn__6&quot; id=&quot;fnt__6&quot; class=&quot;fn_top&quot;&gt;6)&lt;/a&gt;&lt;/sup&gt;. Файлы завершаются суффиксами &lt;code&gt;.xhtml&lt;/code&gt;, &lt;code&gt;.i&lt;/code&gt;. В директории кэша также хранятся и другие файлы:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;.feed&lt;/code&gt; — различные рассылки RSS, сгенерированные для вики;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;.code&lt;/code&gt; — порции статей между тэгами &lt;code&gt;&amp;lt;code&amp;gt; ... &amp;lt;/code&amp;gt;&lt;/code&gt; после применения синтаксической подсветки.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0420\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;3446-4208&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;плагины&quot;&gt;Плагины&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:plugins&quot; class=&quot;wikilink1&quot; title=&quot;wiki:plugins&quot; data-wiki-id=&quot;wiki:plugins&quot;&gt;Плагины&lt;/a&gt; теперь могут влиять на кэш через событие &lt;code&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:event:parser_cache_use&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:event:parser_cache_use&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:event:parser_cache_use&quot;&gt;PARSER_CACHE_USE&lt;/a&gt;&lt;/code&gt;.  
Это позволяет плагинам, которые вносят дополнительные зависимости в определённые статьи, проверить эти зависимости и принудить «ДокуВики» обновить статью, если эти зависимости нарушены.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u043b\u0430\u0433\u0438\u043d\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u043b\u0430\u0433\u0438\u043d\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;4209-4751&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit6&quot; id=&quot;замечание_разработчику&quot;&gt;Замечание разработчику&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
До сих пор единственную возможность, которую имел разработчик для отключения кэширования, — это отключить его полностью. Это было необходимо для таких плагинов как «&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=plugin:discussion&quot; class=&quot;wikilink2&quot; title=&quot;plugin:discussion&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;plugin:discussion&quot;&gt;Discussion&lt;/a&gt;» и «&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=plugin:include&quot; class=&quot;wikilink2&quot; title=&quot;plugin:include&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;plugin:include&quot;&gt;Include&lt;/a&gt;».
&lt;/p&gt;

&lt;p&gt;
Для того, чтобы использовать новую функциональность, синтаксические плагины должны:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; сохранять информацию, относящуюся к статьям, затрагиваемым ими, и зависимостям, специфичным для каждой из этих статей. &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:metadata&quot; class=&quot;wikilink2&quot; title=&quot;wiki:metadata&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:metadata&quot;&gt;Метаданные&lt;/a&gt; статьи являются удобным местом для этого. Доступ к метаданным может быть получен с помощью  массива &lt;code&gt;$INFO[&amp;#039;metadata&amp;#039;]&lt;/code&gt; и функций &lt;code&gt;p_get_metadata()&lt;/code&gt; и &lt;code&gt;p_set_metadata()&lt;/code&gt;. Если вы используете метаданные, пожалуйста, обратитесь к &lt;a href=&quot;http://dublincore.org/&quot; class=&quot;urlextern&quot; title=&quot;http://dublincore.org/&quot; rel=&quot;ugc nofollow&quot;&gt;Dublin Core Metadata standards&lt;/a&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; добавить компонент &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:action_plugin&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:action_plugin&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:action_plugin&quot;&gt;плагина действий&lt;/a&gt; для работы с событием &lt;code&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:event:parser_cache_use&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:event:parser_cache_use&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:event:parser_cache_use&quot;&gt;PARSER_CACHE_USE&lt;/a&gt;&lt;/code&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Сам кэш управляется с помощью кэширующего объекта&lt;sup&gt;&lt;a href=&quot;#fn__7&quot; id=&quot;fnt__7&quot; class=&quot;fn_top&quot;&gt;7)&lt;/a&gt;&lt;/sup&gt;. Основными частями этого объекта интересными для плагина являются:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; массив &lt;code&gt;depends&lt;/code&gt; — «ДокуВики» заполняет его всеми известными зависимостями статьи и затем использует стандартные процедуры для работы с ним. Плагины могут добавлять и изменять эти зависимости до того, как они обработаны. Различными видами зависимостей являются:&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;purge&lt;/code&gt; — очистить кэш;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;age&lt;/code&gt; — очистить кэш, если он старее, чем назначенный возраст (зависящий от значения метаданных &amp;#039;date valid&amp;#039;);&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;files&lt;/code&gt; — очистить кэш, если он старее любого файла, указанного в этом массиве. Могут быть добавлены только локальные файлы. Загляните в &lt;code&gt;&lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=inc%20cache.php&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;search definitions for inc/cache.php&quot;&gt;inc/cache.php&lt;/a&gt;&lt;/code&gt; за списком таких файлов. Возможно наиболее интересно, что скэшированный xhtml зависит от метаданных статьи.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; имя кэша, &lt;code&gt;cache&lt;/code&gt; — уникальный идентификатор, под которым храниться кэш. Обычно зависит от имени статьи, &lt;code&gt;HTTP_HOST&lt;/code&gt; и номера порта сервера. Плагины могут составлять более сложные идентификаторы, например, «&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=plugin:include&quot; class=&quot;wikilink2&quot; title=&quot;plugin:include&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;plugin:include&quot;&gt;Include&lt;/a&gt;» составляет идентификатор, используя имена включаемых статей и имеет или не имеет текущий пользователь права на чтение данных статей. &lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;

&lt;h4 id=&quot;индивидуальной_очистка_кэша_отдельной_статьи&quot;&gt;Индивидуальной очистка кэша отдельной статьи&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Как описано выше, «ДокуВики» проверяет валидность кэша, а не активно сбрасывает кэш. Однако, xhtml-представление статьи зависит от метаданных. То есть, если файл метаданных более свежий, чем кэш, «ДокуВики» определит, что кэш невалиден, и перерендерит (пересоздаст) статью. Таким образом, мы можем обновить метаданные для того, чтобы сбросить кэш.
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;coMULTI&quot;&gt;/* code to expire the cached xhtml of page ns:page
 * $id = &#039;ns:page&#039;;
 * $data = array(&#039;cache&#039; =&amp;gt; &#039;expire&#039;);  // the metadata being added
 * $render = false;                     // no need to re-render metadata now
 * $persistent = false;                 // this change doesn&#039;t need to persist passed the next metadata render.
 */&lt;/span&gt;
p_set_metadata&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$id&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$data&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$render&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$persistent&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0417\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0435_\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;4752-&amp;quot;} --&gt;&lt;div class=&quot;footnotes&quot;&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__1&quot; id=&quot;fn__1&quot; class=&quot;fn_bot&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;По поводу кэширования изображений см. статью «&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:images&quot; class=&quot;wikilink1&quot; title=&quot;wiki:images&quot; data-wiki-id=&quot;wiki:images&quot;&gt;Работа с изображениями и медиафайлами&lt;/a&gt;».&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__2&quot; id=&quot;fn__2&quot; class=&quot;fn_bot&quot;&gt;2)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;Не-UNIX-овые пользователи могут просто открыть этот файл и сохранить его заново — смысл состоит в том, чтобы изменить метку времени изменения файла.&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__3&quot; id=&quot;fn__3&quot; class=&quot;fn_bot&quot;&gt;3)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;&lt;code&gt;conf/dokuwiki.php&lt;/code&gt; и &lt;code&gt;conf/local.php&lt;/code&gt;.&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__4&quot; id=&quot;fn__4&quot; class=&quot;fn_bot&quot;&gt;4)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;&lt;code&gt;inc/parser/parser.php&lt;/code&gt; и &lt;code&gt;inc/parser/handler.php&lt;/code&gt;/&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__5&quot; id=&quot;fn__5&quot; class=&quot;fn_bot&quot;&gt;5)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;&lt;code&gt;inc/parser/xhtml&lt;/code&gt; &amp;amp; &lt;code&gt;inc/parser/metadata&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__6&quot; id=&quot;fn__6&quot; class=&quot;fn_bot&quot;&gt;6)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;где &lt;code&gt;*&lt;/code&gt; — односимвольное название директории, а &lt;code&gt;data&lt;/code&gt; — настраивается в опции «&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:config:savedir&quot; class=&quot;wikilink1&quot; title=&quot;wiki:config:savedir&quot; data-wiki-id=&quot;wiki:config:savedir&quot;&gt;savedir&lt;/a&gt;»&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__7&quot; id=&quot;fn__7&quot; class=&quot;fn_bot&quot;&gt;7)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;&lt;code&gt;inc/cache.php&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Sun, 16 Feb 2025 19:02:58 +0000</pubDate>
        </item>
        <item>
            <title>callgraph</title>
            <link>https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:callgraph&amp;rev=1692266806</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;callgraph&quot;&gt;Callgraph&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Следующее изображение (щелкните, чтобы увеличить) должно дать вам первое, очень грубое представление о том, как страница отображается в «ДокуВики». Образ был создан из вывода xdebug, обработанного с помощью kcachegrind. Отображаются только вызовы с использованием не менее 1% времени всего процесса.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://wwoss.direct.quickconnect.to/lib/exe/fetch.php?media=devel:callgraph.png&quot; class=&quot;media wikilink2&quot; title=&quot;devel:callgraph.png&quot;&gt;&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/exe/fetch.php?w=800&amp;amp;tok=61f9f6&amp;amp;media=devel:callgraph.png&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; title=&quot;DokuWiki CallGraph&quot; alt=&quot;DokuWiki CallGraph&quot; width=&quot;800&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Thu, 17 Aug 2023 10:06:46 +0000</pubDate>
        </item>
        <item>
            <title>common_plugin_functions</title>
            <link>https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:common_plugin_functions&amp;rev=1736451689</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;основные_функции_плагинов&quot;&gt;Основные функции плагинов&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Каждый из реализованных в настоящие время классов плагинов &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=ru:dokuwiki&quot; class=&quot;wikilink2&quot; title=&quot;ru:dokuwiki&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;ru:dokuwiki&quot;&gt;DokuWiki&lt;/a&gt;: &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:syntax_plugins&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:syntax_plugins&quot; data-wiki-id=&quot;wiki:devel:syntax_plugins&quot;&gt;синтаксические&lt;/a&gt;,  &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:admin_plugins&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:admin_plugins&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:admin_plugins&quot;&gt;администрирования&lt;/a&gt;, &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:action_plugins&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:action_plugins&quot; data-wiki-id=&quot;wiki:devel:action_plugins&quot;&gt;действий&lt;/a&gt;, &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:helper_plugins&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:helper_plugins&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:helper_plugins&quot;&gt;вспомонгательные&lt;/a&gt; и &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:renderer_plugins&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:renderer_plugins&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:renderer_plugins&quot;&gt;рендеров&lt;/a&gt; предоставляет общий набор методов и свойств, осуществляющих стандартные возможности по &lt;a href=&quot;#настройки&quot; title=&quot;wiki:devel:common_plugin_functions ↵&quot; class=&quot;wikilink1&quot;&gt;настройке&lt;/a&gt;, &lt;a href=&quot;#самоанализ&quot; title=&quot;wiki:devel:common_plugin_functions ↵&quot; class=&quot;wikilink1&quot;&gt;самоанализу&lt;/a&gt;, &lt;a href=&quot;#локализация&quot; title=&quot;wiki:devel:common_plugin_functions ↵&quot; class=&quot;wikilink1&quot;&gt;локализации&lt;/a&gt; и &lt;a href=&quot;#вывод&quot; title=&quot;wiki:devel:common_plugin_functions ↵&quot; class=&quot;wikilink1&quot;&gt;выводу&lt;/a&gt;.
Эти функции выдают результаты, принимая во внимание локальную конфигурацию и специфичные для DokuWiki требования. 
&lt;/p&gt;

&lt;p&gt;
Эти функции объявлены в фундаментальном классе плагинов, &lt;code&gt;DokuWiki_Plugin&lt;/code&gt;, определенном в файле &lt;code&gt;inc/plugin.php&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Краткое описание этих функций и свойств приведен ниже. 
Наиболее полное и свежее описание можно найти в файле &lt;a href=&quot;http://dev.splitbrain.org/reference/dokuwiki/lib/plugins/base.php.html&quot; class=&quot;urlextern&quot; title=&quot;http://dev.splitbrain.org/reference/dokuwiki/lib/plugins/base.php.html&quot; rel=&quot;ugc nofollow&quot;&gt;base.php&lt;/a&gt; из &lt;a href=&quot;http://dev.splitbrain.org/reference/dokuwiki/&quot; class=&quot;urlextern&quot; title=&quot;http://dev.splitbrain.org/reference/dokuwiki/&quot; rel=&quot;ugc nofollow&quot;&gt;API Reference&lt;/a&gt;,
а также сами исходники можно найти в  
&lt;a href=&quot;http://dev.splitbrain.org/browse/darcs/dokuwiki&quot; class=&quot;urlextern&quot; title=&quot;http://dev.splitbrain.org/browse/darcs/dokuwiki&quot; rel=&quot;ugc nofollow&quot;&gt;Source Repository&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435_\u0444\u0443\u043d\u043a\u0446\u0438\u0438_\u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-1664&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;настройки&quot;&gt;Настройки&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;$conf&lt;/code&gt; — Массив содержащий конфигурационный настройки, в виде setting ⇒ value. Пуст пока не будет наполнен функцией &lt;code&gt;loadConfig()&lt;/code&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;$configloaded&lt;/code&gt; — логическая переменная, выставляется в true функцией &lt;code&gt;loadConfig()&lt;/code&gt; после того, как она установит текущие настройки.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;getConf($setting)&lt;/code&gt; — возвращает значение настройки &lt;code&gt;$setting&lt;/code&gt;, при необходимости вызовет  &lt;code&gt;loadConfig()&lt;/code&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;loadConfig()&lt;/code&gt; — сливает локальные настройки и дефолтные настройки плагина и заполняет массив &lt;code&gt;$this→conf&lt;/code&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;readDefaultSettings()&lt;/code&gt; — читает файл настроек по умолчанию, &lt;code&gt;lib/plugins/&amp;lt;plugin_name&amp;gt;/conf/default.php&lt;/code&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Настройки конфигурации конкретного плагина хранятся в файле локальных настроек  local.php и в файле специфичном для данного плагина default.php (см. &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:plugin_file_structure&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:plugin_file_structure&quot; data-wiki-id=&quot;wiki:devel:plugin_file_structure&quot;&gt;структура файлов плагина&lt;/a&gt;).
&lt;/p&gt;

&lt;p&gt;
Если плагин работает со своими настройками с помощью этих функций, то администратор wiki сможет интерактивно управлять настройками с помощью &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=ru:plugin:config&quot; class=&quot;wikilink2&quot; title=&quot;ru:plugin:config&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;ru:plugin:config&quot;&gt;Менеджера конфигурации&lt;/a&gt;. О том как сказать Менеджеру конфигурации, что делать с вашими  настройками, смотри  &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=ru:configuration#configuration_metadata&quot; class=&quot;wikilink2&quot; title=&quot;ru:configuration&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;ru:configuration&quot;&gt;Configuration Metadata&lt;/a&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;1665-3500&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;самоанализ&quot;&gt;Самоанализ&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;getPluginType()&lt;/code&gt; — возвращает тип плагина, т.е.  &lt;code&gt;syntax&lt;/code&gt;, &lt;code&gt;admin&lt;/code&gt; or &lt;code&gt;action&lt;/code&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;getPluginName()&lt;/code&gt; — возвращает имя плагина.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;getPluginComponent()&lt;/code&gt; — возвращает имя компонента плагина.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0421\u0430\u043c\u043e\u0430\u043d\u0430\u043b\u0438\u0437&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0441\u0430\u043c\u043e\u0430\u043d\u0430\u043b\u0438\u0437&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;3501-3823&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;локализация&quot;&gt;Локализация&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
О том, где хранятся локализованные строки и файлы, см. плагин &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=ru:devel:plugin_file_structure&quot; class=&quot;wikilink2&quot; title=&quot;ru:devel:plugin_file_structure&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;ru:devel:plugin_file_structure&quot;&gt;plugin_file_structure&lt;/a&gt;.
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;$lang&lt;/code&gt; — Массив содержащий локализованные строки плагина, в виде id ⇒ localised string, может содержать английские строки, в случае, если локализованной версии не существует. Пуст пока не будет заполнен функцией  &lt;code&gt;setupLocale()&lt;/code&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;$localised&lt;/code&gt; — логическая переменная, выставляется в true функцией &lt;code&gt;setupLocale()&lt;/code&gt; после того, как она заполнит массив  &lt;code&gt;$this→lang&lt;/code&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;getLang($id)&lt;/code&gt; — возвращает локализованную строку соответствующую &lt;code&gt;$id&lt;/code&gt;, или английскую строку если локализованная версия отсутствует. При необходимости вызовет функцию &lt;code&gt;setupLocale()&lt;/code&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;locale_xhtml($id)&lt;/code&gt; — использует движок рендеринга DokuWiki, для того чтобы возвратить xhtml, созданный из локализованного файла &lt;code&gt;$id&lt;/code&gt;, содержащий разметку DokuWiki.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;setupLocale()&lt;/code&gt; — заполняет массив &lt;code&gt;$this→lang&lt;/code&gt; в соответствии с настройками локализации.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041b\u043e\u043a\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043b\u043e\u043a\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;3824-5371&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;вывод&quot;&gt;Вывод&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;email()&lt;/code&gt; — выводит ссылку на адрес почты в соответствии с текущими настройками «шифрации».&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;external_link()&lt;/code&gt; — выводит внешнюю ссылку в соответствии с текущими настройками target.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;render()&lt;/code&gt; — применяет парсер для того, чтобы разобрать и вывести строку содержащую разметку wiki.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
См.также &lt;a href=&quot;https://www.dokuwiki.org/ru:devel:common_plugin_functions?do=edit&quot; class=&quot;urlextern&quot; title=&quot;https://www.dokuwiki.org/ru:devel:common_plugin_functions?do=edit&quot; rel=&quot;ugc nofollow&quot;&gt;https://www.dokuwiki.org/ru:devel:common_plugin_functions?do=edit&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0412\u044b\u0432\u043e\u0434&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0432\u044b\u0432\u043e\u0434&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;5372-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Thu, 09 Jan 2025 19:41:29 +0000</pubDate>
        </item>
        <item>
            <title>configuration</title>
            <link>https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:configuration&amp;rev=1735912503</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;конфигурация&quot;&gt;Конфигурация&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
DokuWiki позволяет создавать очень гибкие &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:plugins&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:plugins&quot; data-wiki-id=&quot;wiki:devel:plugins&quot;&gt;плагины&lt;/a&gt; и &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:templates&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:templates&quot; data-wiki-id=&quot;wiki:devel:templates&quot;&gt;шаблоны&lt;/a&gt; делая их легко настраиваемыми..
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-228&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;default_settings&quot;&gt;Default Settings&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Чтобы сделать плагин или шаблон настраиваемым, необходимо предоставить &lt;code&gt;lib/plugins/&amp;lt;plugin&amp;gt;/conf/default.php&lt;/code&gt; который будет содержать настройки по умолчанию, и &lt;code&gt;lib/plugins/&amp;lt;plugin&amp;gt;/conf/metadata.php&lt;/code&gt; который содержит описывающие &lt;a href=&quot;#configuration_metadata&quot; title=&quot;wiki:devel:configuration ↵&quot; class=&quot;wikilink1&quot;&gt;метаданные конфигурации&lt;/a&gt; используемые &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:plugin:config&quot; class=&quot;wikilink1&quot; title=&quot;wiki:plugin:config&quot; data-wiki-id=&quot;wiki:plugin:config&quot;&gt;диспетчером конфигурации&lt;/a&gt; для обработки/отображения параметров &lt;sup&gt;&lt;a href=&quot;#fn__1&quot; id=&quot;fnt__1&quot; class=&quot;fn_top&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt;.
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$conf&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;lt;&lt;/span&gt;setting&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;lt;&lt;/span&gt;value&lt;span class=&quot;sy0&quot;&gt;&amp;gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Default Settings&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;default_settings&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;229-998&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;конфигурационные_метаданные&quot;&gt;Конфигурационные метаданные&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Для каждого параметра &lt;code&gt;lib/plugins/&amp;lt;your plugin&amp;gt;/conf/default.php&lt;/code&gt; должно быть &lt;code&gt;$meta[&amp;lt;setting&amp;gt;]&lt;/code&gt; значение, определенное в &lt;code&gt;lib/plugins/&amp;lt;your plugin&amp;gt;/conf/metadata.php&lt;/code&gt;&lt;sup&gt;&lt;a href=&quot;#fn__2&quot; id=&quot;fnt__2&quot; class=&quot;fn_top&quot;&gt;2)&lt;/a&gt;&lt;/sup&gt;:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$meta&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;lt;&lt;/span&gt;setting&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;lt;&lt;/span&gt;setting class&lt;span class=&quot;sy0&quot;&gt;&amp;gt;,&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;lt;&lt;/span&gt;param name&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;lt;&lt;/span&gt;param value&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Если для класса настроек не требуется никаких параметров (см. ниже), то это просто:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$meta&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;lt;&lt;/span&gt;setting&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;lt;&lt;/span&gt;setting class&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Примеры:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$meta&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;_basic&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;     &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;fieldset&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$meta&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;title&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;      &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;string&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$meta&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;lang&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;       &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;dirchoice&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;_dir&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; DOKU_INC&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;inc/lang/&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$meta&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;dmode&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;      &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;numeric&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;_pattern&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;/0[0-7]{3,4}/&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;// only accept octal representation&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$meta&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;allowdebug&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;onoff&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$meta&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;passcrypt&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;  &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;multichoice&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;_choices&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;smd5&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;md5&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;sha1&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;ssha&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;crypt&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;mysql&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;my411&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435_\u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;999-2213&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit4&quot; id=&quot;классы&quot;&gt;Классы&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit5&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;&amp;#039;&amp;#039;&lt;/code&gt;               &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; DКласс по умолчанию («настройка»), текстовая область, минимальная проверка входных данных, вывод настроек в кавычках.                                                                                                                                           &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;&amp;#039;string&amp;#039;&lt;/code&gt;         &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Ввод текста в одну строку, минимальная проверка ввода, вывод в кавычках.                                                                                                                                                     &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;&amp;#039;numeric&amp;#039;&lt;/code&gt;        &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Ввод текста, принимает числа и арифметические операторы, установка вывода без кавычек.&lt;br/&gt;
Если заданы параметры &lt;code&gt;_min&lt;/code&gt; и &lt;code&gt;_max&lt;/code&gt; используются для проверки.                                                                           &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;&amp;#039;numericopt&amp;#039;&lt;/code&gt;     &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; То же, что и выше, но принимает пустые значения.                                                                                                                                                                                              &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;&amp;#039;onoff&amp;#039;&lt;/code&gt;          &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Входные данные флажка, выходные данные настройки &lt;code&gt;0&lt;/code&gt; или &lt;code&gt;1&lt;/code&gt; (обратите внимание, что значения по умолчанию должны быть одним из этих целых чисел, а не логическим значением)..                                                                                                                 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;&amp;#039;multichoice&amp;#039;&lt;/code&gt;    &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Выберите входные данные (единственный выбор), установите выходные данные в кавычках, обязательный &lt;code&gt;_choices&lt;/code&gt; параметр.                                                                                                                                             &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row6&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;&amp;#039;email&amp;#039;&lt;/code&gt;          &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Ввод текста, ввод должен соответствовать формату адреса электронной почты, вывод должен быть заключен в кавычки.                                                                                                                                                                                                                                    &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row7&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;&amp;#039;password&amp;#039;&lt;/code&gt;       &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; Ввод пароля, минимальная проверка ввода, настройка вывода обычного текста в кавычках. После установки пароль больше не отображается в менеджере конфигурации. Может быть запутан в конфигурации через &lt;code&gt;_code&lt;/code&gt; параметр.&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row8&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;&amp;#039;dirchoice&amp;#039;&lt;/code&gt;      &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Как &lt;code&gt;multichoice&lt;/code&gt;, варианты выбора основаны на папках, найденных в месте, указанном в &lt;code&gt;_dir&lt;/code&gt; параметре (обязательно).                                                                                                                       &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row9&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;&amp;#039;multicheckbox&amp;#039;&lt;/code&gt;  &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Флажок для каждого варианта плюс строковый ввод «другое», настройка файла конфигурации представляет собой список отмеченных вариантов, разделенных запятыми.                                                                                                         &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row10&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;&amp;#039;fieldset&amp;#039;&lt;/code&gt;       &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; Используется для группировки настроек конфигурации, но сам по себе не является настройкой. Чтобы это было понятно в языковых файлах, ключи для этого типа должны начинаться с &lt;code&gt;_&lt;/code&gt;.&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row11&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;&amp;#039;authtype&amp;#039;&lt;/code&gt;       &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Создает выборку доступных методов аутентификации на основе имен классов, &lt;code&gt;inc/auth&lt;/code&gt; соответствующих шаблону &lt;code&gt;authtype.class.php&lt;/code&gt;.                                                                                           &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row12&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;&amp;#039;array&amp;#039;&lt;/code&gt;          &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; простой (одномерный) массив строковых значений, отображаемый в виде списка, разделенного запятыми, в диспетчере конфигурации, но сохраняемый как PHP array(). Значения не могут содержать запятые. &lt;code&gt;_patter&lt;/code&gt; nподдерживается сопоставление значений массива.&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row13&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;&amp;#039;regex&amp;#039;&lt;/code&gt;          &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Строка регулярного выражения, обычно без разделителей; как и для &lt;code&gt;string&lt;/code&gt;, дополнительно протестировано, чтобы увидеть, будет ли компилироваться и запускаться как регулярное выражение. В дополнение к &lt;code&gt;_pattern&lt;/code&gt;,  также принимает &lt;code&gt;_delimiter&lt;/code&gt; (default &lt;code&gt;/&lt;/code&gt;) и &lt;code&gt;_pregflags&lt;/code&gt; (default &lt;code&gt;ui&lt;/code&gt;).  &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;2238-7808&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041a\u043b\u0430\u0441\u0441\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043a\u043b\u0430\u0441\u0441\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;2214-7810&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit6&quot; id=&quot;параметры&quot;&gt;Параметры&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit7&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;&amp;#039;_pattern&amp;#039;&lt;/code&gt;    &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Строка, регулярное выражение. Ввод проверяется на соответствие этому шаблону перед принятием.&lt;br/&gt;
Необязательно для всех классов, кроме &lt;code&gt;onoff&lt;/code&gt;, &lt;code&gt;multichoice&lt;/code&gt; и &lt;code&gt;dirchoice&lt;/code&gt; которые его игнорируют.                                                                                                                                                                                                                                      &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;&amp;#039;_choices&amp;#039;&lt;/code&gt;    &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Массив вариантов выбора. Используется для заполнения поля выбора. Выбор будет заменен локализованной языковой строкой, индексированной по &lt;code&gt;&amp;lt;setting name&amp;gt;_o_&amp;lt;choice&amp;gt;&lt;/code&gt;, если она существует.&lt;br/&gt;
Требуется для &lt;code&gt;multichoice&lt;/code&gt; &amp;amp; &lt;code&gt;multicheckbox&lt;/code&gt; классов, игнорируется другими.                                                                                                                                                                    &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;&amp;#039;_dir&amp;#039;&lt;/code&gt;        &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Расположение каталога, который будет использоваться для заполнения списка выбора.&lt;br/&gt;
Требуется &lt;code&gt;dirchoice&lt;/code&gt; классом, игнорируется другими классами.                                                                                                                                                                                                                                                                                           &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;&amp;#039;_code&amp;#039;&lt;/code&gt;       &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Устанавливает опцию запутывания для полей пароля. Может быть &lt;code&gt;plain&lt;/code&gt;, &lt;code&gt;base64&lt;/code&gt; или &lt;code&gt;uuencode&lt;/code&gt;. При использовании последних двух вам необходимо использовать conf_decodeString() для доступа к простому значению..                                                                                                                                                                                                               &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;&amp;#039;_combine&amp;#039;&lt;/code&gt;    &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Дополнительные выходные значения настроек, которые можно объединить в один дисплей &lt;code&gt;checkbox.&lt;/code&gt;&lt;br/&gt;
 Необязательно для &lt;code&gt;multicheckbox&lt;/code&gt;, игнорируется другими классами.                                                                                                                                                                                                                                                            &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;&amp;#039;_code&amp;#039;&lt;/code&gt;       &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Метод кодирования, допустимые значения: &lt;code&gt;base64&lt;/code&gt;, &lt;code&gt;uuencode&lt;/code&gt;, &lt;code&gt;plain&lt;/code&gt;. По умолчанию — обычный.                                                                                                                                                                                                                                                                                                                   &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row6&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;&amp;#039;_min&amp;#039;&lt;/code&gt;        &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Минимальное числовое значение.&lt;br/&gt;
Необязательно для &lt;code&gt;numeric&lt;/code&gt; и &lt;code&gt;numericopt&lt;/code&gt;, игнорируется другими.                                                                                                                                                                                                                                                                                                                            &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row7&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;&amp;#039;_max&amp;#039;&lt;/code&gt;        &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Максимальное числовое значение.&lt;br/&gt;
Необязательно для &lt;code&gt;numeric&lt;/code&gt; и &lt;code&gt;numericopt&lt;/code&gt;, игнорируется другими.                                                                                                                                                                                                                                                                                                                            &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row8&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;&amp;#039;_delimiter&amp;#039;&lt;/code&gt;  &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Строка, по умолчанию &lt;code&gt;/&lt;/code&gt; — один символ, используемый в качестве разделителя для проверки входных значений регулярного выражения.                                                                                                                                                                                                                                                                                                                   &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row9&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;&amp;#039;_pregflags&amp;#039;&lt;/code&gt;  &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Строка, по умолчанию &lt;code&gt;ui&lt;/code&gt;, допустимые модификаторы шаблона preg, используемые при тестировании входных значений регулярных выражений, для получения дополнительной информации см. &lt;a href=&quot;http://uk1.php.net/manual/en/reference.pcre.pattern.modifiers.php&quot; class=&quot;urlextern&quot; title=&quot;http://uk1.php.net/manual/en/reference.pcre.pattern.modifiers.php&quot; rel=&quot;ugc nofollow&quot;&gt;http://uk1.php.net/manual/en/reference.pcre.pattern.modifiers.php&lt;/a&gt;.                                                                                                                                                                                                                          &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row10&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;&amp;#039;_multiple&amp;#039;&lt;/code&gt;   &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Bool, разрешить несколько значений email, разделенных запятыми.&lt;br/&gt;
 Необязательно для &lt;code&gt;email&lt;/code&gt;, игнорируется другими.                                                                                                                                                                                                                                                                                                                   &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row11&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;&amp;#039;_other&amp;#039;&lt;/code&gt;      &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Как обрабатывать другие значения (не перечисленные в &lt;code&gt;_choices&lt;/code&gt;). Принятые значения: &lt;code&gt;always&lt;/code&gt;, &lt;code&gt;exists&lt;/code&gt;, &lt;code&gt;never&lt;/code&gt;. Значение по умолчанию &lt;code&gt;always&lt;/code&gt;.&lt;br/&gt;
&lt;code&gt;exists&lt;/code&gt; показывает поле ввода «другое», только если настройка содержит значение(я), не перечисленное в вариантах (например, из-за ручного редактирования или обновления, изменяющегоg &lt;code&gt;_choices&lt;/code&gt;).  Это безопаснее, чем &lt;code&gt;never&lt;/code&gt;  так как не отбрасывает неизвестные/другие значения.&lt;br/&gt;
Необязательно для &lt;code&gt;multicheckbox&lt;/code&gt;, игнорируется другими.  &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table1&amp;quot;,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;7841-14907&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;7811-14909&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit8&quot; id=&quot;примеры&quot;&gt;Примеры&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;/div&gt;

&lt;h4 id=&quot;multicheckbox_с_other&quot;&gt;&amp;#039;&amp;#039;multicheckbox&amp;#039;&amp;#039; с &amp;#039;&amp;#039;_other&amp;#039;&amp;#039;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Предположим, изначально плагин использует следующий синтаксис:x:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$meta&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;multi&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;multicheckbox&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;_choices&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;a&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;b&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;c&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;d&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
это означает, что в поле с несколькими флажками будут отображаться четыре варианта выбора и строковое поле ввода.
&lt;/p&gt;

&lt;p&gt;
Предположим также, что пользователь вставляет одно или несколько дополнительных значений, отсутствующих в &lt;code&gt;_choices&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
В следующем выпуске плагина авторский плагин решает использовать multicheckbox без дополнительной строки, но, в целях обратной совместимости, принимает:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$meta&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;multi&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;multicheckbox&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;_other&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;exists&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;_choices&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;a&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;b&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;c&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;d&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
что означает:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; если пользователь ввел значения, разделенные запятыми, они будут напечатаны в дополнительной строке;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; в противном случае дополнительная строка не будет отображаться.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Обратите внимание также, что если пользователь вставляет разделенные запятыми значения, которые уже существуют (или некоторые из них), в &lt;code&gt;_choices&lt;/code&gt;:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; они уже отмечены, то лишняя строка будет удалена и ничего больше;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; если они еще не отмечены, то лишняя строка будет удалена и отмечено относительное значение.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u0440\u0438\u043c\u0435\u0440\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u0440\u0438\u043c\u0435\u0440\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;14910-16909&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit9&quot; id=&quot;доступ_к_настройкам&quot;&gt;Доступ к настройкам&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0414\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0434\u043e\u0441\u0442\u0443\u043f_\u043a_\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:6,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;16910-16958&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit10&quot; id=&quot;основные_настройки&quot;&gt;Основные настройки&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Внутри &lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/images/smileys/magnifier-left.png&quot; class=&quot;icon smiley&quot; alt=&quot;:&amp;amp;13:&quot; /&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:xref:dokuwiki:inc:init.php&quot; class=&quot;wikilink1&quot; title=&quot;wiki:xref:dokuwiki:inc:init.php&quot; data-wiki-id=&quot;wiki:xref:dokuwiki:inc:init.php&quot;&gt;init.php&lt;/a&gt; настройки конфигурации считываются в &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:environment&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:environment&quot; data-wiki-id=&quot;wiki:devel:environment&quot;&gt;глобальный массив&lt;/a&gt; &lt;code&gt;$conf[]&lt;/code&gt;. Если настройки не заданы, они считываются из файла настроек по умолчанию. Вы можете получить доступ к основным настройкам в любом месте, используя &lt;code&gt;$conf[]&lt;/code&gt; массив.
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$startpage&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$conf&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;start&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435_\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:6,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;16959-17554&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit11&quot; id=&quot;настройки_плагина&quot;&gt;Настройки плагина&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Вы можете получить доступ к настройкам &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:plugins&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:plugins&quot; data-wiki-id=&quot;wiki:devel:plugins&quot;&gt;плагина&lt;/a&gt; используя &lt;code&gt;$this-&amp;gt; 
 &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=getConf&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;search definitions for getConf&quot;&gt;getConf(&amp;#039;&amp;lt;setting&amp;gt;&amp;#039;)&lt;/a&gt;&lt;/code&gt; метод. 
В классе вашего плагина используете:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$keyvalue&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;getConf&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;key&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0430&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438_\u043f\u043b\u0430\u0433\u0438\u043d\u0430&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:7,&amp;quot;secid&amp;quot;:11,&amp;quot;range&amp;quot;:&amp;quot;17555-17906&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit12&quot; id=&quot;настройки_шаблона&quot;&gt;Настройки шаблона&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
В &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:templates&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:templates&quot; data-wiki-id=&quot;wiki:devel:templates&quot;&gt; шаблонах&lt;/a&gt; можно использовать &lt;code&gt;&lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=tpl_getConf&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for tpl_getConf&quot;&gt;tpl_getConf(&amp;#039;&amp;lt;setting&amp;gt;&amp;#039;)&lt;/a&gt;&lt;/code&gt;.
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$nicetoknow&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; tpl_getConf&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;special&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u0430&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438_\u0448\u0430\u0431\u043b\u043e\u043d\u0430&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:8,&amp;quot;secid&amp;quot;:12,&amp;quot;range&amp;quot;:&amp;quot;17907-18130&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit13&quot; id=&quot;метки_в_диспетчере_конфигураций&quot;&gt;Метки в диспетчере конфигураций&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Для каждого параметра в &lt;code&gt;lib/plugins/&amp;lt;your plugin&amp;gt;/conf/default.php&lt;/code&gt; может быть &lt;code&gt;$lang[&amp;lt;setting&amp;gt;]&lt;/code&gt; определено значение в &lt;code&gt;lib/plugins/&amp;lt;your plugin&amp;gt;/lang/en/settings.php&lt;/code&gt;. Это значение будет отображаться как метка параметра в диспетчере конфигурации. Если файл метки пропущен или не содержит значения для параметра, диспетчер конфигурации отобразит «&lt;code&gt;plugin &amp;lt;plugin name&amp;gt; &amp;lt;setting&amp;gt;&lt;/code&gt;» в качестве метки.. 
&lt;/p&gt;

&lt;p&gt;
Вы также можете создать &lt;code&gt;settings.php&lt;/code&gt; файл для других языков. 
&lt;/p&gt;

&lt;p&gt;
Опять же, это относится и к шаблонам (более подробную информацию см. в &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:localization&quot; class=&quot;wikilink1&quot; title=&quot;wiki:localization&quot; data-wiki-id=&quot;wiki:localization&quot;&gt;Локализация&lt;/a&gt;).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041c\u0435\u0442\u043a\u0438 \u0432 \u0434\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043c\u0435\u0442\u043a\u0438_\u0432_\u0434\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440\u0435_\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:9,&amp;quot;secid&amp;quot;:13,&amp;quot;range&amp;quot;:&amp;quot;18131-&amp;quot;} --&gt;&lt;div class=&quot;footnotes&quot;&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__1&quot; id=&quot;fn__1&quot; class=&quot;fn_bot&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;шаблоны аналогичны lib/tpl/&amp;lt;template&amp;gt;/conf/default.php и т.д.&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__2&quot; id=&quot;fn__2&quot; class=&quot;fn_bot&quot;&gt;2)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;Для шаблонов все полностью аналогично: lib/tpl/&amp;lt;your template&amp;gt;/conf/default.phpи lib/tpl/&amp;lt;your template&amp;gt;/conf/metadata.php.&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Fri, 03 Jan 2025 13:55:03 +0000</pubDate>
        </item>
        <item>
            <title>counter</title>
            <link>https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:counter&amp;rev=1737238788</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;счетчик_посещений_сайта_dokuwiki&quot;&gt;Счетчик посещений сайта Dokuwiki&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Простейший счетчик для сайта (подсчет посещения любой страницы) без базы данных. Существует масса способов реализации счетчика просмотров страницы на PHP и в основном они работают с базой данных. Но если вам нужно прикрутить по-быстрому к одной странице счетчик посещений, то этот скрипт будет вам полезен. БД он не использует, а создает текстовый файл, в котором и хранит информацию о количестве просмотров. И, как обычно, предлагаю посмотреть как это выглядит на фото или в низу станицы.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://wwoss.direct.quickconnect.to/lib/exe/detail.php?id=wiki%3Adevel%3Acounter&amp;amp;media=wiki:devel:counter_1.png&quot; class=&quot;media&quot; title=&quot;wiki:devel:counter_1.png&quot;&gt;&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/exe/fetch.php?media=wiki:devel:counter_1.png&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Код счетчика
&lt;/p&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=wiki:devel:counter&amp;amp;codeblock=0&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_&quot;&gt;PHP&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt; 
&lt;span class=&quot;re0&quot;&gt;$file&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/file&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;file&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;count.txt&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$count&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/implode&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;implode&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$file&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$count&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;++;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$myfile&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/fopen&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;fopen&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;count.txt&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;w&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;a href=&quot;http://www.php.net/fputs&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;fputs&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$myfile&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$count&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;a href=&quot;http://www.php.net/fclose&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;fclose&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$myfile&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;sy1&quot;&gt;?&amp;gt;&lt;/span&gt;
&amp;lt;span&amp;gt;Просмотров: &lt;span class=&quot;sy1&quot;&gt;&amp;lt;?=&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$count&lt;/span&gt; &lt;span class=&quot;sy1&quot;&gt;?&amp;gt;&lt;/span&gt;&amp;lt;/span&amp;gt; // вывод счетчика&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;p&gt;
Править будем файл &lt;code&gt;tpl_footer&lt;/code&gt; расположенный &lt;code&gt;Dokuwiki\lib\tpl\dokuwiki&lt;/code&gt; с добавление стиля:
&lt;/p&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=wiki:devel:counter&amp;amp;codeblock=1&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_&quot;&gt;CSS&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code css&quot;&gt;&lt;span class=&quot;re1&quot;&gt;.container&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;absolute&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;font-family&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; Georgia&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;Times New Roman&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; Times&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;serif&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;re1&quot;&gt;.text-block&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;absolute&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;bottom&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;re3&quot;&gt;0px&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;right&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;re3&quot;&gt;4px&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;black&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;p&gt;
в файле &lt;code&gt;tpl_footer&lt;/code&gt; добавляем в блок &lt;code&gt;&amp;lt;div class=&amp;quot;buttons&amp;quot;&amp;gt;&lt;/code&gt; нижеприведенный код PHP
&lt;div class=&quot;stepbystep&quot;&gt;
&lt;button id=&quot;развернуть_панель_с_к�&quot; class=&quot;stepbystep_collapsible&quot;&gt;Развернуть панель с кодом .&lt;/button&gt;
&lt;div class=&quot;stepbystep_content&quot;&gt;

&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=wiki:devel:counter&amp;amp;codeblock=2&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_&quot;&gt;PHP&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code php&quot;&gt;        &amp;lt;a&amp;gt;
            &lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt; 
                &lt;span class=&quot;re0&quot;&gt;$file&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/file&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;file&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;count.txt&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;re0&quot;&gt;$count&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/implode&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;implode&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$file&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;re0&quot;&gt;$count&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;++;&lt;/span&gt;
                &lt;span class=&quot;re0&quot;&gt;$myfile&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/fopen&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;fopen&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;count.txt&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;w&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
                &lt;a href=&quot;http://www.php.net/fputs&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;fputs&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$myfile&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$count&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
                &lt;a href=&quot;http://www.php.net/fclose&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;fclose&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$myfile&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;sy1&quot;&gt;?&amp;gt;&lt;/span&gt;
        &amp;lt;style&amp;gt;
            .container {
            position: absolute;
            font-family: Georgia, &#039;Times New Roman&#039;, Times, serif;
            }
            .text-block {
            position: absolute;
            bottom: 0px;
            right: 4px;
            color: black;
            }
        &amp;lt;/style&amp;gt;
            &amp;lt;a class=&amp;quot;container&amp;quot;&amp;gt;
                &amp;lt;span&amp;gt;&amp;lt;img src=&amp;quot;&lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;echo&lt;/span&gt; tpl_basedir&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;sy1&quot;&gt;?&amp;gt;&lt;/span&gt;images/button-yandex.png&amp;quot; width=&amp;quot;85&amp;quot; height=&amp;quot;15&amp;quot; alt=&amp;quot;yandex&amp;quot; / &amp;gt;
                    &amp;lt;div class=&amp;quot;text-block&amp;quot;&amp;gt;&lt;span class=&quot;sy1&quot;&gt;&amp;lt;?=&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$count&lt;/span&gt; &lt;span class=&quot;sy1&quot;&gt;?&amp;gt;&lt;/span&gt;&amp;lt;/div&amp;gt;
                &amp;lt;/span&amp;gt;
            &amp;lt;/a&amp;gt;
        &amp;lt;/a&amp;gt;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;


&lt;/div&gt;
&lt;/div&gt;

&lt;a href=&quot;https://wwoss.direct.quickconnect.to/lib/exe/detail.php?id=wiki%3Adevel%3Acounter&amp;amp;media=wiki:devel:counter_2.png&quot; class=&quot;media&quot; title=&quot;wiki:devel:counter_2.png&quot;&gt;&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/exe/fetch.php?media=wiki:devel:counter_2.png&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;br/&gt;

&lt;/p&gt;

&lt;p&gt;
В папку с картинками загружаем нашу иконку с размером 80px x 12px. и в строке кода &lt;code&gt;&amp;lt;img src=&amp;quot;&amp;lt;?php echo tpl_basedir(); ?&amp;gt;images/button-yandex.png&amp;quot; width=&amp;quot;85&amp;quot; height=&amp;quot;15&amp;quot; alt=&amp;quot;yandex&amp;quot; / &amp;gt;&lt;/code&gt; прописываем путь к картинке. В моем случае это папка с &lt;code&gt;шаблонами/картинки/&lt;/code&gt;.&lt;br/&gt;

&lt;/p&gt;

&lt;p&gt;
Я не стал стили (необходимы для наложения текста на картинку) выносить пока в отдельный файл, чтобы было все для примера в одном месте.&lt;br/&gt;

Тут добавлен блок-контейнер (&lt;code&gt;&amp;lt;a class=&amp;quot;container&amp;quot;&amp;gt;&lt;/code&gt;) для позиционирования в основном блоке (&lt;code&gt;&amp;lt;div class=&amp;quot;buttons&amp;quot;&amp;gt;&lt;/code&gt;) шаблона и добавления шрифта и цвета текста. &lt;code&gt;$file = file(&amp;quot;count.txt&amp;quot;);&lt;/code&gt; создает файл в корне Dokuwiki с записями о посещении страниц, при желании можете изменить ее расположение.
&lt;/p&gt;

&lt;p&gt;
&lt;div class=&quot;stepbystep&quot;&gt;
&lt;button id=&quot;развернуть_весь_код_ф�&quot; class=&quot;stepbystep_collapsible&quot;&gt;Развернуть весь код файла &amp;#039;&amp;#039;tpl_footer&amp;#039;&amp;#039; после изменения:&lt;/button&gt;
&lt;div class=&quot;stepbystep_content&quot;&gt;

&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=wiki:devel:counter&amp;amp;codeblock=3&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_&quot;&gt;PHP&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class=&quot;co4&quot;&gt;/**
 * Template footer, included in the main and detail files
 */&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// must be run from within DokuWiki&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;&lt;a href=&quot;http://www.php.net/defined&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;defined&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;DOKU_INC&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/die&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;die&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;sy1&quot;&gt;?&amp;gt;&lt;/span&gt;
&amp;nbsp;
&amp;lt;!-- ********** FOOTER ********** --&amp;gt;
&amp;lt;footer id=&amp;quot;dokuwiki__footer&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;pad&amp;quot;&amp;gt;
    &amp;lt;div class=&amp;quot;license&amp;quot;&amp;gt;Если не указано иное, содержимое этой вики предоставляется на&amp;amp;nbsp;условиях следующей лицензии: &amp;lt;bdi&amp;gt;&amp;lt;a href=&amp;quot;doku.php?id=public_domain_mark&amp;quot; rel=&amp;quot;license&amp;quot; class=&amp;quot;urlextern&amp;quot;&amp;gt;Public Domain&amp;lt;/a&amp;gt;&amp;lt;/bdi&amp;gt;&amp;lt;/div&amp;gt;
&amp;nbsp;
    &amp;lt;div class=&amp;quot;buttons&amp;quot;&amp;gt;
        &amp;lt;a href=&amp;quot;https://php.net&amp;quot; title=&amp;quot;Powered by PHP&amp;quot; &lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$target&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;?&amp;gt;&lt;/span&gt;&amp;gt;&amp;lt;img
            src=&amp;quot;&lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;echo&lt;/span&gt; tpl_basedir&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;sy1&quot;&gt;?&amp;gt;&lt;/span&gt;images/button-php.gif&amp;quot; width=&amp;quot;80&amp;quot; height=&amp;quot;15&amp;quot; alt=&amp;quot;Powered by PHP&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;
        &amp;lt;a href=&amp;quot;//validator.w3.org/check/referer&amp;quot; title=&amp;quot;Valid HTML5&amp;quot; &lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$target&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;?&amp;gt;&lt;/span&gt;&amp;gt;&amp;lt;img
            src=&amp;quot;&lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;echo&lt;/span&gt; tpl_basedir&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;sy1&quot;&gt;?&amp;gt;&lt;/span&gt;images/button-html5.png&amp;quot; width=&amp;quot;80&amp;quot; height=&amp;quot;15&amp;quot; alt=&amp;quot;Valid HTML5&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;
        &amp;lt;a href=&amp;quot;//jigsaw.w3.org/css-validator/check/referer?profile=css3&amp;quot; title=&amp;quot;Valid CSS&amp;quot; &lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$target&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;?&amp;gt;&lt;/span&gt;&amp;gt;&amp;lt;img
            src=&amp;quot;&lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;echo&lt;/span&gt; tpl_basedir&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;sy1&quot;&gt;?&amp;gt;&lt;/span&gt;images/button-css.png&amp;quot; width=&amp;quot;80&amp;quot; height=&amp;quot;15&amp;quot; alt=&amp;quot;Valid CSS&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;
        &amp;lt;a href=&amp;quot;https://dokuwiki.org/&amp;quot; title=&amp;quot;Driven by DokuWiki&amp;quot; &lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$target&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;?&amp;gt;&lt;/span&gt;&amp;gt;&amp;lt;img
            src=&amp;quot;&lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;echo&lt;/span&gt; tpl_basedir&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;sy1&quot;&gt;?&amp;gt;&lt;/span&gt;images/button-dw.png&amp;quot; width=&amp;quot;80&amp;quot; height=&amp;quot;15&amp;quot;
            alt=&amp;quot;Driven by DokuWiki&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;
        &amp;lt;a&amp;gt;
            &lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt; 
                &lt;span class=&quot;re0&quot;&gt;$file&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/file&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;file&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;count.txt&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;re0&quot;&gt;$count&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/implode&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;implode&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$file&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;re0&quot;&gt;$count&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;++;&lt;/span&gt;
                &lt;span class=&quot;re0&quot;&gt;$myfile&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/fopen&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;fopen&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;count.txt&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;w&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
                &lt;a href=&quot;http://www.php.net/fputs&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;fputs&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$myfile&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$count&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
                &lt;a href=&quot;http://www.php.net/fclose&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;fclose&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$myfile&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
				&lt;span class=&quot;re0&quot;&gt;$filename&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/file&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;file&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;stat.txt&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;sy1&quot;&gt;?&amp;gt;&lt;/span&gt;
        &amp;lt;style&amp;gt;
            .container {
            position: absolute;
            font-family: Georgia, &#039;Times New Roman&#039;, Times, serif;
            }
            .text-block {
            position: absolute;
            bottom: 0px;
            right: 4px;
            color: black;
            }
        &amp;lt;/style&amp;gt;
            &amp;lt;a class=&amp;quot;container&amp;quot;&amp;gt;
                &amp;lt;span&amp;gt;&amp;lt;img src=&amp;quot;&lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;echo&lt;/span&gt; tpl_basedir&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;sy1&quot;&gt;?&amp;gt;&lt;/span&gt;images/button-yandex.png&amp;quot; width=&amp;quot;85&amp;quot; height=&amp;quot;15&amp;quot; alt=&amp;quot;yandex&amp;quot; / &amp;gt;
                    &amp;lt;div class=&amp;quot;text-block&amp;quot;&amp;gt;&lt;span class=&quot;sy1&quot;&gt;&amp;lt;?=&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$count&lt;/span&gt; &lt;span class=&quot;sy1&quot;&gt;?&amp;gt;&lt;/span&gt;&amp;lt;/div&amp;gt;
                &amp;lt;/span&amp;gt;
            &amp;lt;/a&amp;gt;
        &amp;lt;/a&amp;gt;
    &amp;lt;/div&amp;gt;
    &lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt; tpl_includeFile&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;footer.html&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;sy1&quot;&gt;?&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt;
	    &lt;span class=&quot;re0&quot;&gt;$client&lt;/span&gt;  &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$_SERVER&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;HTTP_CLIENT_IP&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$forward&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$_SERVER&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;HTTP_X_FORWARDED_FOR&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$remote&lt;/span&gt;  &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$_SERVER&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;REMOTE_ADDR&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;// Определяем IP посетителя&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$bravo&lt;/span&gt;   &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$_SERVER&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;HTTP_USER_AGENT&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;co1&quot;&gt;//Определяем браузер&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/filter_var&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;filter_var&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$client&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; FILTER_VALIDATE_IP&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$ip_address&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$client&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;elseif&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/filter_var&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;filter_var&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$forward&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; FILTER_VALIDATE_IP&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$ip_address&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$forward&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$ip_address&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$remote&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$file2&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$_SERVER&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;DOCUMENT_ROOT&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;/lib/tpl/dokuwiki/debug.txt&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;a href=&quot;http://www.php.net/file_put_contents&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;file_put_contents&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$file2&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;a href=&quot;http://www.php.net/date&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;date&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;F d  H:i:s.&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;    &#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$ip_address&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;    &#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$bravo&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;  PHP_EOL&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; FILE_APPEND &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; LOCK_EX&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;sy1&quot;&gt;?&amp;gt;&lt;/span&gt;
&amp;lt;/div&amp;gt;&amp;lt;/footer&amp;gt;&amp;lt;!-- /footer --&amp;gt;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;


&lt;/div&gt;
&lt;/div&gt;

или скачать файл &lt;a href=&quot;https://wwoss.direct.quickconnect.to/lib/exe/fetch.php?media=wiki:devel:tpl_footer.php&quot; class=&quot;media mediafile mf_php&quot; title=&quot;wiki:devel:tpl_footer.php (2.3 KB)&quot;&gt;&amp;#039;&amp;#039;tpl_footer&amp;#039;&amp;#039;&lt;/a&gt;  целиком и поместить в папку &lt;code&gt;Dokuwiki\lib\tpl\dokuwiki&lt;/code&gt;. &lt;br/&gt;

и нажав на картинку иконки &lt;a href=&quot;https://wwoss.direct.quickconnect.to/lib/exe/detail.php?id=wiki%3Adevel%3Acounter&amp;amp;media=wiki:devel:button-yandex.png&quot; class=&quot;media&quot; title=&quot;wiki:devel:button-yandex.png&quot;&gt;&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/exe/fetch.php?media=wiki:devel:button-yandex.png&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt; сохранить как button-yandex.png в папке &lt;code&gt;Dokuwiki\lib\tpl\dokuwiki\images&lt;/code&gt;. &lt;br/&gt;

У кого текст убегает, ловим его в стиле:
&lt;/p&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=wiki:devel:counter&amp;amp;codeblock=4&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_&quot;&gt;CSS&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code css&quot;&gt;&lt;span class=&quot;re1&quot;&gt;.container&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;absolute&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;font-family&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; Georgia&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;Times New Roman&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; Times&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;serif&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; //шрифт
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;re1&quot;&gt;.text-block&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;absolute&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;bottom&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;re3&quot;&gt;0px&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;  //устанавливает положение нижнего края
    &lt;span class=&quot;kw1&quot;&gt;right&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;re3&quot;&gt;4px&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;   //расстояние от правого края родительского элемента
    &lt;span class=&quot;kw1&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;black&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; //цвет текста
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;p&gt;
Ну и все…Наслаждаемся.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://serblog.ru/prostoj-schetchik-prosmotrov-stranicy-sajta-na-php/&quot; class=&quot;urlextern&quot; title=&quot;https://serblog.ru/prostoj-schetchik-prosmotrov-stranicy-sajta-na-php/&quot; rel=&quot;ugc nofollow&quot;&gt;Ссылка на источник кода&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Sat, 18 Jan 2025 22:19:48 +0000</pubDate>
        </item>
        <item>
            <title>debugging</title>
            <link>https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:debugging&amp;rev=1693498148</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;инструменты_отладки&quot;&gt;Инструменты отладки&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
В «ДокуВики» есть инструменты отладки. Некоторые необходимо настроить.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;включить_отладку&quot;&gt;Включить отладку&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Если опция конфигурацииa &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=config:allowdebug&quot; class=&quot;wikilink2&quot; title=&quot;config:allowdebug&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;config:allowdebug&quot;&gt;allowdebug&lt;/a&gt; включена , вы можете:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Добавляем &lt;code&gt;?do=debug&lt;/code&gt; или &lt;code&gt;&amp;amp;do=debug&lt;/code&gt; к &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt;-адресу , чтобы «ДокуВики» выводила огромный список строк отладки.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; (&lt;em&gt;Вплоть до версии Hogfather 2020 &lt;/em&gt;: посмотрите выходные данные &lt;code&gt;&lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=dbglog&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for dbglog()&quot;&gt;dbglog()&lt;/a&gt;&lt;/code&gt; в &lt;code&gt;data/cache/debug.log&lt;/code&gt;)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Получать дополнительные сообщения об ошибках, например, от некоторых серверов аутентификации.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Добавление &lt;code&gt;?httpdebug&lt;/code&gt; или &lt;code&gt;&amp;amp;httpdebug&lt;/code&gt; к &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt;-адресу для включения вывода отладки в HTTPClient DokuWiki&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Вернуть несколько сообщений, если таблицы стилей отсутствуют&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Получайте дополнительные комментарии в выводе средства визуализации xhtml.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Получите несколько резервных попыток в скомпилированном файле JavaScript с помощью &lt;code&gt;js.php&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Получите отладку в некоторых других местах, а также в плагинах или шаблонах, см. поиск кода для использования &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;project=plugin&amp;amp;project=template&amp;amp;full=allowdebug&amp;amp;path=-%22config%2Flang%22&quot; class=&quot;urlextern&quot; title=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;project=plugin&amp;amp;project=template&amp;amp;full=allowdebug&amp;amp;path=-%22config%2Flang%22&quot; rel=&quot;ugc nofollow&quot;&gt;разрешенного дебага.&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;

&lt;h4 id=&quot;включение_ведения_журнала&quot;&gt;Включение ведения журнала&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
&lt;em&gt;С момента выпуска Игоря 2022 года :&lt;/em&gt;:
&lt;/p&gt;

&lt;p&gt;
«ДокуВики» имеет функцию ведения журналов. Какая информация не регистрируется, можно установить с помощью  &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=config:dontlog&quot; class=&quot;wikilink2&quot; title=&quot;config:dontlog&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;config:dontlog&quot;&gt;dontlog&lt;/a&gt; настройки конфигурации.
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; По умолчанию регистрируются только &lt;em&gt;сообщения об ошибках&lt;/em&gt; и &lt;em&gt;устаревшие сообщения&lt;/em&gt;, а &lt;em&gt;журнал отладки&lt;/em&gt; отключен.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Вы также можете включить &lt;em&gt;журнал отладки&lt;/em&gt; для получения дополнительных результатов отладки.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Через интерфейс администратора вы можете использовать &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=plugin:logviewer&quot; class=&quot;wikilink2&quot; title=&quot;plugin:logviewer&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;plugin:logviewer&quot;&gt;LogViewer&lt;/a&gt;. Если доступ к LogViewer невозможен, вы можете найти файлы журналов в вашей файловой системе, например, в формате &lt;code&gt;[wiki_folder]/data/log/error/&amp;lt;date&amp;gt;.log&lt;/code&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;

&lt;h4 id=&quot;получить_информацию_о_странице_и_пользователе&quot;&gt;Получить информацию о странице и пользователе&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Добавление &lt;code&gt;?do=check&lt;/code&gt; или &lt;code&gt;&amp;amp;do=check&lt;/code&gt; к &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; запускает &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=devel:action_modes#other_functions1&quot; class=&quot;wikilink2&quot; title=&quot;devel:action_modes&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;devel:action_modes&quot;&gt;проверку режима действия&lt;/a&gt;, которая предоставляет некоторую информацию о разрешениях пользователей и настройке «ДокуВики». 
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;отладка_taskrunner&quot;&gt;Отладка TaskRunner&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
См. &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=taskrunner#debugging&quot; class=&quot;wikilink2&quot; title=&quot;taskrunner&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;taskrunner&quot;&gt;информацию об отладке&lt;/a&gt;  на странице запуска задач.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043e\u0442\u043b\u0430\u0434\u043a\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b_\u043e\u0442\u043b\u0430\u0434\u043a\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-3556&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;функции_отладки&quot;&gt;Функции отладки&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;&lt;code&gt;&lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=dbg&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for dbg&quot;&gt;dbg($msg)&lt;/a&gt;&lt;/code&gt;&lt;/strong&gt; &lt;br/&gt;
Вставьте блок кода на вики-страницу, заполненный $msg в виде обычного текста.&lt;br/&gt;
&lt;br/&gt;
Добавление дополнительного аргумента &lt;code&gt;dbg($msg, $hidden=true)&lt;/code&gt; вернет $msg в виде комментария html.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;&lt;code&gt;&lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=dbglog&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for dbglog&quot;&gt;dbglog($msg)&lt;/a&gt;&lt;/code&gt;&lt;/strong&gt; &lt;br/&gt;
Записывает $msg в журнал &lt;em&gt;отладки&lt;/em&gt;, отображаемый в &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=plugin:logviewer&quot; class=&quot;wikilink2&quot; title=&quot;plugin:logviewer&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;plugin:logviewer&quot;&gt;LogViewer&lt;/a&gt;, который сохраняется &lt;code&gt;[wiki_folder]/data/log/debug/&amp;lt;date&amp;gt;.log&lt;/code&gt; когда &lt;code&gt;debug&lt;/code&gt; этот &lt;em&gt;флажок&lt;/em&gt; снят в &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=config:dontlog&quot; class=&quot;wikilink2&quot; title=&quot;config:dontlog&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;config:dontlog&quot;&gt;dontlog&lt;/a&gt; настройке.&lt;br/&gt;
(&lt;em&gt;Вплоть до версии Hogfather 2020&lt;/em&gt;: он записывался в журнал в каталоге кеша &lt;code&gt;data/cache/debug.log&lt;/code&gt;  когда опция &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=config:allowdebug&quot; class=&quot;wikilink2&quot; title=&quot;config:allowdebug&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;config:allowdebug&quot;&gt;allowdebug&lt;/a&gt; включена.) Имейте в виду, что журнал не очищается автоматически.&lt;br/&gt;
&lt;br/&gt;
Используйте &lt;code&gt;dbglog($msg, &amp;#039;Header above log message&amp;#039;)&lt;/code&gt; для включения заголовка над $msg.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;&lt;code&gt;&lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=dbg_deprecated&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for dbg_deprecated()&quot;&gt;dbg_deprecated($alternative = &amp;#039;&amp;#039;)&lt;/a&gt;&lt;/code&gt;&lt;/strong&gt; &lt;br/&gt;
Функция для обозначения устаревших функций. Каждый вызов записывается в &lt;em&gt;устаревший журнал&lt;/em&gt;, отображаемый в &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=plugin:logviewer&quot; class=&quot;wikilink2&quot; title=&quot;plugin:logviewer&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;plugin:logviewer&quot;&gt;LogViewer&lt;/a&gt;, если &lt;code&gt;deprecated&lt;/code&gt; это флажок не установлен в &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=config:dontlog&quot; class=&quot;wikilink2&quot; title=&quot;config:dontlog&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;config:dontlog&quot;&gt;dontlog&lt;/a&gt; настройке. В сообщении журнала упоминается: имя устаревшей функции, использующая ее функция, ее файл и строка, а также время &lt;code&gt;$alternative&lt;/code&gt; предоставления.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;&lt;code&gt;&lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=dbg_backtrace&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for dbg_backtrace()&quot;&gt;dbg_backtrace()&lt;/a&gt;&lt;/code&gt;&lt;/strong&gt; &lt;br/&gt;
Напечатайте перевернутую, красиво напечатанную обратную трассировку.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;&lt;code&gt;&lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=debug_guard&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for debug_guard&quot;&gt;debug_guard($data)&lt;/a&gt;&lt;/code&gt;&lt;/strong&gt; &lt;br/&gt;
Когда вы пишете собственную функцию отладки, используйте эту функцию для удаления всех данных из массива, ключ которого указывает на конфиденциальные данные.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0444\u0443\u043d\u043a\u0446\u0438\u0438_\u043e\u0442\u043b\u0430\u0434\u043a\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;3557-5907&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;плагин_страж&quot;&gt;Плагин «Страж»&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Плаген &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=plugin:sentry&quot; class=&quot;wikilink2&quot; title=&quot;plugin:sentry&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;plugin:sentry&quot;&gt;Sentry Plugin&lt;/a&gt; позволяет регистрировать обширную информацию в  &lt;a href=&quot;https://sentry.io&quot; class=&quot;urlextern&quot; title=&quot;https://sentry.io&quot; rel=&quot;ugc nofollow&quot;&gt;Sentry&lt;/a&gt; сервисе. Это особенно полезно при запуске бета-тестирования в реальной среде.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u043b\u0430\u0433\u0438\u043d \u00ab\u0421\u0442\u0440\u0430\u0436\u00bb&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u043b\u0430\u0433\u0438\u043d_\u0441\u0442\u0440\u0430\u0436&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;5908-6257&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;смотрите_также&quot;&gt;Смотрите также&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Конфигурацию опции &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=config:allowdebug&quot; class=&quot;wikilink2&quot; title=&quot;config:allowdebug&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;config:allowdebug&quot;&gt;allowdebug&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Конфигурацию опции &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=config:dontlog&quot; class=&quot;wikilink2&quot; title=&quot;config:dontlog&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;config:dontlog&quot;&gt;dontlog&lt;/a&gt; и &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=plugin:logviewer&quot; class=&quot;wikilink2&quot; title=&quot;plugin:logviewer&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;plugin:logviewer&quot;&gt;LogViewer&lt;/a&gt; для включения журналов&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=devel:%D0%BA%D1%8D%D1%88%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&quot; class=&quot;wikilink2&quot; title=&quot;devel:кэширование&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;devel:кэширование&quot;&gt;Кэширование&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; У меня &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=faq:blankpage&quot; class=&quot;wikilink2&quot; title=&quot;faq:blankpage&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;faq:blankpage&quot;&gt;пустая страница&lt;/a&gt; или &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=faq:error500&quot; class=&quot;wikilink2&quot; title=&quot;faq:error500&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;faq:error500&quot;&gt;ошибка 500 (внутренняя ошибка сервера)&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0421\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0442\u0430\u043a\u0436\u0435&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435_\u0442\u0430\u043a\u0436\u0435&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;6258-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Thu, 31 Aug 2023 16:09:08 +0000</pubDate>
        </item>
        <item>
            <title>environment</title>
            <link>https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:environment&amp;rev=1723675982</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;переменные_окружения&quot;&gt;Переменные окружения&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Эта статья предоставит вам краткий обзор доступных переменных и констант, которые вы можете использовать при разработке &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:plugins&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:plugins&quot; data-wiki-id=&quot;wiki:devel:plugins&quot;&gt;плагинов&lt;/a&gt; или &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:templates&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:templates&quot; data-wiki-id=&quot;wiki:devel:templates&quot;&gt;шаблонов&lt;/a&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435_\u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-347&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;глобальные_переменные&quot;&gt;Глобальные переменные&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0413\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435_\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;348-402&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit3&quot; id=&quot;act&quot;&gt;$ACT&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Содержит текущее действие, см. &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:action_modes&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:action_modes&quot; data-wiki-id=&quot;wiki:devel:action_modes&quot;&gt;режимы действий&lt;/a&gt;. (&lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=ACT&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for $ACT&quot;&gt;reference&lt;/a&gt;)
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;$ACT&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;act&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;403-549&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit4&quot; id=&quot;auth&quot;&gt;$auth&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Глобально доступный объект &lt;code&gt;$auth&lt;/code&gt;, представляет используемый &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:auth&quot; class=&quot;wikilink1&quot; title=&quot;wiki:auth&quot; data-wiki-id=&quot;wiki:auth&quot;&gt;бэкенд аутентификации&lt;/a&gt;. (&lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=auth&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;search definitions for $auth&quot;&gt;reference&lt;/a&gt;)
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;$auth&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;auth&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;550-763&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit5&quot; id=&quot;conf&quot;&gt;$conf&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Глобально доступный массив &lt;code&gt;$conf&lt;/code&gt; содержит все настройки «ДокуВики». В основном, он соответствует следующей структуре:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;$conf[&amp;lt;setting_name&amp;gt;]&lt;/code&gt; — настройки «ДокуВики» (см. &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:config&quot; class=&quot;wikilink1&quot; title=&quot;wiki:config&quot; data-wiki-id=&quot;wiki:config&quot;&gt;config&lt;/a&gt;)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;$conf[&amp;lt;setting_group&amp;gt;][&amp;lt;setting_name&amp;gt;]&lt;/code&gt; — некоторые настройки «ДокуВики» используют этот формат, т.е. настройки ftp, proxy и target.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;$conf[&amp;#039;tpl&amp;#039;][&amp;lt;template_name&amp;gt;][&amp;lt;setting_name&amp;gt;]&lt;/code&gt; — настройки конфигурации шаблона, см. документацию по шаблону.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;$conf[&amp;#039;plugin&amp;#039;][&amp;lt;plugin_name&amp;gt;][&amp;lt;setting_name&amp;gt;]&lt;/code&gt; — настройки конфигурации плагина, см. документацию по плагину.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;$conf[&amp;#039;auth&amp;#039;][&amp;lt;auth_name&amp;gt;][&amp;lt;setting_name&amp;gt;]&lt;/code&gt; — настройки конфигурации бэкенда аутентификации, см. документацию по бэкенду аутентификации.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Обычно вам нет необходимости непосредственно обращаться к этому массиву. И плагины, и шаблоны имеют собственные методы для доступа к их настройкам конфигурации.
&lt;/p&gt;

&lt;p&gt;
(&lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=conf&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;search definitions for $conf&quot;&gt;reference&lt;/a&gt;)
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;$conf&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;conf&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;764-2192&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit6&quot; id=&quot;id&quot;&gt;$ID&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Содержит &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:pagename&quot; class=&quot;wikilink1&quot; title=&quot;wiki:pagename&quot; data-wiki-id=&quot;wiki:pagename&quot;&gt;имя&lt;/a&gt; «рендеримой» в настоящий момент статьи. Обычно это просматриваемая в настоящий момент, но не обязательно - см. ниже &lt;code&gt;$INFO[&amp;#039;id&amp;#039;]&lt;/code&gt;. (&lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=ID&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;search definitions for $ID&quot;&gt;reference&lt;/a&gt;)
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;$ID&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;id&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;2193-2501&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit7&quot; id=&quot;info&quot;&gt;$INFO&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Это ассоциативные массив, заполненный информацией предоставленной функцией &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=pageinfo&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for pageinfo()&quot;&gt;pageinfo()&lt;/a&gt; из &lt;code&gt;inc/common.php&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
В настоящий момент элементами массива является:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;id&lt;/code&gt; — имя основной статьи просматриваемой в настоящий момент. Обычно совпадает с &lt;code&gt;$ID&lt;/code&gt;, но иногда может быть другой. См. подробности в &lt;a href=&quot;doku.php?id=wiki:bug:dokuwiki:1320&quot; class=&quot;interwiki iw_bug&quot; title=&quot;doku.php?id=wiki:bug:dokuwiki:1320&quot;&gt;1320&lt;/a&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;rev&lt;/code&gt; — номер версии основной статьи, просматриваемой в настоящий момент, обычно совпадает с  $REV.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;userinfo&lt;/code&gt; — установлен только для зарегистрированных пользователей, ассоциативный массив:&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;pass&lt;/code&gt; — пароль, зашифрованный&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;name&lt;/code&gt; — полное имя&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;mail&lt;/code&gt; — адрес email&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;grps&lt;/code&gt; — группы, к которым относится пользователь (массив [Array &lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/images/smileys/exclaim.svg&quot; class=&quot;icon smiley&quot; alt=&quot;:!:&quot; /&gt;])&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;buid&lt;/code&gt; — специальный id, сконструированный из браузера и IP адреса пользователя&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;perm&lt;/code&gt; — права пользователя, относящиеся к текущей статье ($ID)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;subscribed&lt;/code&gt; — true, если пользователь подписан на эту статью, иначе false&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;namespace&lt;/code&gt; — пространство имен, к которой относится текущая статья ($ID)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;locked&lt;/code&gt; — true, если статья заблокирована, иначе false&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;filepath&lt;/code&gt; — путь в файловой системе к сырым данным wiki текущей статьи ($ID+$REV)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;exists&lt;/code&gt; — true, если сырые данные wiki текущей статьи существуют ($ID+$REV), иначе false&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;rev&lt;/code&gt; — id версии для текущей статьи ($ID), пустая статья, если просматривается текущая версия&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;writable&lt;/code&gt; — true, если для текущей статьи ($ID+$REV) комбинация наличия файла, разрешений файла и разрешений &lt;abbr title=&quot;Access Control List&quot;&gt;ACL&lt;/abbr&gt; пользователя позволяет редактировать существующий файл или создать еще не существующий файл. Иначе false.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;editable&lt;/code&gt; — true, если текущая статья ($ID+$REV) доступна для записи и не заблокирована.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;lastmod&lt;/code&gt; — временная метка последней модификации текущей статьи ($ID+$REV)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;meta&lt;/code&gt; — &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:metadata&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:metadata&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:metadata&quot;&gt;метаданные&lt;/a&gt; текущей статьи ($ID)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;ip&lt;/code&gt; — ip адрес последнего редактировавшего текущую статью ($ID+$REV) пользователя&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;user&lt;/code&gt; — username последнего редактировавшего текущую статью ($ID+$REV) пользователя&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;sum&lt;/code&gt; — краткая анотация изменений текущей статьи ($ID+$REV)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;editor&lt;/code&gt; — имя пользователя (или ip адрес, если имя неизвестно) последним редактировавшего текущую статью ($ID+$REV)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;isadmin&lt;/code&gt; — true, если зарегистрированный пользователь является &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:config#superuser&quot; class=&quot;wikilink1&quot; title=&quot;wiki:config&quot; data-wiki-id=&quot;wiki:config&quot;&gt;суперпользователем&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;ismanager&lt;/code&gt; — true, если зарегистрированный пользователь является &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:config#manager&quot; class=&quot;wikilink1&quot; title=&quot;wiki:config&quot; data-wiki-id=&quot;wiki:config&quot;&gt;менеджером&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;draft&lt;/code&gt; — содержит название файла &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:draft&quot; class=&quot;wikilink2&quot; title=&quot;wiki:draft&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:draft&quot;&gt;черновика&lt;/a&gt; для текущего пользователя и статьи.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;ismobile&lt;/code&gt; — true, если статья просматривается с мобильного устройства или телефона.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;client&lt;/code&gt; — имя пользователя, зарегистрированного в настоящий момент &lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;$INFO&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;info&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;2502-6836&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit8&quot; id=&quot;lang&quot;&gt;$lang&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Ассоциативный массив, содержащий все строки перевода интерфейса, плагинов и шаблонов. (&lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=lang&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;search definitions for $lang&quot;&gt;reference&lt;/a&gt;)
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;$lang&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;lang&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;6837-7040&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit9&quot; id=&quot;rev&quot;&gt;$REV&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Содержит штамп времени версии отображаемой в настоящий момент статьи. &lt;code&gt;false&lt;/code&gt;, если рассматривается самая свежая версия статьи. (&lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=REV&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;search definitions for $REV&quot;&gt;reference&lt;/a&gt;)
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;$REV&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;rev&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;7041-7315&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit10&quot; id=&quot;server_remote_user&quot;&gt;$_SERVER[&amp;#039;REMOTE_USER&amp;#039;]&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Эта переменная явно прописывается механизмом аутентификации «ДокуВики», когда юзер зарегистрировался, и  содержит имя пользователя.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;$_SERVER[&amp;#039;REMOTE_USER&amp;#039;]&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;server_remote_user&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;7316-7597&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit11&quot; id=&quot;text&quot;&gt;$TEXT&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
В режимах &lt;code&gt;save&lt;/code&gt; и &lt;code&gt;preview&lt;/code&gt; эта глобальная переменная содержит текст предоставленный в форме редактирования. (&lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=TEXT&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for $TEXT&quot;&gt;reference&lt;/a&gt;)
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;$TEXT&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;text&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:11,&amp;quot;range&amp;quot;:&amp;quot;7598-7836&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit12&quot; id=&quot;toc&quot;&gt;$TOC&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Эта переменная будет использована (если заполнена) функцией &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:templates#tpl_toc&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:templates&quot; data-wiki-id=&quot;wiki:devel:templates&quot;&gt;tpl_toc()&lt;/a&gt; для построения &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:toc&quot; class=&quot;wikilink1&quot; title=&quot;wiki:toc&quot; data-wiki-id=&quot;wiki:toc&quot;&gt;&amp;quot;содержания&amp;quot;&lt;/a&gt; статьи. Обычно, эта переменная пуста и &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=tpl_toc&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for tpl_toc()&quot;&gt;tpl_toc()&lt;/a&gt; строит «содержание» из метаданных статьи. (&lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=TOC&amp;amp;path=&quot; class=&quot;interwiki plugin_xref plugin_xref_err&quot; title=&quot;unknown definition&quot;&gt;reference&lt;/a&gt;)
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;$TOC&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;toc&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:12,&amp;quot;range&amp;quot;:&amp;quot;7837-8243&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit13&quot; id=&quot;userinfo&quot;&gt;$USERINFO&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Глобально доступный ассоциативный массив, который содержит информацию об &lt;strong&gt;авторизованном&lt;/strong&gt; пользователе.
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; pass - хэш пользовательского пароля&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; name - полное имя пользователя&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; mail - e-mail адрес пользователя&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; grps - массив групп, к которым относится пользователь&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
(&lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=USERINFO&amp;amp;path=&quot; class=&quot;interwiki plugin_xref plugin_xref_err&quot; title=&quot;unknown definition&quot;&gt;reference&lt;/a&gt;)
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;$USERINFO&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;userinfo&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:13,&amp;quot;range&amp;quot;:&amp;quot;8244-8768&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit14&quot; id=&quot;jsinfo&quot;&gt;$JSINFO&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Этот массив содержит данные, передаваемые JavaScript в качестве глобальной переменной (смотри &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=devel:javascript#jsinfo&quot; class=&quot;wikilink2&quot; title=&quot;devel:javascript&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;devel:javascript&quot;&gt;jsinfo&lt;/a&gt;).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;$JSINFO&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;jsinfo&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:14,&amp;quot;range&amp;quot;:&amp;quot;8769-8983&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit15&quot; id=&quot;константы&quot;&gt;Константы&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Ниже приведен список наиболее важных констант.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:15,&amp;quot;range&amp;quot;:&amp;quot;8984-9103&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit16&quot; id=&quot;auth1&quot;&gt;AUTH_&amp;lt;*&amp;gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Тип констант &lt;code&gt;AUTH_&amp;lt;*&amp;gt;&lt;/code&gt; представляет уровни доступа (в виде целых чисел) используемые в системе &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:acl&quot; class=&quot;wikilink1&quot; title=&quot;wiki:acl&quot; data-wiki-id=&quot;wiki:acl&quot;&gt;списков доступа&lt;/a&gt; «ДокуВики». Они могут для того, чтобы проверка списков доступа к данной  &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:page&quot; class=&quot;wikilink1&quot; title=&quot;wiki:page&quot; data-wiki-id=&quot;wiki:page&quot;&gt;статье &lt;/a&gt;/&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:namespace&quot; class=&quot;wikilink2&quot; title=&quot;wiki:namespace&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:namespace&quot;&gt;пространству имен&lt;/a&gt; выглядела более понятной.
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;auth_quickaclcheck&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$ID&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;gt;=&lt;/span&gt; AUTH_READ&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;// do sth.&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4 id=&quot;auth_none&quot;&gt;AUTH_NONE&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Тип:&lt;/strong&gt; Целое&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Значение:&lt;/strong&gt; 0&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=AUTH_NONE&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for AUTH_NONE&quot;&gt;reference&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;

&lt;h4 id=&quot;auth_read&quot;&gt;AUTH_READ&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Тип:&lt;/strong&gt; Целое&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Значение:&lt;/strong&gt; 1&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=AUTH_READ&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for AUTH_READ&quot;&gt;reference&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;

&lt;h4 id=&quot;auth_edit&quot;&gt;AUTH_EDIT&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Тип:&lt;/strong&gt; Целое&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Значение:&lt;/strong&gt; 2&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=AUTH_EDIT&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for AUTH_EDIT&quot;&gt;reference&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;

&lt;h4 id=&quot;auth_create&quot;&gt;AUTH_CREATE&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Тип:&lt;/strong&gt; Целое&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Значение:&lt;/strong&gt; 4&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=AUTH_CREATE&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for AUTH_CREATE&quot;&gt;reference&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;

&lt;h4 id=&quot;auth_upload&quot;&gt;AUTH_UPLOAD&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Тип:&lt;/strong&gt; Целое&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Значение:&lt;/strong&gt; 8&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=AUTH_UPLOAD&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for AUTH_UPLOAD&quot;&gt;reference&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;

&lt;h4 id=&quot;auth_delete&quot;&gt;AUTH_DELETE&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Тип:&lt;/strong&gt; Целое&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Значение:&lt;/strong&gt; 16&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=AUTH_DELETE&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for AUTH_DELETE&quot;&gt;reference&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;

&lt;h4 id=&quot;auth_admin&quot;&gt;AUTH_ADMIN&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Тип:&lt;/strong&gt; Целое&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Значение:&lt;/strong&gt; 255&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=AUTH_ADMIN&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for AUTH_ADMIN&quot;&gt;reference&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;AUTH_&amp;lt;*&amp;gt;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;auth1&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:16,&amp;quot;range&amp;quot;:&amp;quot;9104-10451&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit17&quot; id=&quot;doku&quot;&gt;DOKU_&amp;lt;*&amp;gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Тип констант &lt;code&gt;DOKU_&amp;lt;*&amp;gt;&lt;/code&gt; содержит  различные &lt;em&gt;системные&lt;/em&gt; значения для внутреннего использования «ДокуВики».
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;doku_base&quot;&gt;DOKU_BASE&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Базовый &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; инсталляции «ДокуВики». (&lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=DOKU_BASE&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for DOKU_BASE&quot;&gt;reference&lt;/a&gt;)
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;/dokuwiki/&lt;/pre&gt;

&lt;/div&gt;

&lt;h4 id=&quot;doku_conf&quot;&gt;DOKU_CONF&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Путь к директории конфигурации инсталляции DokuWiki на сервере. (&lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=DOKU_CONF&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;search definitions for DOKU_CONF&quot;&gt;reference&lt;/a&gt;)
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;/var/www/dokuwiki/conf/&lt;/pre&gt;

&lt;/div&gt;

&lt;h4 id=&quot;doku_rel&quot;&gt;DOKU_REL&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Базовый &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; к инсталляции «ДокуВики» (&lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=DOKU_URL&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for DOKU_URL&quot;&gt;reference&lt;/a&gt;)
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;doku_url&quot;&gt;DOKU_URL&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Абсолютный &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; к инсталляции DokuWiki (&lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=DOKU_URL&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for DOKU_URL&quot;&gt;reference&lt;/a&gt;)
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;doku_inc&quot;&gt;DOKU_INC&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Путь к директории включаемых файлов инсталляции DokuWiki на сервере. (&lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=DOKU_INC&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;search definitions for DOKU_INC&quot;&gt;reference&lt;/a&gt;)
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;/var/www/dokuwiki/&lt;/pre&gt;

&lt;/div&gt;

&lt;h4 id=&quot;doku_tpl&quot;&gt;DOKU_TPL&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Путь к директории используемого шаблона на сервере. (&lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=DOKU_TPL&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for DOKU_TPL&quot;&gt;reference&lt;/a&gt;)
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;/dokuwiki/lib/tpl/&amp;lt;template&amp;gt;/&lt;/pre&gt;

&lt;/div&gt;

&lt;h4 id=&quot;doku_tplinc&quot;&gt;DOKU_TPLINC&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Путь к директории включаемых файлов используемого шаблона на сервере. (&lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=DOKU_TPLINC&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for DOKU_TPLINC&quot;&gt;reference&lt;/a&gt;)
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;lib/tpl/&amp;lt;template&amp;gt;/&lt;/pre&gt;

&lt;p&gt;
Или если установлен параметр &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:config#canonical&quot; class=&quot;wikilink1&quot; title=&quot;wiki:config&quot; data-wiki-id=&quot;wiki:config&quot;&gt;canonical&lt;/a&gt;:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;http//domain.org/lib/tpl/&amp;lt;template&amp;gt;/

https://www.dokuwiki.org/wiki:devel:environment&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;DOKU_&amp;lt;*&amp;gt;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;doku&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:17,&amp;quot;range&amp;quot;:&amp;quot;10452-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Wed, 14 Aug 2024 22:53:02 +0000</pubDate>
        </item>
        <item>
            <title>farm</title>
            <link>https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:farm&amp;rev=1735907379</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;фермы&quot;&gt;Фермы&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
&lt;strong&gt;ВНИМАНИЕ:&lt;/strong&gt; Эта страница в основном предназначена для сбора идей по настройке/администрированию/внедрению &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:tips:farm&quot; class=&quot;wikilink1&quot; title=&quot;wiki:tips:farm&quot; data-wiki-id=&quot;wiki:tips:farm&quot;&gt;фермы&lt;/a&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0424\u0435\u0440\u043c\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0444\u0435\u0440\u043c\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-256&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;включение_отключение_плагинов&quot;&gt;Включение/отключение плагинов&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; Определять (&lt;code&gt;inc/preload.php&lt;/code&gt;):&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;DOKU_FARM&lt;/code&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; 0 ⇒ Animal&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; 1 ⇒ Farmer&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; Конфигурация  (&lt;code&gt;inc/preload.php&lt;/code&gt;)&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; установить значение для глобального $config_cascade&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; загружать настройки фермы по умолчанию после настроек dokuwiki по умолчанию&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; загрузка защищенных настроек фермы после локальных настроек&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; События:&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Ранее упоминалось, &lt;code&gt;PLUGIN_NAME_ISDISABLED&lt;/code&gt;, &lt;code&gt;PLUGIN_NAME_DISABLE&lt;/code&gt;, &lt;code&gt;PLUGIN_NAME_ENABLE&lt;/code&gt; не будет работать из-за проблемы курицы и яйца. К тому времени, как плагин сможет управлять другими плагинами, будет уже слишком поздно. Проблема решена путем внедрения сменного «контроллера плагинов», см. ниже.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;PLUGIN_PLUGINMANAGER_PLUGINLIST&lt;/code&gt;, &lt;code&gt;PLUGIN_CONFIG_PLUGINLIST&lt;/code&gt; (реализовано)&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; Контроллер плагинов (&lt;code&gt;preload.php&lt;/code&gt;) &lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; заменить контроллер плагинов DokuWiki по умолчанию (&lt;code&gt;inc/plugin_controller.class.php&lt;/code&gt;)&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; переопределить метод is Disabled для управления тем, какие плагины использует животное&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; извлечь настройки включения/выключения плагина из конфигурации фермы/животного (см. менеджер плагинов ниже)&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; Менеджер плагинов:&lt;/div&gt;
&lt;ol&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; отключить загрузку/установку для животных&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; включить/выключить для животных&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; отключение для фермера на каждое животное и на всю ферму&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Плагин администрирования фермы:&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Фермер должен иметь возможность взять на себя управление животными&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\/\u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435_\u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435_\u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;257-2514&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;администрация_фермы&quot;&gt;Администрация фермы&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; автоматическое создание животного&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; способность обездвижить животное&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; способность взять под контроль животное&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; возможность установки конфигурации по умолчанию для эмбриональных животных&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; возможность установки пользователя(ей) по умолчанию, как минимум администратора&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; возможность устанавливать/редактировать «защищенные» значения конфигурации — значения, которые животные не могут изменить&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Изменения в управлении плагинами:&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; загружать/удалять плагины (не разрешая животным загружать/удалять их)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; включить/отключить плагины на всей ферме&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; механизм записи данных администраторов животных&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; механизм уведомления (отправки писем) администраторам животных&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0444\u0435\u0440\u043c\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f_\u0444\u0435\u0440\u043c\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;2515-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Fri, 03 Jan 2025 12:29:39 +0000</pubDate>
        </item>
        <item>
            <title>javascript</title>
            <link>https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:javascript&amp;rev=1693219962</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;javascript&quot;&gt;JavaScript&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
DokuWiki makes uses of &lt;a href=&quot;https://en.wikipedia.org/wiki/JavaScript&quot; class=&quot;interwiki iw_wp&quot; title=&quot;https://en.wikipedia.org/wiki/JavaScript&quot;&gt;JavaScript&lt;/a&gt; to enhance the user experience. Like for &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:css&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:css&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:css&quot;&gt;stylesheets&lt;/a&gt; all JavaScript files are delivered through a single dispatcher to minimize HTTP requests, for caching and &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=config:compress&quot; class=&quot;wikilink2&quot; title=&quot;config:compress&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;config:compress&quot;&gt;compression&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
This page gives you an overview how JavaScript is loaded from DokuWiki core, &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=plugins&quot; class=&quot;wikilink2&quot; title=&quot;plugins&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;plugins&quot;&gt;plugins&lt;/a&gt; and &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=templates&quot; class=&quot;wikilink2&quot; title=&quot;templates&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;templates&quot;&gt;templates&lt;/a&gt;. It also gives some info about event handling and coding style when writing JavaScript for use in DokuWiki.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;JavaScript&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;javascript&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-486&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;javascript_loading&quot;&gt;JavaScript Loading&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
All JavaScript code is collected from all found files and concatenated as one block of code. It is then whitespace compressed (if &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=config:compress&quot; class=&quot;wikilink2&quot; title=&quot;config:compress&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;config:compress&quot;&gt;compress&lt;/a&gt; is enabled) and delivered as one file. As a live example you can view the JavaScript file that is in effect on this website &lt;a href=&quot;https://wwoss.direct.quickconnect.to/lib/exe/js.php&quot; class=&quot;interwiki iw_this&quot; title=&quot;https://wwoss.direct.quickconnect.to/lib/exe/js.php&quot;&gt;lib/exe/js.php&lt;/a&gt;. This file will be cached in the DokuWiki cache at &lt;code&gt;/dokuwiki/data/cache&lt;/code&gt; and DokuWiki also instructs browsers to cache this file. So when you are developing new JavaScript, make sure to refresh those caches (hitting Shift-F5, Shift+CTRL+R or similar), whenever your script was updated.
&lt;/p&gt;

&lt;p&gt;
DokuWiki will load JavaScript from the following places:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; autogenerated JavaScript (language strings, config settings, &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=toolbar&quot; class=&quot;wikilink2&quot; title=&quot;toolbar&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;toolbar&quot;&gt;toolbar&lt;/a&gt;)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; lib/scripts/*.js&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; lib/plugins/*/script.js&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; lib/tpl/&amp;lt;currenttemplate&amp;gt;/script.js&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; conf/userscript.js&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
As you can see you can provide JavaScript with your &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=templates&quot; class=&quot;wikilink2&quot; title=&quot;templates&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;templates&quot;&gt;templates&lt;/a&gt; and &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=plugins&quot; class=&quot;wikilink2&quot; title=&quot;plugins&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;plugins&quot;&gt;plugins&lt;/a&gt; (through a &lt;code&gt;script.js&lt;/code&gt; file) and can define your own scripts in &lt;code&gt;conf/userscript.js&lt;/code&gt; (just create this file if it does not yet exist).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;JavaScript Loading&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;javascript_loading&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;487-1595&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit3&quot; id=&quot;deferred_loading&quot;&gt;Deferred Loading&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
All JavaScript is loaded with the &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script#attr-defer&quot; class=&quot;urlextern&quot; title=&quot;https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script#attr-defer&quot; rel=&quot;ugc nofollow&quot;&gt;defer&lt;/a&gt; attribute. &lt;a href=&quot;https://flaviocopes.com/javascript-async-defer/&quot; class=&quot;urlextern&quot; title=&quot;https://flaviocopes.com/javascript-async-defer/&quot; rel=&quot;ugc nofollow&quot;&gt;Here&amp;#039;s more information about deferred loading&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
If you load JavaScript through other means than the recommended methods below and that JavaScript has dependencies on any DokuWiki provided code, you need to ensure it is deferred as well. This also means that you cannot use &lt;code&gt;document.write&lt;/code&gt; that relies on DokuWiki-loaded scripts.
&lt;/p&gt;

&lt;p&gt;
From the 2020 Hogfather version onwards, all javascript must be load in a deferred way. To update your existing templates javascript to work in this version, you can add the &lt;code&gt;defer&lt;/code&gt; attribute to the &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tag.
&lt;/p&gt;

&lt;p&gt;
Temporary, the feature flag &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=config:defer_js&quot; class=&quot;wikilink2&quot; title=&quot;config:defer_js&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;config:defer_js&quot;&gt;defer js&lt;/a&gt; is available, which allows disabling.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Deferred Loading&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;deferred_loading&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;1596-2447&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit4&quot; id=&quot;include_syntax&quot;&gt;Include Syntax&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
DokuWiki&amp;#039;s JavaScript dispatcher allows you to use special JavaScript comments to include other script files. This is useful for cases where usually only a single JavaScript file would be parsed, e.g. in templates or plugins.
&lt;/p&gt;

&lt;p&gt;
&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/images/smileys/exclaim.svg&quot; class=&quot;icon smiley&quot; alt=&quot;:!:&quot; /&gt; Included files are not checked for updates by the cache logic. You need to touch the master file for updating the cache.
&lt;/p&gt;

&lt;p&gt;
&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/images/smileys/exclaim.svg&quot; class=&quot;icon smiley&quot; alt=&quot;:!:&quot; /&gt; Includes are &lt;strong&gt;not&lt;/strong&gt; supported inside included files to avoid any circular references.
&lt;/p&gt;

&lt;p&gt;
&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/images/smileys/exclaim.svg&quot; class=&quot;icon smiley&quot; alt=&quot;:!:&quot; /&gt; Includepath may only consist of letter,digit, underscore, «/» and «.».
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;include&quot;&gt;include&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;
&lt;pre class=&quot;code&quot;&gt;/* DOKUWIKI:include somefile.js */&lt;/pre&gt;

&lt;p&gt;
This syntax will include the given file where the comment is placed. The filename is relative to the file containing the include markup unless it starts with a slash which indicates an absolute &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; path.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;include_once&quot;&gt;include_once&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;
&lt;pre class=&quot;code&quot;&gt;/* DOKUWIKI:include_once common_library.js */&lt;/pre&gt;

&lt;p&gt;
This syntax will include the given file where the comment is placed. The filename is relative to the file containing the include markup unless it starts with a slash which indicates an absolute &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; path.
&lt;/p&gt;

&lt;p&gt;
The file will only be included if not a file of the same base name was previously loaded through the include_once statement. This name is shared over all script files (from all plugins), so you should use a meaningful file name.
&lt;/p&gt;

&lt;p&gt;
Using this statement makes sense if you write multiple independent &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=plugins&quot; class=&quot;wikilink2&quot; title=&quot;plugins&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;plugins&quot;&gt;plugins&lt;/a&gt; all using the same JavaScript library. Including it with &lt;code&gt;include_once&lt;/code&gt; using the same basename will make sure the library is loaded only once even if multiple of your plugins are installed.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Include Syntax&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;include_syntax&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;2448-4060&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;coding_guidelines&quot;&gt;Coding Guidelines&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
When writing JavaScript for the use within DokuWiki you should follow a few rules. Because of the nature of JavaScript, failing to do so might result in not only breaking your script but all scripts in DokuWiki.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Coding Guidelines&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;coding_guidelines&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;4061-4304&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit6&quot; id=&quot;validate_your_code&quot;&gt;Validate your Code&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
As mentioned above, DokuWiki will shrink the JavaScript code when the &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=config:compress&quot; class=&quot;wikilink2&quot; title=&quot;config:compress&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;config:compress&quot;&gt;compress&lt;/a&gt; option is enabled (which it is by default). To do this without introducing syntax errors, the JavaScript has to be checked more strictly than it might be when run uncompressed.
&lt;/p&gt;

&lt;p&gt;
To check your code you should use the &lt;a href=&quot;http://www.jslint.com/&quot; class=&quot;urlextern&quot; title=&quot;http://www.jslint.com/&quot; rel=&quot;ugc nofollow&quot;&gt;JSLint&lt;/a&gt; online service.
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; debug your code with &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=config:compress&quot; class=&quot;wikilink2&quot; title=&quot;config:compress&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;config:compress&quot;&gt;compress&lt;/a&gt; disabled but&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; verify your code still works with &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=config:compress&quot; class=&quot;wikilink2&quot; title=&quot;config:compress&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;config:compress&quot;&gt;compress&lt;/a&gt; enabled&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Validate your Code&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;validate_your_code&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;4305-4816&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit7&quot; id=&quot;use_unobtrusive_javascript&quot;&gt;Use unobtrusive JavaScript&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Do not assume people have JavaScript enabled, when writing new DokuWiki functionality. Instead use JavaScript as enhancement of the user interface only, when JavaScript is not available your code should fallback to normal page reload based behavior.
&lt;/p&gt;

&lt;p&gt;
jQuery makes this very easy.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Use unobtrusive JavaScript&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;use_unobtrusive_javascript&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;4817-5136&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit8&quot; id=&quot;avoid_inappropriate_mixing&quot;&gt;Avoid Inappropriate Mixing&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
The old way of doing things is to embed JavaScript directly in the &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt;.  However, JavaScript and (X)&lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt; shouldn&amp;#039;t be mixed, and indeed with DokuWiki there are many cases where they &lt;em&gt;cannot&lt;/em&gt; be mixed.  Here are some examples of &lt;strong&gt;INAPPROPRIATE MIXING&lt;/strong&gt;&lt;sup&gt;&lt;a href=&quot;#fn__1&quot; id=&quot;fnt__1&quot; class=&quot;fn_top&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt;:
&lt;/p&gt;
&lt;pre class=&quot;code html4strict&quot;&gt;&lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/body.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;body&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;kw3&quot;&gt;onload&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;refreshPage()&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/p.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;p&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;some HTML&lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/p.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;p&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/script.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;script&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;kw3&quot;&gt;language&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;JavaScript&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;
  doSomethingHere();
&lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/script.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;script&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/p.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;p&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;more &lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/a.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;a&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;kw3&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;http://example.com&amp;quot;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;onclick&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;doSomethingElse()&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;HTML&lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/a.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;a&lt;/span&gt;&lt;/a&gt;&amp;gt;&amp;lt;&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/p.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;p&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/body.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;body&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
This isn&amp;#039;t just a matter of philosophical purity: some of the JavaScript may not work.  In the above example, it turns out that both DokuWiki and the &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt; tag are trying to assign the page&amp;#039;s &lt;code&gt;onload&lt;/code&gt; handler to different JavaScript functions. Browsers cannot handle this conflict and the results are unpredictable.
&lt;/p&gt;

&lt;p&gt;
Strictly speaking, it is possible to embed JavaScript in your &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt;, but only if you know that the JavaScript has no conflict with DokuWiki. Because this requires knowledge of DokuWiki&amp;#039;s implementation, and because DokuWiki&amp;#039;s implementation can change, this is still not a good idea. It&amp;#039;s wiser to be philosophically pure.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Avoid Inappropriate Mixing&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;avoid_inappropriate_mixing&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;5137-6463&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit9&quot; id=&quot;using_ids&quot;&gt;Using IDs&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
To modify a DOM object the JavaScript must be able to locate the object. The easiest way to locate the object is to give the associated &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt; tag an ID.  This ID must be unique among all IDs on the page so that referencing this ID produces exactly the right DOM object.
&lt;/p&gt;

&lt;p&gt;
When you are producing your own &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt; (e.g. from a template or plugin) that should be accessed from JavaScript later, be sure that the ID does not conflict with an existing ID. In particular, be sure that it won&amp;#039;t conflict with the IDs automatically assigned to section headers. The easiest way to ensure this is to use two adjacent underscores (&lt;code&gt;__&lt;/code&gt;) in your ID. Because section IDs are always valid &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=pagenames&quot; class=&quot;wikilink2&quot; title=&quot;pagenames&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;pagenames&quot;&gt;pagenames&lt;/a&gt;, they will never contain adjacent underscores.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Using IDs&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;using_ids&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;6464-7223&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit10&quot; id=&quot;inline_scripts&quot;&gt;Inline scripts&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
As said before you should avoid mixing JavaScript and XHTML. However if you need to use inline JavaScript, you should wrap it like this:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;/*&amp;lt;![CDATA[*/
...
/*!]]&amp;gt;*/&amp;lt;/script&amp;gt;&lt;/pre&gt;

&lt;p&gt;
If you need to add inline JavaScript to the &amp;lt;head&amp;gt; section you should write an &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:action_plugin&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:action_plugin&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:action_plugin&quot;&gt;action_plugin&lt;/a&gt; and handle the &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=devel:event:tpl_metaheader_output&quot; class=&quot;wikilink2&quot; title=&quot;devel:event:tpl_metaheader_output&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;devel:event:tpl_metaheader_output&quot;&gt;TPL_METAHEADER_OUTPUT&lt;/a&gt; event. When you define only some variables see the &lt;a href=&quot;#jsinfo&quot; title=&quot;wiki:devel:javascript ↵&quot; class=&quot;wikilink1&quot;&gt;JSINFO&lt;/a&gt; variable below.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Inline scripts&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;inline_scripts&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;7224-7721&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit11&quot; id=&quot;jquery&quot;&gt;jQuery&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Since the October 2011 release «Angua», DokuWiki ships with the jQuery and jQuery UI libraries.
&lt;/p&gt;

&lt;p&gt;
Please follow these coding conventions when working with jQuery in DokuWiki. Please also refer to our &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=devel:jqueryfaq&quot; class=&quot;wikilink2&quot; title=&quot;devel:jqueryfaq&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;devel:jqueryfaq&quot;&gt;JQuery FAQ for Plugin Developers&lt;/a&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;jQuery&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;jquery&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:11,&amp;quot;range&amp;quot;:&amp;quot;7722-7995&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit12&quot; id=&quot;no&quot;&gt;No $()&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
jQuery is only used in compatibility mode. There is no &lt;code&gt;$()&lt;/code&gt; method&lt;sup&gt;&lt;a href=&quot;#fn__2&quot; id=&quot;fnt__2&quot; class=&quot;fn_top&quot;&gt;2)&lt;/a&gt;&lt;/sup&gt;. Use the &lt;code&gt;jQuery()&lt;/code&gt; method instead.
&lt;/p&gt;

&lt;p&gt;
Do not map &lt;code&gt;$()&lt;/code&gt; to &lt;code&gt;jQuery()&lt;/code&gt;, not even within your own (anonymous) functions.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;No $()&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;no&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:12,&amp;quot;range&amp;quot;:&amp;quot;7996-8266&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit13&quot; id=&quot;prefix_jquery_object_variables&quot;&gt;Prefix jQuery object variables&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
To make it clear that a variable contains an instance of the jQuery object all these variables should be prefixed by a &lt;code&gt;$&lt;/code&gt; character:
&lt;/p&gt;
&lt;pre class=&quot;code javascript&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;var&lt;/span&gt; $obj &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; jQuery&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;#some__id&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Prefix jQuery object variables&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;prefix_jquery_object_variables&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:13,&amp;quot;range&amp;quot;:&amp;quot;8267-8505&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit14&quot; id=&quot;dokuwiki_javascript_environment&quot;&gt;DokuWiki JavaScript Environment&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;DokuWiki JavaScript Environment&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;dokuwiki_javascript_environment&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:5,&amp;quot;secid&amp;quot;:14,&amp;quot;range&amp;quot;:&amp;quot;8506-8550&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit15&quot; id=&quot;predefined_global_variables&quot;&gt;Predefined Global Variables&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
DokuWiki defines certain JavaScript variables for the use in your script:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;DOKU_BASE&lt;/code&gt; – the full webserver path to the DokuWiki installation&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;DOKU_TPL&lt;/code&gt; – the full webserver path to the used &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=template&quot; class=&quot;wikilink2&quot; title=&quot;template&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;template&quot;&gt;Template&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;DOKU_COOKIE_PARAM&lt;/code&gt; – parameters required to set similar cookies as in PHP &lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;path&lt;/code&gt; – cookie path&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;secure&lt;/code&gt; – whether secure cookie&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;LANG&lt;/code&gt; – &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=devel:localization#template_localization&quot; class=&quot;wikilink2&quot; title=&quot;devel:localization&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;devel:localization&quot;&gt;an array of languagestrings&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;JSINFO&lt;/code&gt; – an array of useful page info (see the section below)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;NS&lt;/code&gt; – $INFO[&amp;#039;namespace&amp;#039;] passed through the function &lt;code&gt;tpl_metaheaders()&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Predefined Global Variables&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;predefined_global_variables&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:5,&amp;quot;secid&amp;quot;:15,&amp;quot;range&amp;quot;:&amp;quot;8551-9206&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit16&quot; id=&quot;jsinfo&quot;&gt;JSINFO&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
DokuWiki passes the global &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=devel:environment#jsinfo&quot; class=&quot;wikilink2&quot; title=&quot;devel:environment&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;devel:environment&quot;&gt;$JSINFO&lt;/a&gt; to JavaScript (see &lt;a href=&quot;http://www.freelists.org/post/dokuwiki/INFO,44&quot; class=&quot;urlextern&quot; title=&quot;http://www.freelists.org/post/dokuwiki/INFO,44&quot; rel=&quot;ugc nofollow&quot;&gt;mailinglist discussion&lt;/a&gt;). This variable is an associative array usually containing the keys:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;id&lt;/code&gt; – the current page&amp;#039;s ID&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;namespace&lt;/code&gt; – the current namespace.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
And after 2018-04-05:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;ACT&lt;/code&gt; – the current mode&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;useHeadingNavigation&lt;/code&gt; – whether to use the first title for Navigation links (the former global constant &lt;code&gt;DOKU_UHN&lt;/code&gt; has been deprecated)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;useHeadingContent&lt;/code&gt; – whether to use the first title for Content links (the former global constant &lt;code&gt;DOKU_UHC&lt;/code&gt; has been deprecated)&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Other keys can easily be added from within PHP code. The usual way is using an &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:action_plugin&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:action_plugin&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:action_plugin&quot;&gt;action plugin&lt;/a&gt; like this:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; register&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;Doku_Event_Handler &lt;span class=&quot;re0&quot;&gt;$controller&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$controller&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;register_hook&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;DOKUWIKI_STARTED&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;AFTER&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;  &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;_adduser&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; _adduser&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$event&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$param&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;global&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$JSINFO&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$JSINFO&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;user&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$_SERVER&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;REMOTE_USER&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
If you want to make sure that your plugin&amp;#039;s data don&amp;#039;t interfere with other plugins or DokuWiki itself consider using &lt;code&gt;plugin_&amp;lt;pluginName&amp;gt;&lt;/code&gt; as prefix/top-level key.
&lt;/p&gt;

&lt;p&gt;
The contents of the &lt;code&gt;$JSINFO&lt;/code&gt; php variable are sent to the browser in the &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=tpl_metaheaders&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for tpl_metaheaders()&quot;&gt;tpl_metaheaders()&lt;/a&gt; function which is called from within the used &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:template&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:template&quot; data-wiki-id=&quot;wiki:devel:template&quot;&gt;template&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
If you need JSINFO in the &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=media_manager&quot; class=&quot;wikilink2&quot; title=&quot;media_manager&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;media_manager&quot;&gt;pop-up media manager&lt;/a&gt; or in the &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=devel:templates:detail.php&quot; class=&quot;wikilink2&quot; title=&quot;devel:templates:detail.php&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;devel:templates:detail.php&quot;&gt;media detail page&lt;/a&gt; you have to use respectively &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=devel:event:mediamanager_started&quot; class=&quot;wikilink2&quot; title=&quot;devel:event:mediamanager_started&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;devel:event:mediamanager_started&quot;&gt;MEDIAMANAGER_STARTED&lt;/a&gt; or &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=devel:event:detail_started&quot; class=&quot;wikilink2&quot; title=&quot;devel:event:detail_started&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;devel:event:detail_started&quot;&gt;DETAIL_STARTED&lt;/a&gt; in stead of &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=devel:event:dokuwiki_started&quot; class=&quot;wikilink2&quot; title=&quot;devel:event:dokuwiki_started&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;devel:event:dokuwiki_started&quot;&gt;DOKUWIKI_STARTED&lt;/a&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;JSINFO&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;jsinfo&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:5,&amp;quot;secid&amp;quot;:16,&amp;quot;range&amp;quot;:&amp;quot;9207-&amp;quot;} --&gt;&lt;div class=&quot;footnotes&quot;&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__1&quot; id=&quot;fn__1&quot; class=&quot;fn_bot&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;Please note as well that there is no &lt;code&gt;language&lt;/code&gt; attribute of the &lt;code&gt;script&lt;/code&gt; tag! Instead use &lt;code&gt;type=«text/javascript»&lt;/code&gt; to be standards compliant.&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__2&quot; id=&quot;fn__2&quot; class=&quot;fn_bot&quot;&gt;2)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;it might be defined but will &lt;strong&gt;not&lt;/strong&gt; do what you expect&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Mon, 28 Aug 2023 10:52:42 +0000</pubDate>
        </item>
        <item>
            <title>logging</title>
            <link>https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:logging&amp;rev=1768846402</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;ведение_журнала&quot;&gt;Ведение журнала&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.patreon.com/posts/better-logging-44629895&quot; class=&quot;urlextern&quot; title=&quot;https://www.patreon.com/posts/better-logging-44629895&quot; rel=&quot;ugc nofollow&quot;&gt;Вводная запись в блоге&lt;/a&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0412\u0435\u0434\u0435\u043d\u0438\u0435 \u0436\u0443\u0440\u043d\u0430\u043b\u0430&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0432\u0435\u0434\u0435\u043d\u0438\u0435_\u0436\u0443\u0440\u043d\u0430\u043b\u0430&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-148&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;лесозаготовительные_объекты&quot;&gt;Лесозаготовительные объекты&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Системы логирования классифицируют зарегистрированные сообщения об ошибках. Они соответствуют каталогам в директории &lt;code&gt;data/log/&lt;/code&gt; Плагины могут использовать свои собственные системы..
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:dokuwiki&quot; class=&quot;wikilink1&quot; title=&quot;wiki:dokuwiki&quot; data-wiki-id=&quot;wiki:dokuwiki&quot;&gt;В DokuWiki&lt;/a&gt; по умолчанию определены три средства ведения журналов:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;error&lt;/code&gt; – всё, что не должно произойти и является результатом проблемы с кодом, средой, конфигурацией или взаимодействием с пользователем.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;deprecated&lt;/code&gt; – регистрирует использование устаревшего кода. Трассировка стека должна помочь определить код, который необходимо обновить.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;debug&lt;/code&gt; – сообщения, которые помогают в процессе разработки или настройки, но обычно не требуются.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Какие именно объекты следует регистрировать, можно настроить с помощью опции &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:config:dontlog&quot; class=&quot;wikilink1&quot; title=&quot;wiki:config:dontlog&quot; data-wiki-id=&quot;wiki:config:dontlog&quot;&gt;dontlog&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
Если вам нужно только записывать сообщения об ошибках, без устаревших команд, и отлаживать код, то используйте следующую строку в файле.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;conf/dokuwiki.php&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
Должно выглядеть вот так.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;$conf[&amp;#039;dontlog&amp;#039;] = &amp;#039;deprecated,debug&amp;#039;;&lt;/code&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041b\u0435\u0441\u043e\u0437\u0430\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043b\u0435\u0441\u043e\u0437\u0430\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435_\u043e\u0431\u044a\u0435\u043a\u0442\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;149-1905&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;автоматическая_регистрация_ошибок&quot;&gt;Автоматическая регистрация ошибок&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
DokuWiki регистрирует обработчики ошибок, которые автоматически пытаются перехватить все возникающие исключения, ошибки и фатальные события. При этом отображается информационное сообщение для конечного пользователя, а ошибка регистрируется в &lt;code&gt;error&lt;/code&gt; соответствующей системе.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043e\u0448\u0438\u0431\u043e\u043a&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f_\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f_\u043e\u0448\u0438\u0431\u043e\u043a&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;1906-2487&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;формат_журнала&quot;&gt;Формат журнала&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/images/smileys/fixme.jpg&quot; class=&quot;icon smiley&quot; alt=&quot;FIXME&quot; /&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0424\u043e\u0440\u043c\u0430\u0442 \u0436\u0443\u0440\u043d\u0430\u043b\u0430&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0444\u043e\u0440\u043c\u0430\u0442_\u0436\u0443\u0440\u043d\u0430\u043b\u0430&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;2488-2536&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;пользовательское_ведение_журнала&quot;&gt;Пользовательское ведение журнала&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/images/smileys/fixme.jpg&quot; class=&quot;icon smiley&quot; alt=&quot;FIXME&quot; /&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0435 \u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0436\u0443\u0440\u043d\u0430\u043b\u0430&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0435_\u0432\u0435\u0434\u0435\u043d\u0438\u0435_\u0436\u0443\u0440\u043d\u0430\u043b\u0430&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;2537-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Mon, 19 Jan 2026 18:13:22 +0000</pubDate>
        </item>
        <item>
            <title>menus</title>
            <link>https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:menus&amp;rev=1693707014</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;меню&quot;&gt;Меню&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Меню — важная часть шаблона. Они обеспечивают доступ к функциям вики, т.е. действия. Например, они могут предоставить кнопку или ссылку для редактирования текущей страницы, доступа к последним изменениям или предложить экспортировать PDF-файл.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:dokuwiki&quot; class=&quot;wikilink1&quot; title=&quot;wiki:dokuwiki&quot; data-wiki-id=&quot;wiki:dokuwiki&quot;&gt;DokuWiki&lt;/a&gt; группирует эти действия в разные меню, которые можно вставлять в шаблон в разных местах.
&lt;/p&gt;

&lt;p&gt;
Также доступен &lt;a href=&quot;https://www.patreon.com/posts/menus-14160215&quot; class=&quot;urlextern&quot; title=&quot;https://www.patreon.com/posts/menus-14160215&quot; rel=&quot;ugc nofollow&quot;&gt;вводный пост в блоге.&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041c\u0435\u043d\u044e&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043c\u0435\u043d\u044e&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-768&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;доступные_меню&quot;&gt;Доступные меню&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;div class=&quot;table sectionedit3&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;thead&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; вид &lt;/th&gt;&lt;th class=&quot;col1&quot;&gt; Источник &lt;/th&gt;&lt;th class=&quot;col2&quot;&gt; Описание &lt;/th&gt;
	&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;code&gt;site&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; &lt;a href=&quot;https://github.com/dokuwiki/dokuwiki/blob/master/inc/Menu/SiteMenu.php&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/dokuwiki/dokuwiki/blob/master/inc/Menu/SiteMenu.php&quot; rel=&quot;ugc nofollow&quot;&gt;SiteMenu&lt;/a&gt; &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt;определяет все действия на уровне вики, например действия, не относящиеся к одной странице. Примеры: недавние изменения, карта сайта) &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;code&gt;user&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; &lt;a href=&quot;https://github.com/dokuwiki/dokuwiki/blob/master/inc/Menu/UserMenu.php&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/dokuwiki/dokuwiki/blob/master/inc/Menu/UserMenu.php&quot; rel=&quot;ugc nofollow&quot;&gt;UserMenu&lt;/a&gt; &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; определяет действия, относящиеся к текущему пользователю. Примеры: Логин, Администратор. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;code&gt;page&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; &lt;a href=&quot;https://github.com/dokuwiki/dokuwiki/blob/master/inc/Menu/PageMenu.php&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/dokuwiki/dokuwiki/blob/master/inc/Menu/PageMenu.php&quot; rel=&quot;ugc nofollow&quot;&gt;PageMenu&lt;/a&gt; &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; определяет действие, связанное с текущей страницей. Примеры: «Редактировать», «Показать старые версии». &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;code&gt;detail&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; &lt;a href=&quot;https://github.com/dokuwiki/dokuwiki/blob/master/inc/Menu/DetailMenu.php&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/dokuwiki/dokuwiki/blob/master/inc/Menu/DetailMenu.php&quot; rel=&quot;ugc nofollow&quot;&gt;DetailMenu&lt;/a&gt; &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; аналогично меню страницы, но связано с изображением при отображении в подробном представлении &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; &lt;a href=&quot;https://github.com/dokuwiki/dokuwiki/blob/master/inc/Menu/MobileMenu.php&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/dokuwiki/dokuwiki/blob/master/inc/Menu/MobileMenu.php&quot; rel=&quot;ugc nofollow&quot;&gt;MobileMenu&lt;/a&gt; &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; объединяет все элементы из меню «Сайт», «Пользователь» и «Страница», когда им разрешено отображение в мобильном контексте. Полезно для создания единого &lt;a href=&quot;https://en.wikipedia.org/wiki/Hamburger_button&quot; class=&quot;urlextern&quot; title=&quot;https://en.wikipedia.org/wiki/Hamburger_button&quot; rel=&quot;ugc nofollow&quot;&gt;гамбургер-меню&lt;/a&gt;. &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;810-2499&amp;quot;} --&gt;
&lt;p&gt;
Плагины могут расширять и изменять вышеуказанные меню, используя событие &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:event:menu_items_assembly&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:event:menu_items_assembly&quot; data-wiki-id=&quot;wiki:devel:event:menu_items_assembly&quot;&gt;MENU_ITEMS_ASSEMBLY&lt;/a&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043c\u0435\u043d\u044e&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435_\u043c\u0435\u043d\u044e&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;769-2699&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;пункты_меню&quot;&gt;Пункты меню&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Меню состоят из пунктов меню — объектов, наследуемых от AbstractItem.php. Пункт меню настраивает несколько свойств, которые шаблон может использовать для отображения этого элемента. Сюда входят триггерное действие, метка, значок SVG и многое другое. Пожалуйста, обратитесь к источнику чтобы узнать, какие свойства доступны..
&lt;/p&gt;

&lt;p&gt;
Плагины могут создавать свои собственные элементы и добавлять их в доступные меню с помощью события &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:event:menu_items_assembly&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:event:menu_items_assembly&quot; data-wiki-id=&quot;wiki:devel:event:menu_items_assembly&quot;&gt;MENU_ITEMS_ASSEMBLY&lt;/a&gt;.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;иконки&quot;&gt;Иконки&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Значок, возвращаемый методом &lt;code&gt;getSVG()&lt;/code&gt; и заданный в &lt;code&gt;$svg&lt;/code&gt; свойстве, должен соответствовать следующим ограничениям:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Он должен быть в формате SVG.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Размер файла должен быть меньше 2 КБ.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Он должен содержать только один объект пути.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Цвет заливки пути будет установлен &lt;abbr title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/abbr&gt; шаблона при его использовании.
&lt;/p&gt;

&lt;p&gt;
Чтобы соответствовать стилю других значков, рекомендуется либо выбрать значок из огромного бесплатного выбора на &lt;a href=&quot;https://materialdesignicons.com/&quot; class=&quot;urlextern&quot; title=&quot;https://materialdesignicons.com/&quot; rel=&quot;ugc nofollow&quot;&gt;https://materialdesignicons.com/&lt;/a&gt;, либо придерживаться &lt;a href=&quot;https://material.io/guidelines/style/icons.html&quot; class=&quot;urlextern&quot; title=&quot;https://material.io/guidelines/style/icons.html&quot; rel=&quot;ugc nofollow&quot;&gt;рекомендаций по дизайну материалов&lt;/a&gt;  при разработке собственного значка..
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u0443\u043d\u043a\u0442\u044b \u043c\u0435\u043d\u044e&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u0443\u043d\u043a\u0442\u044b_\u043c\u0435\u043d\u044e&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;2700-4656&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;добавление_меню_в_шаблоны&quot;&gt;Добавление меню в шаблоны&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Меню, упомянутые выше, создают их экземпляры и либо используют один из удобных методов, либо просто вызывают &lt;code&gt;getItems()&lt;/code&gt; и перебирают объекты элементов.
&lt;/p&gt;

&lt;p&gt;
Пример: чтобы интегрировать UserMenu в виде списка ссылок, используйте это:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; \dokuwiki\Menu\UserMenu&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;getListItems&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Выпадающее меню для мобильных устройств можно добавить следующим образом:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; \dokuwiki\Menu\MobileMenu&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;getDropdown&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Пожалуйста, обратитесь к &lt;a href=&quot;https://github.com/dokuwiki/dokuwiki/blob/master/inc/Menu/AbstractMenu.php&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/dokuwiki/dokuwiki/blob/master/inc/Menu/AbstractMenu.php&quot; rel=&quot;ugc nofollow&quot;&gt;источнику&lt;/a&gt;, чтобы узнать, что еще доступно.
&lt;/p&gt;

&lt;p&gt;
Если вам нужен конкретный &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt;-код для пунктов меню, вам нужно перебрать элементы меню и создать &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt; самостоятельно. Например, этот цикл создаст значки в &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:template:writr&quot; class=&quot;wikilink2&quot; title=&quot;wiki:template:writr&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:template:writr&quot;&gt;шаблоне записи&lt;/a&gt;, что немного сложнее:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$items&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; \dokuwiki\Menu\PageMenu&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;getItems&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;foreach&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$items&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$item&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
  &lt;span class=&quot;kw1&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;li&amp;gt;&#039;&lt;/span&gt;
      &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;a href=&amp;quot;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$item&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;getLink&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;&amp;quot; title=&amp;quot;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$item&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;getTitle&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;&amp;quot;&amp;gt;&#039;&lt;/span&gt;
      &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;span class=&amp;quot;icon&amp;quot;&amp;gt;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;inlineSVG&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$item&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;getSvg&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;/span&amp;gt;&#039;&lt;/span&gt;
      &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;span class=&amp;quot;a11y&amp;quot;&amp;gt;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$item&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;getLabel&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;/span&amp;gt;&#039;&lt;/span&gt;
      &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u0435\u043d\u044e \u0432 \u0448\u0430\u0431\u043b\u043e\u043d\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435_\u043c\u0435\u043d\u044e_\u0432_\u0448\u0430\u0431\u043b\u043e\u043d\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;4657-6315&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit6&quot; id=&quot;устаревшая_поддержка&quot;&gt;Устаревшая поддержка&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
С появлением системы меню следующие функции стали устаревшими. Авторам шаблонов и плагинов следует обязательно заменить их в ближайшее время:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;tpl_button()&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;tpl_actionlink()&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;tpl_get_action()&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;tpl_actiondropdown()&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;tpl_toolsevent()&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0423\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0430\u044f_\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;6316-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Sun, 03 Sep 2023 02:10:14 +0000</pubDate>
        </item>
        <item>
            <title>overview</title>
            <link>https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:overview&amp;rev=1735906212</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;обзор_ядра&quot;&gt;Обзор ядра&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Это обзор исходного кода во время запроса на &lt;code&gt;/doku.php?id=start&amp;amp;do=show&lt;/code&gt; объяснение основ DokuWiki. Вам необходимо иметь полный исходный код, чтобы полностью насладиться этим путешествием, когда вы читаете это. Используйте ссылки &lt;a href=&quot;https://codesearch.dokuwiki.org/xref/dokuwiki/&quot; class=&quot;urlextern&quot; title=&quot;https://codesearch.dokuwiki.org/xref/dokuwiki/&quot; rel=&quot;ugc nofollow&quot;&gt;XRef&lt;/a&gt; чтобы получить просматриваемую версию исходного кода. Также доступна более подробная страница &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:callgraph&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:callgraph&quot; data-wiki-id=&quot;wiki:devel:callgraph&quot;&gt;callgraph&lt;/a&gt; включая процесс рендеринга. Многие детали опущены в этом описании, чтобы сделать его более простым.
&lt;/p&gt;
&lt;div class=&quot;table sectionedit2&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;thead&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Filename                           &lt;/th&gt;&lt;th class=&quot;col1 leftalign&quot;&gt; Code snippet                                       &lt;/th&gt;&lt;th class=&quot;col2 leftalign&quot;&gt; Description                                                                                                                                                                                                                            &lt;/th&gt;
	&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot; rowspan=&quot;3&quot;&gt; &lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/images/smileys/magnifier-left.png&quot; class=&quot;icon smiley&quot; alt=&quot;:&amp;amp;13:&quot; /&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:xref:dokuwiki:doku.php&quot; class=&quot;wikilink1&quot; title=&quot;wiki:xref:dokuwiki:doku.php&quot; data-wiki-id=&quot;wiki:xref:dokuwiki:doku.php&quot;&gt;doku.php&lt;/a&gt;                  &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; &lt;code&gt; if(!defined(&amp;#039;DOKU_INC&amp;#039;))       &lt;/code&gt;               &lt;/td&gt;&lt;td class=&quot;col2 leftalign&quot;&gt; Все начинается здесь с определения базового каталога кода.                                                                                                                                                                            &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;code&gt; $ACT = $_REQUEST[&amp;#039;do&amp;#039;]         &lt;/code&gt;               &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Далее мы определяем, какое действие запрашивается, то есть &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:action_modes&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:action_modes&quot; data-wiki-id=&quot;wiki:devel:action_modes&quot;&gt;режимы do&lt;/a&gt;                                                                                                                                                     &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;code&gt; require_once(&amp;#039;init.php&amp;#039;)       &lt;/code&gt;               &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; перейти к init.php, инициализировать ядро                                                                                                                                                                                                     &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot; rowspan=&quot;8&quot;&gt; &lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/images/smileys/magnifier-left.png&quot; class=&quot;icon smiley&quot; alt=&quot;:&amp;amp;13:&quot; /&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:xref:dokuwiki:inc:init.php&quot; class=&quot;wikilink1&quot; title=&quot;wiki:xref:dokuwiki:inc:init.php&quot; data-wiki-id=&quot;wiki:xref:dokuwiki:inc:init.php&quot;&gt;init.php&lt;/a&gt;             &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; &lt;code&gt; include(&amp;#039;preload.php&amp;#039;)         &lt;/code&gt;               &lt;/td&gt;&lt;td class=&quot;col2 leftalign&quot;&gt; предварительная загрузка &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:preload&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:preload&quot; data-wiki-id=&quot;wiki:devel:preload&quot;&gt;preload&lt;/a&gt; позволяет переопределять каталоги и каскад конфигураций                                                                                                                                                         &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;code&gt; if(!defined(&amp;#039;DOKU_CONF&amp;#039;)       &lt;/code&gt;               &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; создать среду &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:environment&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:environment&quot; data-wiki-id=&quot;wiki:devel:environment&quot;&gt;environment&lt;/a&gt; определяющую местоположение кода                                                                                                                                                                                 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row6&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;code&gt; include(DOKU_INC. &amp;#039;inc/config_cascade.php&amp;#039;) &lt;/code&gt;  &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; подготовить и загрузить глобальный файл(ы) конфигурации &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:configuration&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:configuration&quot; data-wiki-id=&quot;wiki:devel:configuration&quot;&gt;configuration&lt;/a&gt;                                                                                                                                                                                  &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row7&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;code&gt; global $lang;                  &lt;/code&gt;               &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; загрузите и подготовьте &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:localization&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:localization&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:localization&quot;&gt;language&lt;/a&gt; файлы, используя английский язык для всех отсутствующих записей                                                                                                                                      &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row8&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;code&gt; if(!defined(&amp;#039;DOKU_REL&amp;#039;)        &lt;/code&gt;               &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; создать все определения среды &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:environment&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:environment&quot; data-wiki-id=&quot;wiki:devel:environment&quot;&gt;environment&lt;/a&gt; которые еще не определены, что может зависеть от настроек конфигурации &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=config&quot; class=&quot;wikilink2&quot; title=&quot;config&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;config&quot;&gt;config&lt;/a&gt;                                                                                                                    &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row9&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;code&gt; if(!headers_sent() &amp;amp;&amp;amp; ..       &lt;/code&gt;               &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; инициализация сеанса и установка cookie                                                                                                                                                                                                            &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row10&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;code&gt; require_once (DOKU_INC.&amp;#039;inc/load.php&amp;#039;) &lt;/code&gt;       &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:autoloader&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:autoloader&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:autoloader&quot;&gt;autoload&lt;/a&gt; всех библиотек                                                                                                                                                                                                 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row11&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;code&gt; … &lt;br/&gt;
auth_setup() &lt;br/&gt;
…     &lt;/code&gt;               &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; инициализирует контроллер плагина, &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:events&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:events&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:events&quot;&gt;event handling&lt;/a&gt; систему обработки событий , аутентификацию и выход после настройки почты                                                                                                                         &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row12&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot; rowspan=&quot;4&quot;&gt; &lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/images/smileys/magnifier-left.png&quot; class=&quot;icon smiley&quot; alt=&quot;:&amp;amp;13:&quot; /&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:xref:dokuwiki:doku.php&quot; class=&quot;wikilink1&quot; title=&quot;wiki:xref:dokuwiki:doku.php&quot; data-wiki-id=&quot;wiki:xref:dokuwiki:doku.php&quot;&gt;doku.php&lt;/a&gt;                  &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; &lt;code&gt; $ID    = getID()               &lt;/code&gt;               &lt;/td&gt;&lt;td class=&quot;col2 leftalign&quot;&gt; вернуться из init.php, очистить и превратить запрос в глобальные переменные &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:environment&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:environment&quot; data-wiki-id=&quot;wiki:devel:environment&quot;&gt;global variables&lt;/a&gt;                                                                                                                                              &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row13&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;code&gt; $INFO = pageinfo()             &lt;/code&gt;               &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; добавить метаданные страницы &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:metadata&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:metadata&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:metadata&quot;&gt;metadata&lt;/a&gt; в глобальную переменную &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:environment&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:environment&quot; data-wiki-id=&quot;wiki:devel:environment&quot;&gt;global variable&lt;/a&gt;, это включает вызов &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=auth_quickaclcheck&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for auth_quickaclcheck()&quot;&gt;auth_quickaclcheck()&lt;/a&gt; и &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=p_get_metadata&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for p_get_metadata()&quot;&gt;p_get_metadata()&lt;/a&gt;. Последний вызывает рендеринг метаданных страницы, если они не кэшированы.        &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row14&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;code&gt; if(!$INFO[&amp;#039;exists&amp;#039;] …        &lt;/code&gt;               &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; отправьте 404 для отсутствующих страниц                                                                                                                                                                                                             &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row15&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;code&gt; trigger_event(DOKUWIKI_STARTED)&lt;/code&gt;               &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; плагины вызова действий &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:action_plugins&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:action_plugins&quot; data-wiki-id=&quot;wiki:devel:action_plugins&quot;&gt;action plugins&lt;/a&gt;, подписывающиеся на событие &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:event:dokuwiki_started&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:event:dokuwiki_started&quot; data-wiki-id=&quot;wiki:devel:event:dokuwiki_started&quot;&gt;DOKUWIKI_STARTED&lt;/a&gt;                                                                                                                                       &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row16&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot; rowspan=&quot;7&quot;&gt; &lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/images/smileys/magnifier-left.png&quot; class=&quot;icon smiley&quot; alt=&quot;:&amp;amp;13:&quot; /&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:xref:dokuwiki:inc:actions.php&quot; class=&quot;wikilink1&quot; title=&quot;wiki:xref:dokuwiki:inc:actions.php&quot; data-wiki-id=&quot;wiki:xref:dokuwiki:inc:actions.php&quot;&gt;actions.php&lt;/a&gt;           &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; &lt;code&gt; act_dispatch($ACT)             &lt;/code&gt;               &lt;/td&gt;&lt;td class=&quot;col2 leftalign&quot;&gt; выполнять работу в зависимости от действия &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:action_modes&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:action_modes&quot; data-wiki-id=&quot;wiki:devel:action_modes&quot;&gt;action&lt;/a&gt;                                                                                                                                                                                 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row17&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;if ($evt-&amp;gt;advise_before()) ...&lt;/code&gt;             &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; разрешить плагинам переопределять поведение по умолчанию с помощью события &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=devel:event:action_act_preprocess&quot; class=&quot;wikilink2&quot; title=&quot;devel:event:action_act_preprocess&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;devel:event:action_act_preprocess&quot;&gt;ACTION_ACT_PREPROCESS&lt;/a&gt;                                                                                                                      &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row18&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;code&gt; $ACT = act_clean($ACT)         &lt;/code&gt;               &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; дезинфицировать и перенаправлять отключенные  &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=config:disableactions&quot; class=&quot;wikilink2&quot; title=&quot;config:disableactions&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;config:disableactions&quot;&gt;disabled actions&lt;/a&gt; действия &lt;code&gt;do=show&lt;/code&gt;                                                                                                                                                      &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row19&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;code&gt; … &lt;br/&gt;
$ACT = act_permcheck($ACT) &lt;br/&gt;
…  &lt;/code&gt;    &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; вызовите код обработки для запрошенного действия(й) при проверке необходимых разрешений &lt;abbr title=&quot;Access Control List&quot;&gt;ACL&lt;/abbr&gt; . $ACT может измениться во время &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=act_dispatch&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for act_dispatch()&quot;&gt;act_dispatch()&lt;/a&gt;.                                                                                              &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row20&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;code&gt; global $INFO &lt;br/&gt;
global $conf              &lt;/code&gt;    &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; сделать глобальные переменные доступными для кода шаблона                                                                                                                                                                                      &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row21&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;code&gt; trigger_event(ACTION_HEADERS_SEND)        &lt;/code&gt;    &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; плагины действий &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:action_plugins&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:action_plugins&quot; data-wiki-id=&quot;wiki:devel:action_plugins&quot;&gt;action plugins&lt;/a&gt; вызова , подписывающиеся на событие &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:event:action_headers_send&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:event:action_headers_send&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:event:action_headers_send&quot;&gt;ACTION_HEADERS_SEND&lt;/a&gt;                                                                                                                                   &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row22&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;code&gt; include(template(&amp;#039;main.php&amp;#039;))             &lt;/code&gt;    &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; к выбранному шаблону основного скрипта                                                                                                                                                                                              &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row23&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot; rowspan=&quot;2&quot;&gt; &lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/images/smileys/magnifier-left.png&quot; class=&quot;icon smiley&quot; alt=&quot;:&amp;amp;13:&quot; /&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:xref:dokuwiki:lib:tpl:dokuwiki:main.php&quot; class=&quot;wikilink1&quot; title=&quot;wiki:xref:dokuwiki:lib:tpl:dokuwiki:main.php&quot; data-wiki-id=&quot;wiki:xref:dokuwiki:lib:tpl:dokuwiki:main.php&quot;&gt;lib/tpl/dokuwiki/main.php&lt;/a&gt;  &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; &lt;code&gt; … &lt;br/&gt;
tpl_metaheaders() &lt;br/&gt;
…    &lt;/code&gt;           &lt;/td&gt;&lt;td class=&quot;col2 centeralign&quot;&gt;  Основной скрипт шаблона &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:template&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:template&quot; data-wiki-id=&quot;wiki:devel:template&quot;&gt;template&lt;/a&gt; состоит из элементов дизайна &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt; , вызывающих методы PHP для такого контента, как метазаголовки, кнопки, элементы навигации и т. д. Все они доступны в файле &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=inc%20template.php&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for inc/template.php&quot;&gt;inc/template.php&lt;/a&gt;                     &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row24&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot; rowspan=&quot;2&quot;&gt; &lt;code&gt; tpl_content()                      &lt;/code&gt;           &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot; rowspan=&quot;2&quot;&gt; здесь создается настоящая вики-страница                                                                                                                                                                                                   &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row25&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot; rowspan=&quot;3&quot;&gt; &lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/images/smileys/magnifier-left.png&quot; class=&quot;icon smiley&quot; alt=&quot;:&amp;amp;13:&quot; /&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:xref:dokuwiki:inc:template.php&quot; class=&quot;wikilink1&quot; title=&quot;wiki:xref:dokuwiki:inc:template.php&quot; data-wiki-id=&quot;wiki:xref:dokuwiki:inc:template.php&quot;&gt;inc/template.php&lt;/a&gt;          &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row26&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;code&gt; trigger_event(TPL_ACT_RENDER)      &lt;/code&gt;           &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; вызов &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=tpl_content_core&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for tpl_content_core()&quot;&gt;tpl_content_core()&lt;/a&gt; с использованием события &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:event:tpl_act_render&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:event:tpl_act_render&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:event:tpl_act_render&quot;&gt;TPL_ACT_RENDER&lt;/a&gt;                                                                                                                                          &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row27&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;code&gt; switch($ACT)                       &lt;/code&gt;           &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; выбор контента на основе действия, основные &lt;code&gt;do=show&lt;/code&gt; вызовы &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=html_show&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for html_show()&quot;&gt;html_show()&lt;/a&gt;                                                                                                                                                       &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row28&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/images/smileys/magnifier-left.png&quot; class=&quot;icon smiley&quot; alt=&quot;:&amp;amp;13:&quot; /&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:xref:dokuwiki:inc:html.php&quot; class=&quot;wikilink1&quot; title=&quot;wiki:xref:dokuwiki:inc:html.php&quot; data-wiki-id=&quot;wiki:xref:dokuwiki:inc:html.php&quot;&gt;inc/html.php&lt;/a&gt;              &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; &lt;code&gt; $html = p_wiki_xhtml(…)          &lt;/code&gt;           &lt;/td&gt;&lt;td class=&quot;col2 leftalign&quot;&gt; который использует  &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:caching#two-stage-caching&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:caching&quot; data-wiki-id=&quot;wiki:devel:caching&quot;&gt;cached XHTML&lt;/a&gt; кэшированную версию страницы &lt;em class=&quot;u&quot;&gt;ИЛИ&lt;/em&gt; запускает &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:parser&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:parser&quot; data-wiki-id=&quot;wiki:devel:parser&quot;&gt;renderer&lt;/a&gt; для отображения кэшированных инструкций в виде XHTML &lt;em class=&quot;u&quot;&gt;ИЛИ&lt;/em&gt; использует &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:parser&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:parser&quot; data-wiki-id=&quot;wiki:devel:parser&quot;&gt;parser&lt;/a&gt; для предварительного преобразования текста вики в инструкции.  &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row29&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/images/smileys/magnifier-left.png&quot; class=&quot;icon smiley&quot; alt=&quot;:&amp;amp;13:&quot; /&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:xref:dokuwiki:inc:template.php&quot; class=&quot;wikilink1&quot; title=&quot;wiki:xref:dokuwiki:inc:template.php&quot; data-wiki-id=&quot;wiki:xref:dokuwiki:inc:template.php&quot;&gt;inc/template.php&lt;/a&gt;          &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; &lt;code&gt; trigger_event(TPL_CONTENT_DISPLAY) &lt;/code&gt;           &lt;/td&gt;&lt;td class=&quot;col2 leftalign&quot;&gt; &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:action_plugins&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:action_plugins&quot; data-wiki-id=&quot;wiki:devel:action_plugins&quot;&gt;у плагинов действия&lt;/a&gt; есть последний шанс отредактировать необработанный &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt; перед выводом с помощью события &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=devel:event:tpl_content_display&quot; class=&quot;wikilink2&quot; title=&quot;devel:event:tpl_content_display&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;devel:event:tpl_content_display&quot;&gt;TPL_CONTENT_DISPLAY&lt;/a&gt; event                                             &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row30&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/images/smileys/magnifier-left.png&quot; class=&quot;icon smiley&quot; alt=&quot;:&amp;amp;13:&quot; /&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:xref:dokuwiki:doku.php&quot; class=&quot;wikilink1&quot; title=&quot;wiki:xref:dokuwiki:doku.php&quot; data-wiki-id=&quot;wiki:xref:dokuwiki:doku.php&quot;&gt;doku.php&lt;/a&gt;                  &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; &lt;code&gt; trigger_event(DOKUWIKI_DONE)   &lt;/code&gt;               &lt;/td&gt;&lt;td class=&quot;col2 leftalign&quot;&gt; завершить вызовом &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:action_plugins&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:action_plugins&quot; data-wiki-id=&quot;wiki:devel:action_plugins&quot;&gt;action plugins&lt;/a&gt; подписавшихся на событие &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:event:dokuwiki_done&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:event:dokuwiki_done&quot; data-wiki-id=&quot;wiki:devel:event:dokuwiki_done&quot;&gt;DOKUWIKI_DONE&lt;/a&gt; когда основной скрипт шаблона завершен                                                                                         &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;861-13671&amp;quot;} --&gt;
&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Fri, 03 Jan 2025 12:10:12 +0000</pubDate>
        </item>
        <item>
            <title>parser</title>
            <link>https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:parser&amp;rev=1737111227</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;парсер_докувики&quot;&gt;Парсер «Докувики»&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
В этом документе излагаются детали функционирования парсера «&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:dokuwiki&quot; class=&quot;wikilink1&quot; title=&quot;wiki:dokuwiki&quot; data-wiki-id=&quot;wiki:dokuwiki&quot;&gt;Докувики&lt;/a&gt;», которые могут понадобиться разработчикам для модификации поведения парсера или получения контроля над выходным документом, возможно, изменив сгенерированный &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt; или реализовав другие форматы вывода.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u0430\u0440\u0441\u0435\u0440 \u00ab\u0414\u043e\u043a\u0443\u0432\u0438\u043a\u0438\u00bb&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u0430\u0440\u0441\u0435\u0440_\u0434\u043e\u043a\u0443\u0432\u0438\u043a\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-573&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;обзор&quot;&gt;Обзор&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Парсер разбивает процесс трансформации исходного документа «Докувики» в финальный выходной документ (обычно XHTML) на дискретные стадии. Каждая стадия представлена одним или несколькими PHP-классами.
&lt;/p&gt;

&lt;p&gt;
В общем рассмотрении этими элементами являются;
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Lexer&lt;sup&gt;&lt;a href=&quot;#fn__1&quot; id=&quot;fnt__1&quot; class=&quot;fn_top&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt; (лексический анализатор): сканирует&lt;sup&gt;&lt;a href=&quot;#fn__2&quot; id=&quot;fnt__2&quot; class=&quot;fn_top&quot;&gt;2)&lt;/a&gt;&lt;/sup&gt; исходный документ «Докувики» и выводит последовательность «вхождений» (токенов&lt;sup&gt;&lt;a href=&quot;#fn__3&quot; id=&quot;fnt__3&quot; class=&quot;fn_top&quot;&gt;3)&lt;/a&gt;&lt;/sup&gt;), соответствующих синтаксической структуре документа.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Handler&lt;sup&gt;&lt;a href=&quot;#fn__4&quot; id=&quot;fnt__4&quot; class=&quot;fn_top&quot;&gt;4)&lt;/a&gt;&lt;/sup&gt; (обработчик): получает вхождения от анализатора и преобразует их в последовательность «инструкций»&lt;sup&gt;&lt;a href=&quot;#fn__5&quot; id=&quot;fnt__5&quot; class=&quot;fn_top&quot;&gt;5)&lt;/a&gt;&lt;/sup&gt;. Он описывает, как должет быть сформирован выходной документ, от начала до конца.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Parser&lt;sup&gt;&lt;a href=&quot;#fn__6&quot; id=&quot;fnt__6&quot; class=&quot;fn_top&quot;&gt;6)&lt;/a&gt;&lt;/sup&gt; (парсер): «связывает» лексический анализатор с обработчиком, предоставляя синтаксические правила «Докувики», а также точку доступа к системе (метод &lt;code&gt;Parser::parse()&lt;/code&gt;)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Renderer&lt;sup&gt;&lt;a href=&quot;#fn__7&quot; id=&quot;fnt__7&quot; class=&quot;fn_top&quot;&gt;7)&lt;/a&gt;&lt;/sup&gt; (преобразователь): принимает инструкции от обработчика и «отрисовывает» готовый к выводу документ (например, в виде XHTML).&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
Механизма для соединения Handler (обработчика)  с Renderer (логическим преобразователем) &lt;strong&gt;не предусмотрено&lt;/strong&gt; — для этого требуется кодирование для каждого конкретного случая использования.
&lt;/p&gt;

&lt;p&gt;
Схематическая диаграмма связей между компонентами;
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;    ┌────────────┐           ┌────────────┐
    │            │   Ввод    │ Клиентский │
    │   Парсер   ◄───────────┤ код        │
    │            │  Строка   │            │
    └─────┬──────┘           └─────▲──────┘
  Режимы  │                        │
    +     │        Инструкции      │
  Строка  │        преобразователя │
  ввода   │                        │
    ┌─────▼──────┐           ┌─────┴──────┐
    │            │           │            │
    │ Анализатор ├───────────► Обработчик │
    │            │ Вхождения │            │
    └─────┬──────┘           └────────────┘
          │
          │
     ┌────┴───┐
     │ Режимы ├─┐
     └─┬──────┘ ├─┐
       └─┬──────┘ │
         └────────┘&lt;/pre&gt;

&lt;p&gt;
«Клиентский код» (код, использующий парсер) вызывает парсер, передавая ему входную строку. В ответ ему возвращается перечень «инструкций» преобразователя, построенных обработчиком. Они могут быть использованы неким объектом, реализующим преобразователь.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Примечание:&lt;/strong&gt; критическим моментом здесь является намерение позволить преобразователю быть настолько «тупым», насколько это возможно. От него &lt;em&gt;не&lt;/em&gt; требуется осуществлять дальнейшую интерпретацию или модификацию переданных инструкций, но полностью сконцентрироваться на формировании выходных данных (например, XHTML) — в особенности, преобразователю не следует отслеживать состояния. Соблюдение этого принципа и, кроме того, составление преобразователя достаточно простым для реализации (сосредоточенной исключтельно на том, что следует выводить), также сделает возможным преобразователю быть взаимозаменяемым (например, вывод PDF в качестве альтернативы XHTML). В то же самое время, выходные инструкции обработчика &lt;em&gt;направляются&lt;/em&gt; для преобразования в XHTML и не всегда могут быть пригодынми для всех выходных форматов.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041e\u0431\u0437\u043e\u0440&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043e\u0431\u0437\u043e\u0440&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;574-7307&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit3&quot; id=&quot;лексический_анализатор&quot;&gt;Лексический анализатор&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Определяется в &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=inc%20parsing%20lexer%20lexer.php&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;search definitions for inc:parsing:lexer:lexer.php&quot;&gt;inc/Parsing/Lexer/Lexer.php&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
В самом общем смысле, он реализует инструмент для управления комплексными регулярными выражениями, где важным является состояние. Анализатор появился из &lt;a href=&quot;https://simpletest.sourceforge.net/en/start-testing.html&quot; class=&quot;urlextern&quot; title=&quot;https://simpletest.sourceforge.net/en/start-testing.html&quot; rel=&quot;ugc nofollow&quot;&gt;Simple Test &lt;/a&gt;, но содержит три модификации (читай: «хака»):
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; поддержка шаблонов просмотра назад и просмотра вперед&lt;sup&gt;&lt;a href=&quot;#fn__8&quot; id=&quot;fnt__8&quot; class=&quot;fn_top&quot;&gt;8)&lt;/a&gt;&lt;/sup&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; поддержка изменения модификаторов шаблона в пределах шаблона;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; уведомление обработчика о начальном индексе байта в необработанном тексте, где был сопоставлен токен.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Короче говоря, лексер Simple Test действует как инструмент, упрощающий управление регулярными выражениями — вместо гигантских регулярных выражений вы пишете много маленьких/простых. Лексер заботится об их эффективном объединении, а затем предоставляет вам &lt;abbr title=&quot;Application Programming Interface&quot;&gt;API&lt;/abbr&gt; обратного вызова в стиле SAX , чтобы вы могли писать код для ответа на соответствующие «события».
&lt;/p&gt;

&lt;p&gt;
В целом Lexer состоит из трех основных классов;
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=inc%20parsing%20lexer%20parallelregex.php&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for inc:parsing:lexer:parallelregex.php&quot;&gt;inc/Parsing/Lexer/ParallelRegex&lt;/a&gt;: позволяет строить регулярные выражения из нескольких отдельных шаблонов, каждый шаблон связан с идентифицирующей «меткой», класс объединяет их в одно регулярное выражение с помощью подшаблонов. &lt;em&gt;При использовании Lexer вам не нужно беспокоиться об этом классе.&lt;/em&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=inc%20parsing%20lexer%20statestack.php&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for inc:parsing:lexer:statestack.php&quot;&gt;inc/Parsing/Lexer/StateStack&lt;/a&gt;: предоставляет простой конечный автомат, чтобы лексирование могло быть «контекстно-зависимым». &lt;em&gt;При использовании Lexer вам не нужно беспокоиться об этом классе.&lt;/em&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=inc%20parsing%20lexer%20lexer.php&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;search definitions for inc:parsing:lexer:lexer.php&quot;&gt;inc/Parsing/Lexer/Lexer&lt;/a&gt;: предоставляет точку доступа для клиентского кода с помощью Lexer. Управляет несколькими экземплярами ParallelRegex, используя StateStack для применения правильного экземпляра ParallelRegex в зависимости от «контекста». При обнаружении «интересного текста» вызывает функции для предоставленного пользователем объекта (Handler).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;

&lt;h4 id=&quot;необходимость_в_состояниях&quot;&gt;Необходимость в состояниях&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Синтаксис вики, используемый в «Докувики», содержит разметку, «внутри» которой применяются только определённые синтаксические правила. Самый очевидный пример — тэг &amp;lt;code/&amp;gt; , внутри которого синтаксис вики не будет распознаваться анализатором. Для других синтаксических конструкций, таких как списки или таблицы, следует позволять использовать &lt;em&gt;некоторую&lt;/em&gt; разметку, но не всю, например, в списка можно использовать ссылки, но не таблицы.
&lt;/p&gt;

&lt;p&gt;
Анализатор обеспечивает «осведомлённость о состояниях», позволяющую применять корректные синтаксические правила в зависимости от текущий позиции (контекста) в сканируемом тексте. Если он видит открывающий тэг &amp;lt;code&amp;gt;, он переключается в другое состояние, в пределах которого другие синтаксические правила не применяются (т. е. что-либо, что выглядит как синтаксис вики должно восприниматься как «простой» текст), до тех пор, пока не найдёт закрывающий тэг &amp;lt;/code&amp;gt;.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;режимы_анализатора&quot;&gt;Режимы анализатора&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Термин &lt;em&gt;режим&lt;/em&gt; обозначает особенное состояние лексического анализа &lt;sup&gt;&lt;a href=&quot;#fn__9&quot; id=&quot;fnt__9&quot; class=&quot;fn_top&quot;&gt;9)&lt;/a&gt;&lt;/sup&gt;. Код, использующий анализатор, регистрирует один или более шаблон регулярного выражения с особенным наименованием режима. Затем анализатор, сравнивая эти паттерны со сканируемым текстом, вызывает функции обработчика с тем же самым наименованием режима (если метод &lt;code&gt;mapHandler&lt;/code&gt; не был использован для создания псевдонимов — см. ниже).
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;api_анализатора&quot;&gt;API анализатора&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Краткое введение в лексический анализатор можно найти в &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:parser:test:simple_test_lexer_notes&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:parser:test:simple_test_lexer_notes&quot; data-wiki-id=&quot;wiki:devel:parser:test:simple_test_lexer_notes&quot;&gt;Simple Test Lexer Notes&lt;/a&gt;. Здесь предлагается более подробное описание.
&lt;/p&gt;

&lt;p&gt;
Ключевыми методами анализатора являются:
&lt;/p&gt;

&lt;/div&gt;

&lt;h5 id=&quot;конструктор&quot;&gt;Конструктор&lt;/h5&gt;
&lt;div class=&quot;level5&quot;&gt;

&lt;p&gt;
Принимает ссылку на объект Handler, имя начального режима, в котором должен запускаться Lexer, и (необязательно) логический флаг, указывающий, должно ли сопоставление с образцом учитывать регистр.
&lt;/p&gt;

&lt;p&gt;
Пример:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$handler&lt;/span&gt;  &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;  &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; MyHandler &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; 
&lt;span class=&quot;re0&quot;&gt;$lexer&lt;/span&gt;  &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;  &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; dokuwiki\Lexer\Lexer &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$handler&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;  &lt;span class=&quot;st_h&quot;&gt;&#039;base&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;  &lt;span class=&quot;kw4&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Здесь указан начальный режим &amp;#039;base&amp;#039;.
&lt;/p&gt;

&lt;/div&gt;

&lt;h5 id=&quot;addentrypattern_addexitpattern&quot;&gt;addEntryPattern / addExitPattern&lt;/h5&gt;
&lt;div class=&quot;level5&quot;&gt;

&lt;p&gt;
&lt;code&gt;addEntryPattern()&lt;/code&gt; в &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=inc%20parsing%20lexer%20lexer.php&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;search definitions for inc:parsing:lexer:lexer.php&quot;&gt;Lexer.php&lt;/a&gt;
&lt;/p&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=wiki:devel:parser&amp;amp;codeblock=1&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_php_&quot;&gt;Lexer.php &lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code php&quot;&gt;&lt;ol start=&quot;75&quot;&gt;&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;    &lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; addEntryPattern&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$pattern&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$new_mode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;    &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt; &lt;a href=&quot;http://www.php.net/isset&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;isset&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;regexes&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;            &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;regexes&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; ParallelRegex&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;case&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;        &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;regexes&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addPattern&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$pattern&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$new_mode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;p&gt;
&lt;code&gt;addExitPattern()&lt;/code&gt; в &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=inc%20parsing%20lexer%20lexer.php&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;search definitions for inc:parsing:lexer:lexer.php&quot;&gt;Lexer.php&lt;/a&gt;
&lt;/p&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=wiki:devel:parser&amp;amp;codeblock=2&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_php_&quot;&gt;Lexer.php &lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code php&quot;&gt;&lt;ol start=&quot;89&quot;&gt;&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;    &lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; addExitPattern&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$pattern&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;    &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt; &lt;a href=&quot;http://www.php.net/isset&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;isset&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;regexes&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;            &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;regexes&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; ParallelRegex&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;case&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;        &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;regexes&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addPattern&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$pattern&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;__exit&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;p&gt;
&lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=inc%20parsing%20lexer%20lexer.php&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;search definitions for inc:parsing:lexer:lexer.php&quot;&gt;addEntryPattern()&lt;/a&gt; и &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=inc%20parsing%20lexer%20lexer.php&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;search definitions for inc:parsing:lexer:lexer.php&quot;&gt;addExitPattern()&lt;/a&gt; используются для регистрации шаблона для входа и выхода из определенного режима анализа. Например;
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// arg0: регулярное выражение для сопоставления — обратите внимание, что нет необходимости добавлять разделители начального/конечного шаблона &lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// arg1: имя режима, в котором может использоваться этот шаблон записи &lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// arg2: имя режима для ввода &lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$lexer&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;me1&quot;&gt;addEntryPattern&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;file&amp;gt;&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;base&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;file&#039;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// arg0: регулярное выражение для сопоставления &lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// arg1: имя режима для выхода &lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$lexer&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;me1&quot;&gt;addExitPattern&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;/file&amp;gt;&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;file&#039;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Код, приведённый выше, позволяет тэгу &amp;lt;file/&amp;gt; быть использованный при входе из базового в новый режим (&lt;code&gt;file&lt;/code&gt;). Если в дальнейшем следует применить режимы, пока анализатор находится в режиме &lt;code&gt;file&lt;/code&gt;, они должны быть зарегистрированы с режимом &lt;code&gt;file&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Замечание:&lt;/strong&gt; в паттернах не требуется использование ограничителей (разделителей начала и конца шаблона).
&lt;/p&gt;

&lt;/div&gt;

&lt;h5 id=&quot;addpattern&quot;&gt;addPattern&lt;/h5&gt;
&lt;div class=&quot;level5&quot;&gt;

&lt;p&gt;
&lt;code&gt;addEntryPattern()&lt;/code&gt; в &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=inc%20parsing%20lexer%20lexer.php&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;search definitions for inc:parsing:lexer:lexer.php&quot;&gt;Lexer.php&lt;/a&gt;
&lt;/p&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=wiki:devel:parser&amp;amp;codeblock=4&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_php_&quot;&gt;Lexer.php &lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code php&quot;&gt;&lt;ol start=&quot;57&quot;&gt;&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;    &lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; addPattern&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$pattern&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;accept&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;    &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt; &lt;a href=&quot;http://www.php.net/isset&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;isset&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;regexes&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;            &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;regexes&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; ParallelRegex&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;case&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;        &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;regexes&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addPattern&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$pattern&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;p&gt;
&lt;code&gt;addEntryPattern()&lt;/code&gt; в &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=inc%20parsing%20lexer%20parallelregex.php&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for inc:parsing:lexer:parallelregex.php&quot;&gt;ParallelRegex.php&lt;/a&gt;
&lt;/p&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=wiki:devel:parser&amp;amp;codeblock=5&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_php_&quot;&gt;ParallelRegex.php &lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code php&quot;&gt;&lt;ol start=&quot;53&quot;&gt;&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;    &lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; addPattern&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$pattern&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$label&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;    &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;        &lt;span class=&quot;re0&quot;&gt;$count&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/count&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;count&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;patterns&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;patterns&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$count&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$pattern&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;labels&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$count&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$label&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;regex&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;p&gt;
&lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=inc%20parsing%20lexer%20lexer.php&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;search definitions for inc:parsing:lexer:lexer.php&quot;&gt;addEntryPattern()&lt;/a&gt; используется, чтобы реагировать на дополнительные «вхождения» внутри существующего режима (без переходов). Он принимает паттерн и наименование режима, внутри которого должен использоваться.
&lt;/p&gt;

&lt;p&gt;
Это наиболее наглядно видно из разбора парсером синтаксиса списков. Синтаксис списков выглядит в «Докувики» следующим образом;
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;До списка
  * Ненумерованный элемент списка
  * Ненумерованный элемент списка
  * Ненумерованный элемент списка
После списка&lt;/pre&gt;

&lt;p&gt;
Использование &lt;code&gt;addPattern()&lt;/code&gt; делает возможным сравнивать полный список, одновременно корректно захватывая каждый элемент списка;
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// Сопоставляем открывающий элемент списка и меняем режим &lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$lexer&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;me1&quot;&gt;addEntryPattern&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;\n {2,}[\*]&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;base&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;list&#039;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Сопоставить новые элементы списка, но остаться в режиме списка &lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$lexer&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;me1&quot;&gt;addPattern&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;\n {2,}[\*]&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;list&#039;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Если это перевод строки, который не соответствует указанному выше правилу addPattern, выходим из режима &lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$lexer&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;me1&quot;&gt;addExitPattern&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;\n&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;list&#039;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h5 id=&quot;addspecialpattern&quot;&gt;addSpecialPattern&lt;/h5&gt;
&lt;div class=&quot;level5&quot;&gt;

&lt;p&gt;
&lt;code&gt;addSpecialPattern()&lt;/code&gt; в &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=inc%20parsing%20lexer%20lexer.php&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;search definitions for inc:parsing:lexer:lexer.php&quot;&gt;Lexer.php&lt;/a&gt;
&lt;/p&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=wiki:devel:parser&amp;amp;codeblock=8&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_php_&quot;&gt;Lexer.php &lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code php&quot;&gt;&lt;ol start=&quot;107&quot;&gt;&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;    &lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; addSpecialPattern&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$pattern&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$special&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;    &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt; &lt;a href=&quot;http://www.php.net/isset&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;isset&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;regexes&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;            &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;regexes&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; ParallelRegex&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;case&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;        &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;regexes&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addPattern&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$pattern&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;_&lt;span class=&quot;es4&quot;&gt;$special&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;p&gt;
&lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=inc%20parsing%20lexer%20lexer.php&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;search definitions for inc:parsing:lexer:lexer.php&quot;&gt;addSpecialPattern()&lt;/a&gt; используется для входа в новый режим только для совпадения, а затем сразу возвращается в «родительский» режим. Принимает шаблон, имя режима, в котором он может быть применен, и имя «временного» режима для входа для совпадения. Обычно это используется, если вы хотите заменить разметку wiki чем-то другим. Например, чтобы сопоставить смайлик, например :-), у вас может быть:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$lexer&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;me1&quot;&gt;addSpecialPattern&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;:-)&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;base&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;smiley&#039;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h5 id=&quot;maphandler&quot;&gt;mapHandler&lt;/h5&gt;
&lt;div class=&quot;level5&quot;&gt;

&lt;p&gt;
&lt;code&gt;mapHandler()&lt;/code&gt; в &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=inc%20parsing%20lexer%20lexer.php&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;search definitions for inc:parsing:lexer:lexer.php&quot;&gt;Lexer.php&lt;/a&gt;
&lt;/p&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=wiki:devel:parser&amp;amp;codeblock=10&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_php_&quot;&gt;Lexer.php &lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code php&quot;&gt;&lt;ol start=&quot;121&quot;&gt;&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;    &lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; mapHandler&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$handler&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;    &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;mode_handlers&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$handler&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;p&gt;
&lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=inc%20parsing%20lexer%20lexer.php&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;search definitions for inc:parsing:lexer:lexer.php&quot;&gt;mapHandler()&lt;/a&gt; позволяет сопоставить определенный именованный режим с методом с другим именем в Handler. Это может быть полезно, когда разный синтаксис должен обрабатываться одинаково, например, синтаксис DokuWiki для отключения другого синтаксиса внутри определенного текстового блока;
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$lexer&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;me1&quot;&gt;addEntryPattern&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;nowiki&amp;gt;&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;base&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;  &lt;span class=&quot;st_h&quot;&gt;&#039;unformatted&#039;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; 
&lt;span class=&quot;re0&quot;&gt;$lexer&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;me1&quot;&gt;addEntryPattern&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;%%&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;base&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;  &lt;span class=&quot;st_h&quot;&gt;&#039;unformattedalt&#039;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; 
&lt;span class=&quot;re0&quot;&gt;$lexer&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;me1&quot;&gt;addExitPattern&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;/nowiki&amp;gt;&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;  &lt;span class=&quot;st_h&quot;&gt;&#039;unformatted&#039;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; 
&lt;span class=&quot;re0&quot;&gt;$lexer&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;me1&quot;&gt;addExitPattern&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;%%&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;  &lt;span class=&quot;st_h&quot;&gt;&#039;unformattedalt&#039;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Оба синтаксиса должны обрабатываться одинаково... &lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$lexer&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;me1&quot;&gt;mapHandler&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;unformattedalt&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;  &lt;span class=&quot;st_h&quot;&gt;&#039;unformatted&#039;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4 id=&quot;подшаблоны_не_допускаются&quot;&gt;Подшаблоны не допускаются&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Поскольку Lexer (анализатор) сам использует &lt;strong&gt;подшаблоны&lt;/strong&gt; (внутри класса &lt;code&gt;ParallelRegex&lt;/code&gt;), код, &lt;em&gt;использующий&lt;/em&gt; анализатор, этого не может. Иногда это может пригодиться, но, по общему правилу, метод &lt;code&gt;addPattern()&lt;/code&gt; может быть применён для решения проблем, когда обычно применяются подшаблоны. Его преимущество в том, что он делает регулярные выражения более простыми и, следовательно, более простыми в управлении.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Замечание:&lt;/strong&gt; если вы используете в шаблоне круглые скобки, они будут &lt;em&gt;автоматически&lt;/em&gt; пропущены анализатором.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;синтаксические_ошибки_и_состояния&quot;&gt;Синтаксические ошибки и состояния&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Для предотвращение «плохо форматируемой» (особенно при пропуске закрывающих тэгов) разметки, приводящей к тому, что Lexer (анализатор) входит в состояние (режим), который он никогда не покинет, может быть полезным использование паттерна просмотра вперёд для проверки наличия закрывающей разметки&lt;sup&gt;&lt;a href=&quot;#fn__10&quot; id=&quot;fnt__10&quot; class=&quot;fn_top&quot;&gt;10)&lt;/a&gt;&lt;/sup&gt;. Например:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// Использование просмотра вперёд во входном шаблоне...&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// Использовать предпросмотр в шаблоне записи... &lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$lexer&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;me1&quot;&gt;addEntryPattern&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;file&amp;gt;(?=.*&amp;lt;/file&amp;gt;)&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;base&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;file&#039;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; 
&lt;span class=&quot;re0&quot;&gt;$lexer&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;me1&quot;&gt;addExitPattern&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;/file&amp;gt;&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;file&#039;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Шаблон входа проверяет, может ли он найти закрывающий &lt;code&gt;&amp;lt;/file&amp;gt;&lt;/code&gt; тег, прежде чем войти в состояние.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041b\u0435\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043b\u0435\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439_\u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;7308-24963&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit4&quot; id=&quot;handler_обработчик&quot;&gt;Handler (Обработчик)&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Определено в &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=inc%20parser%20handler.php&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for inc:parser:handler.php&quot;&gt;inc/parser/handler.php&lt;/a&gt; и папке &lt;code&gt;inc/Parsing/Handler&lt;/code&gt;
&lt;/p&gt;

&lt;table class=&quot;diagram&quot;&gt;
	&lt;tr&gt;
		&lt;td&gt;&lt;/td&gt;
		&lt;td class=&quot;d-sh&quot;&gt;&lt;div /&gt;&lt;/td&gt;
		&lt;td class=&quot;d-sh&quot;&gt;&lt;div /&gt;&lt;/td&gt;
		&lt;td class=&quot;d-sh&quot;&gt;&lt;div /&gt;&lt;/td&gt;
		&lt;td class=&quot;d-sh&quot;&gt;&lt;div /&gt;&lt;/td&gt;
		&lt;td class=&quot;d-sh&quot;&gt;&lt;div /&gt;&lt;/td&gt;
		&lt;td class=&quot;d-sh&quot;&gt;&lt;div /&gt;&lt;/td&gt;
		&lt;td class=&quot;d-sh&quot;&gt;&lt;div /&gt;&lt;/td&gt;
		&lt;td class=&quot;d-sh&quot;&gt;&lt;div /&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td class=&quot;d-sv&quot;&gt;&lt;div /&gt;&lt;/td&gt;
		&lt;td class=&quot;d-b&quot; style=&quot;text-align: left; border-color: white;&quot; colspan=&quot;6&quot; rowspan=&quot;2&quot;&gt;&lt;i class=&quot;dw-icons fa fa-folder&quot; style=&quot;font-size:16px&quot; title=&quot;&quot;&gt;&lt;/i&gt; Handler&lt;/td&gt;
		&lt;td&gt;&lt;/td&gt;
		&lt;td&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td class=&quot;d-sv&quot;&gt;&lt;div /&gt;&lt;/td&gt;
		&lt;td&gt;&lt;/td&gt;
		&lt;td&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td class=&quot;d-sv&quot;&gt;&lt;div /&gt;&lt;/td&gt;
		&lt;td class=&quot;d-brs&quot;&gt;&lt;/td&gt;
		&lt;td class=&quot;d-bbs&quot;&gt;&lt;/td&gt;
		&lt;td class=&quot;d-b&quot; style=&quot;text-align: left; border-color: white;&quot; colspan=&quot;6&quot; rowspan=&quot;2&quot;&gt;&lt;i class=&quot;dw-icons fa fa-file&quot; style=&quot;font-size:16px&quot; title=&quot;&quot;&gt;&lt;/i&gt; AbstractRewriter.php&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td class=&quot;d-sv&quot;&gt;&lt;div /&gt;&lt;/td&gt;
		&lt;td class=&quot;d-brs&quot;&gt;&lt;/td&gt;
		&lt;td&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td class=&quot;d-sv&quot;&gt;&lt;div /&gt;&lt;/td&gt;
		&lt;td class=&quot;d-brs&quot;&gt;&lt;/td&gt;
		&lt;td class=&quot;d-bbs&quot;&gt;&lt;/td&gt;
		&lt;td class=&quot;d-b&quot; style=&quot;text-align: left; border-color: white;&quot; colspan=&quot;6&quot; rowspan=&quot;2&quot;&gt;&lt;i class=&quot;dw-icons fa fa-file&quot; style=&quot;font-size:16px&quot; title=&quot;&quot;&gt;&lt;/i&gt; Block.php&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td class=&quot;d-sv&quot;&gt;&lt;div /&gt;&lt;/td&gt;
		&lt;td class=&quot;d-brs&quot;&gt;&lt;/td&gt;
		&lt;td&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td class=&quot;d-sv&quot;&gt;&lt;div /&gt;&lt;/td&gt;
		&lt;td class=&quot;d-brs&quot;&gt;&lt;/td&gt;
		&lt;td class=&quot;d-bbs&quot;&gt;&lt;/td&gt;
		&lt;td class=&quot;d-b&quot; style=&quot;text-align: left; border-color: white;&quot; colspan=&quot;6&quot; rowspan=&quot;2&quot;&gt;&lt;i class=&quot;dw-icons fa fa-file&quot; style=&quot;font-size:16px&quot; title=&quot;&quot;&gt;&lt;/i&gt; CallWriter.php&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td class=&quot;d-sv&quot;&gt;&lt;div /&gt;&lt;/td&gt;
		&lt;td class=&quot;d-brs&quot;&gt;&lt;/td&gt;
		&lt;td&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td class=&quot;d-sv&quot;&gt;&lt;div /&gt;&lt;/td&gt;
		&lt;td class=&quot;d-brs&quot;&gt;&lt;/td&gt;
		&lt;td class=&quot;d-bbs&quot;&gt;&lt;/td&gt;
		&lt;td class=&quot;d-b&quot; style=&quot;text-align: left; border-color: white;&quot; colspan=&quot;6&quot; rowspan=&quot;2&quot;&gt;&lt;i class=&quot;dw-icons fa fa-file&quot; style=&quot;font-size:16px&quot; title=&quot;&quot;&gt;&lt;/i&gt; Nest.php&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td class=&quot;d-sv&quot;&gt;&lt;div /&gt;&lt;/td&gt;
		&lt;td class=&quot;d-brs&quot;&gt;&lt;/td&gt;
		&lt;td&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td class=&quot;d-sv&quot;&gt;&lt;div /&gt;&lt;/td&gt;
		&lt;td class=&quot;d-brs&quot;&gt;&lt;/td&gt;
		&lt;td class=&quot;d-bbs&quot;&gt;&lt;/td&gt;
		&lt;td class=&quot;d-b&quot; style=&quot;text-align: left; border-color: white;&quot; colspan=&quot;6&quot; rowspan=&quot;2&quot;&gt;&lt;i class=&quot;dw-icons fa fa-file&quot; style=&quot;font-size:16px&quot; title=&quot;&quot;&gt;&lt;/i&gt; Lists.php&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td class=&quot;d-sv&quot;&gt;&lt;div /&gt;&lt;/td&gt;
		&lt;td class=&quot;d-brs&quot;&gt;&lt;/td&gt;
		&lt;td&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td class=&quot;d-sv&quot;&gt;&lt;div /&gt;&lt;/td&gt;
		&lt;td class=&quot;d-brs&quot;&gt;&lt;/td&gt;
		&lt;td class=&quot;d-bbs&quot;&gt;&lt;/td&gt;
		&lt;td class=&quot;d-b&quot; style=&quot;text-align: left; border-color: white;&quot; colspan=&quot;6&quot; rowspan=&quot;2&quot;&gt;&lt;i class=&quot;dw-icons fa fa-file&quot; style=&quot;font-size:16px&quot; title=&quot;&quot;&gt;&lt;/i&gt; CallWriterInterface.php&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td class=&quot;d-sv&quot;&gt;&lt;div /&gt;&lt;/td&gt;
		&lt;td class=&quot;d-brs&quot;&gt;&lt;/td&gt;
		&lt;td&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td class=&quot;d-sv&quot;&gt;&lt;div /&gt;&lt;/td&gt;
		&lt;td class=&quot;d-brs&quot;&gt;&lt;/td&gt;
		&lt;td class=&quot;d-bbs&quot;&gt;&lt;/td&gt;
		&lt;td class=&quot;d-b&quot; style=&quot;text-align: left; border-color: white;&quot; colspan=&quot;6&quot; rowspan=&quot;2&quot;&gt;&lt;i class=&quot;dw-icons fa fa-file&quot; style=&quot;font-size:16px&quot; title=&quot;&quot;&gt;&lt;/i&gt; Preformatted.php&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td class=&quot;d-sv&quot;&gt;&lt;div /&gt;&lt;/td&gt;
		&lt;td class=&quot;d-brs&quot;&gt;&lt;/td&gt;
		&lt;td&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td class=&quot;d-sv&quot;&gt;&lt;div /&gt;&lt;/td&gt;
		&lt;td class=&quot;d-brs&quot;&gt;&lt;/td&gt;
		&lt;td class=&quot;d-bbs&quot;&gt;&lt;/td&gt;
		&lt;td class=&quot;d-b&quot; style=&quot;text-align: left; border-color: white;&quot; colspan=&quot;6&quot; rowspan=&quot;2&quot;&gt;&lt;i class=&quot;dw-icons fa fa-file&quot; style=&quot;font-size:16px&quot; title=&quot;&quot;&gt;&lt;/i&gt; Quote.php&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td class=&quot;d-sv&quot;&gt;&lt;div /&gt;&lt;/td&gt;
		&lt;td class=&quot;d-brs&quot;&gt;&lt;/td&gt;
		&lt;td&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td class=&quot;d-sv&quot;&gt;&lt;div /&gt;&lt;/td&gt;
		&lt;td class=&quot;d-brs&quot;&gt;&lt;/td&gt;
		&lt;td class=&quot;d-bbs&quot;&gt;&lt;/td&gt;
		&lt;td class=&quot;d-b&quot; style=&quot;text-align: left; border-color: white;&quot; colspan=&quot;6&quot; rowspan=&quot;2&quot;&gt;&lt;i class=&quot;dw-icons fa fa-file&quot; style=&quot;font-size:16px&quot; title=&quot;&quot;&gt;&lt;/i&gt; ReWriterInterface.php&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td class=&quot;d-sv&quot;&gt;&lt;div /&gt;&lt;/td&gt;
		&lt;td class=&quot;d-brs&quot;&gt;&lt;/td&gt;
		&lt;td&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td class=&quot;d-sv&quot;&gt;&lt;div /&gt;&lt;/td&gt;
		&lt;td class=&quot;d-brs&quot;&gt;&lt;/td&gt;
		&lt;td class=&quot;d-bbs&quot;&gt;&lt;/td&gt;
		&lt;td class=&quot;d-b&quot; style=&quot;text-align: left; border-color: white;&quot; colspan=&quot;6&quot; rowspan=&quot;2&quot;&gt;&lt;i class=&quot;dw-icons fa fa-file&quot; style=&quot;font-size:16px&quot; title=&quot;&quot;&gt;&lt;/i&gt; Table.php&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td class=&quot;d-sv&quot;&gt;&lt;div /&gt;&lt;/td&gt;
		&lt;td&gt;&lt;/td&gt;
		&lt;td&gt;&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;
Handler — это класс, предоставляющий методы, которые вызывает Lexer, когда он сопоставляет токены. Затем он «тонко настраивает» токены в последовательность инструкций, готовых для Renderer.
&lt;/p&gt;

&lt;p&gt;
Обработчик в целом содержит следующие классы:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:parser:doku_handler&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:parser:doku_handler&quot; data-wiki-id=&quot;wiki:devel:parser:doku_handler&quot;&gt;Doku_Handler&lt;/a&gt;: все вызовы из Lexer производятся в этот класс. Для каждого режима, зарегистрированного в Lexer, будет соответствующий метод в Handler&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;code&gt;Doku_Handler&lt;/code&gt; в &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=inc%20extension%20syntaxplugin.php&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for inc:extension:syntaxplugin.php&quot;&gt;/dokuwiki/inc/Extension/SyntaxPlugin.php&lt;/a&gt;
&lt;/p&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=wiki:devel:parser&amp;amp;codeblock=13&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_php_&quot;&gt;SyntaxPlugin.php &lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code php&quot;&gt; &lt;span class=&quot;nu0&quot;&gt;6&lt;/span&gt;  &lt;span class=&quot;kw2&quot;&gt;use&lt;/span&gt; Doku_Handler&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;nu0&quot;&gt;57&lt;/span&gt;  &lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;@&lt;/span&gt;see Doku_Handler_Block
&lt;span class=&quot;nu0&quot;&gt;75&lt;/span&gt;  &lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;@&lt;/span&gt;param Doku_Handler &lt;span class=&quot;re0&quot;&gt;$handler&lt;/span&gt; The Doku_Handler object
&lt;span class=&quot;nu0&quot;&gt;77&lt;/span&gt;  &lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;@&lt;/span&gt;param   Doku_Handler &lt;span class=&quot;re0&quot;&gt;$handler&lt;/span&gt; The Doku_Handler object
&lt;span class=&quot;nu0&quot;&gt;80&lt;/span&gt;  &lt;span class=&quot;kw2&quot;&gt;abstract&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; handle&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$match&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$state&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$pos&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; Doku_Handler &lt;span class=&quot;re0&quot;&gt;$handler&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;p&gt;
&lt;code&gt;Doku_Handler&lt;/code&gt; в &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=inc%20parsing%20parser.php&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for inc:parsing:parser.php&quot;&gt;/dokuwiki/inc/Parsing/Parser.php&lt;/a&gt;
&lt;/p&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=wiki:devel:parser&amp;amp;codeblock=14&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_php_&quot;&gt;Parser.php &lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;nu0&quot;&gt;6&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;use&lt;/span&gt; Doku_Handler&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;nu0&quot;&gt;17&lt;/span&gt;  &lt;span class=&quot;co4&quot;&gt;/** @var Doku_Handler */&lt;/span&gt;
&lt;span class=&quot;nu0&quot;&gt;32&lt;/span&gt;  &lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;@&lt;/span&gt;param Doku_Handler &lt;span class=&quot;re0&quot;&gt;$handler&lt;/span&gt;
&lt;span class=&quot;nu0&quot;&gt;34&lt;/span&gt;  &lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; __construct&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;Doku_Handler &lt;span class=&quot;re0&quot;&gt;$handler&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;p&gt;
&lt;code&gt;Doku_Handler&lt;/code&gt; в &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=inc%20parser%20handler.php&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for inc:parser:handler.php&quot;&gt;/dokuwiki/inc/parser/handler.php&lt;/a&gt;
&lt;/p&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=wiki:devel:parser&amp;amp;codeblock=15&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_php_&quot;&gt;handler.php &lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;nu0&quot;&gt;16&lt;/span&gt;   &lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;Class&lt;/span&gt; Doku_Handler
&lt;span class=&quot;nu0&quot;&gt;18&lt;/span&gt;   &lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; Doku_Handler &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&lt;span class=&quot;nu0&quot;&gt;40&lt;/span&gt;   &lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt; Doku_Handler constructor&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;
&lt;span class=&quot;nu0&quot;&gt;795&lt;/span&gt;  &lt;span class=&quot;re0&quot;&gt;$link&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; Doku_Handler_Parse_Media&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$link&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;nu0&quot;&gt;878&lt;/span&gt;  &lt;span class=&quot;re0&quot;&gt;$p&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; Doku_Handler_Parse_Media&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$match&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;nu0&quot;&gt;1023&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; Doku_Handler_Parse_Media&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$match&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=inc%20parsing%20handler%20callwriter.php&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for inc:parsing:handler:callwriter.php&quot;&gt;CallWriter&lt;/a&gt;: обеспечивает слой между массивом инструкций (массив &lt;code&gt;Doku_Handler::$calls&lt;/code&gt;)  и методами Handler, &lt;em&gt;записывающими&lt;/em&gt; эти инструкции. Пока идёт лексический анализ, он будет временно перемещён другими объектами, вроде &lt;code&gt;dokuwiki\Parsing\Handler\List&lt;/code&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=inc%20parsing%20handler%20lists.php&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for inc:parsing:handler:lists.php&quot;&gt;List&lt;/a&gt;: отвечает за преобразование токенов списка в инструкции, пока выполняется лексический анализ&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=inc%20parsing%20handler%20quote.php&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for inc:parsing:handler:quote.php&quot;&gt;Quote&lt;/a&gt;: отвечает за преобразование токенов &lt;code&gt;blockquote&lt;/code&gt; (текст, начинающийся с одного или нескольких &amp;gt;) в инструкции, пока выполняется лексический анализ&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=inc%20parsing%20handler%20table.php&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for inc:parsing:handler:table.php&quot;&gt;Table&lt;/a&gt;: отвечает за преобразование токенов таблицы в инструкции, пока выполняется лексический анализ&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=inc%20parsing%20handler%20block.php&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for inc:parsing:handler:block.php&quot;&gt;Block&lt;/a&gt;: отвечает за вставку инструкций «p_open» и «p_close», при этом отслеживая инструкции «уровня блока», после завершения всего лексического анализа (т.е. выполняет цикл один раз по всему списку инструкций и вставляет больше инструкций)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=inc%20parsing%20handler%20abstractrewriter.php&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for inc:parsing:handler:abstractrewriter.php&quot;&gt;AbstractRewriter&lt;/a&gt;: расширено Preformattedи Nest… &lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/images/smileys/fixme.jpg&quot; class=&quot;icon smiley&quot; alt=&quot;FIXME&quot; /&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=inc%20parsing%20handler%20nest.php&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for inc:parsing:handler:nest.php&quot;&gt;Nest&lt;/a&gt;: …&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/images/smileys/fixme.jpg&quot; class=&quot;icon smiley&quot; alt=&quot;FIXME&quot; /&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=inc%20parsing%20handler%20preformatted.php&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for inc:parsing:handler:preformatted.php&quot;&gt;Preformatted&lt;/a&gt;: отвечает за преобразование предварительно отформатированных токенов (отступ в тексте dokuwiki) в инструкции, пока лексический анализ еще выполняется&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;

&lt;h4 id=&quot;методы_токенов_обработчиков&quot;&gt;Методы токенов обработчиков&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Обработчик должен предоставлять методы, названные в соответствии с режимами, зарегистрированными в лексическом анализаторе (имея в виду mapHandler() метод лексического анализатора — см. выше).
&lt;/p&gt;

&lt;p&gt;
Например, если вы зарегистрировали режим файла с помощью Lexer, например:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$lexer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addEntryPattern&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;file&amp;gt;(?=.*&amp;lt;/file&amp;gt;)&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;base&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;file&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$lexer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addExitPattern&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;/file&amp;gt;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;file&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Обработчику понадобится такой метод:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; Doku_Handler &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co4&quot;&gt;/**
    * @param string match содержит совпавший текст
    * @param int state - тип найденного соответствия (см. ниже)
    * @param int pos - индекс байта, где было найдено совпадение
    */&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; &lt;a href=&quot;http://www.php.net/file&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;file&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$match&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$state&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$pos&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
&lt;strong&gt;Примечание:&lt;/strong&gt; метод Handler &lt;em&gt;должен&lt;/em&gt; возвращать &lt;strong&gt;true&lt;/strong&gt;, иначе Lexer немедленно остановится. Такое поведение может быть полезным при работе с другими типами проблем синтаксического анализа, но для парсера DokuWiki все методы Handler &lt;em&gt;всегда&lt;/em&gt; будут возвращать &lt;strong&gt;true&lt;/strong&gt;.
&lt;/p&gt;

&lt;p&gt;
Аргументы, реализумые методом обработчика;
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;$match&lt;/code&gt;: текст, который был обнаружен;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;$state&lt;/code&gt;: содержит константу, которая описывает как именно было найдено совпадение:&lt;/div&gt;
&lt;ol&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;DOKU_LEXER_ENTER&lt;/code&gt;: найден входной паттерн (см. Lexer::addEntryPattern);&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;DOKU_LEXER_MATCHED&lt;/code&gt;: найден паттерн (см. Lexer::addPattern);&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;DOKU_LEXER_UNMATCHED&lt;/code&gt;: внутри режима не было совпадений;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;DOKU_LEXER_EXIT&lt;/code&gt;: найден выходной паттерн (см. Lexer::addExitPattern);&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;DOKU_LEXER_SPECIAL&lt;/code&gt;: найден специальный паттерн (см. Lexer::addSpecialPattern);&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;$pos&lt;/code&gt;: это индекс байта (длина строки от начала), где было найдено &lt;em&gt;начало&lt;/em&gt; вхождения. &lt;code&gt;$pos + strlen($match)&lt;/code&gt; даёт индекс байта конца совпадения.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
В качестве более сложного примера, для поиска списков в парсере определено следующее;
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; connectTo&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;Lexer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addEntryPattern&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;\n {2,}[\-\*]&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;listblock&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;Lexer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addEntryPattern&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;\n\t{1,}[\-\*]&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;listblock&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;Lexer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addPattern&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;\n {2,}[\-\*]&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;listblock&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;Lexer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addPattern&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;\n\t{1,}[\-\*]&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;listblock&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; postConnect&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;Lexer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addExitPattern&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;\n&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;listblock&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Метод &lt;code&gt;listblock&lt;/code&gt; в обработчике (вызов просто &lt;code&gt;list&lt;/code&gt; приводит к ошибке обработчика PHP, поскольку &lt;code&gt;list&lt;/code&gt; зарезервировано в PHP) выглядит как:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; listblock&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$match&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$state&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$pos&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;kw1&quot;&gt;switch&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$state&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
            &lt;span class=&quot;co1&quot;&gt;// Начало списка...&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;case&lt;/span&gt; DOKU_LEXER_ENTER&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;
                &lt;span class=&quot;co1&quot;&gt;// Создать List rewrite, пропуская текущий CallWriter&lt;/span&gt;
                &lt;span class=&quot;re0&quot;&gt;$ReWriter&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Handler_List&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;CallWriter&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
                &lt;span class=&quot;co1&quot;&gt;// Заменить текущий CallWriter на List rewriter&lt;/span&gt;
                &lt;span class=&quot;co1&quot;&gt;// все поступающие вхождения (даже, если они не являются вхождениями list)&lt;/span&gt;
                &lt;span class=&quot;co1&quot;&gt;// теперь направляются в list&lt;/span&gt;
                &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;CallWriter&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$ReWriter&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
                &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;__addCall&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;list_open&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$match&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$pos&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;break&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
            &lt;span class=&quot;co1&quot;&gt;// Для конца списка&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;case&lt;/span&gt; DOKU_LEXER_EXIT&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;
                &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;__addCall&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;list_close&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$pos&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
                &lt;span class=&quot;co1&quot;&gt;// Дать указание List rewriter об очистке&lt;/span&gt;
                &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;CallWriter&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;process&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
                &lt;span class=&quot;co1&quot;&gt;// Восстановить прежний CallWriter&lt;/span&gt;
                &lt;span class=&quot;re0&quot;&gt;$ReWriter&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;CallWriter&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;CallWriter&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$ReWriter&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;CallWriter&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
            &lt;span class=&quot;kw1&quot;&gt;break&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
            &lt;span class=&quot;kw1&quot;&gt;case&lt;/span&gt; DOKU_LEXER_MATCHED&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;
                &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;__addCall&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;list_item&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$match&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$pos&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;break&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
            &lt;span class=&quot;kw1&quot;&gt;case&lt;/span&gt; DOKU_LEXER_UNMATCHED&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;
                &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;__addCall&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;cdata&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$match&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$pos&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;break&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;TRUE&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4 id=&quot;конвертирование_вхождений&quot;&gt;Конвертирование вхождений&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
«Тонкая обработка» задействует вставку символа дроби «/», переименование или удаление вхождений, переданных анализатором.
&lt;/p&gt;

&lt;p&gt;
Например, список вроде:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;This is not a list
  * This is the opening list item
  * This is the second list item
  * This is the last list item
This is also not a list&lt;/pre&gt;

&lt;p&gt;
в результате превратиться в последовательность вхождений вроде;
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;code&gt;base: «This is not a list&amp;quot;, DOKU_LEXER_UNMATCHED&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;code&gt;listblock: «\n  *&amp;quot;, DOKU_LEXER_ENTER&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;code&gt;listblock: « This is the opening list item&amp;quot;, DOKU_LEXER_UNMATCHED&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;code&gt;listblock: «\n  *&amp;quot;, DOKU_LEXER_MATCHED&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;code&gt;listblock: « This is the second list item&amp;quot;, DOKU_LEXER_UNMATCHED&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;code&gt;listblock: «\n  *&amp;quot;, DOKU_LEXER_MATCHED&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;code&gt;listblock: « This is the last list item&amp;quot;, DOKU_LEXER_UNMATCHED&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;code&gt;listblock: «\n&amp;quot;, DOKU_LEXER_EXIT&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;code&gt;base: «This is also not a list&amp;quot;, DOKU_LEXER_UNMATCHED&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
Но чтобы быть использованными преобразователем, это может быть конвертировано в следующие инструкции:
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;code&gt;p_open:&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;code&gt;cdata: «This is not a list&amp;quot;&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;code&gt;p_close:&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;code&gt;listu_open:&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;code&gt;listitem_open:&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;code&gt;cdata: « This is the opening list item&amp;quot;&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;code&gt;listitem_close:&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;code&gt;listitem_open:&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;code&gt;cdata: « This is the second list item&amp;quot;&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;code&gt;listitem_close:&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;code&gt;listitem_open:&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;code&gt;cdata: « This is the last list item&amp;quot;&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;code&gt;listitem_close:&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;code&gt;list_close:&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;code&gt;p_open:&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;code&gt;cdata: «This is also not a list&amp;quot;&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;code&gt;p_close:&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
В случае со списками, это требует помощи класса &lt;code&gt;Doku_Handler_List&lt;/code&gt;, который принимает вхождения, заменяя их на корректные инструкции для Преобразователя.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Handler (\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a)&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;handler_\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:13,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;24964-37160&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit5&quot; id=&quot;parser_парсер&quot;&gt;Parser (Парсер)&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Определено в &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=inc%20parsing%20parser.php&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for inc:parsing:parser.php&quot;&gt;/dokuwiki/inc/Parsing/Parser.php&lt;/a&gt; и &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=inc%20parser%20parser.php&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;search definitions for inc:parser:parser.php&quot;&gt;/dokuwiki/inc/parser/parser.php&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
dokuwiki &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=inc%20parsing%20parser.php&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for inc:parsing:parser.php&quot;&gt;\Parsing\Parser&lt;/a&gt; действует как интерфейс для внешнего кода и настраивает Lexer с помощью шаблонов и режимов, описывающих синтаксис DokuWiki.
&lt;/p&gt;

&lt;p&gt;
Использование парсера обычно выглядит так:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// Создаем обработчик Handler&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$handler&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Handler&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Создаем парсер с обработчиком &lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$parser&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; dokuwiki\Parsing\Parser&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$handler&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Добавить требуемые режимы синтаксиса в парсер &lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;footnote&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; dokuwiki\Parsing\ParserMode\Footnote&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;hr&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; dokuwiki\Parsing\ParserMode\Hr&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;unformatted&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; dokuwiki\Parsing\ParserMode\Unformatted&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;co2&quot;&gt;# etc.
&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$doc&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/file_get_contents&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;file_get_contents&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;wikipage.txt.&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$instructions&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;parse&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$doc&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Более подробные примеры приведены ниже.
&lt;/p&gt;

&lt;p&gt;
В целом Parser также содержит классы, представляющие каждый доступный режим синтаксиса, базовым классом для всех них является &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=inc%20parsing%20parsermode%20abstractmode.php&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for inc:parsing:parsermode:abstractmode.php&quot;&gt;dokuwiki\Parsing\ParserMode\AbstractMode&lt;/a&gt;. Поведение этих режимов лучше всего понять, рассмотрев примеры добавления синтаксиса далее в этом документе.
&lt;/p&gt;

&lt;p&gt;
Причина представления режимов с помощью классов заключается в том, чтобы избежать повторных вызовов методов Lexer. Без них пришлось бы жестко кодировать каждое правило шаблона для каждого режима, в котором может быть сопоставлен шаблон, например, регистрация одного правила шаблона для синтаксиса ссылок CamelCase потребовала бы чего-то вроде:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$lexer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addSpecialPattern&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;\b[A-Z]+[a-z]+[A-Z][A-Za-z]*\b&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;base&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;camelcaselink&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$lexer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addSpecialPattern&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;\b[A-Z]+[a-z]+[A-Z][A-Za-z]*\b&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;footnote&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;camelcaselink&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$lexer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addSpecialPattern&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;\b[A-Z]+[a-z]+[A-Z][A-Za-z]*\b&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;table&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;camelcaselink&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$lexer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addSpecialPattern&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;\b[A-Z]+[a-z]+[A-Z][A-Za-z]*\b&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;listblock&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;camelcaselink&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$lexer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addSpecialPattern&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;\b[A-Z]+[a-z]+[A-Z][A-Za-z]*\b&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;strong&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;camelcaselink&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$lexer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addSpecialPattern&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;\b[A-Z]+[a-z]+[A-Z][A-Za-z]*\b&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;underline&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;camelcaselink&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// и т.д.&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Каждый режим, которому разрешено содержать ссылки CamelCase, должен быть явно назван.
&lt;/p&gt;

&lt;p&gt;
Вместо того, чтобы жестко кодировать это, вместо этого это реализовано с использованием одного класса, например:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;namespace&lt;/span&gt; dokuwiki\Parsing\ParserMode&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; CamelCaseLink &lt;span class=&quot;kw2&quot;&gt;extends&lt;/span&gt; AbstractMode &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; connectTo&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;Lexer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addSpecialPattern&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
            &lt;span class=&quot;st_h&quot;&gt;&#039;\b[A-Z]+[a-z]+[A-Z][A-Za-z]*\b&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;camelcaselink&#039;&lt;/span&gt;
        &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
При настройке лексического анализатора парсер вызывает &lt;code&gt;connectTo()&lt;/code&gt; метод объекта &lt;code&gt;dokuwiki\Parsing\ParserMode\CamelCaseLink&lt;/code&gt; для каждого другого режима, который принимает синтаксис CamelCase (некоторым такой &lt;code&gt;&amp;lt;code /&amp;gt;&lt;/code&gt; синтаксис не нравится).
&lt;/p&gt;

&lt;p&gt;
За счет усложнения понимания настройки лексического анализатора это позволяет сделать код более гибким при добавлении нового синтаксиса.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Parser (\u041f\u0430\u0440\u0441\u0435\u0440)&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;parser_\u043f\u0430\u0440\u0441\u0435\u0440&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:21,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;37161-41382&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit6&quot; id=&quot;формат_данных_инструкций&quot;&gt;Формат данных инструкций&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:plugin:parserarray&quot; class=&quot;wikilink1&quot; title=&quot;wiki:plugin:parserarray&quot; data-wiki-id=&quot;wiki:plugin:parserarray&quot;&gt;Плагин Parserarray&lt;/a&gt; — это экспортный рендерер, который показывает инструкции для текущей страницы. Он может помочь вам понять формат данных. Ниже показан пример сырого текста вики и соответствующий вывод парсера;
&lt;/p&gt;

&lt;p&gt;
Исходный текст (содержит таблицу):
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;abc
| Row 0 Col 1    | Row 0 Col 2     | Row 0 Col 3        |
| Row 1 Col 1    | Row 1 Col 2     | Row 1 Col 3        |
def&lt;/pre&gt;

&lt;p&gt;
После обработки будет возвращён следующий массив PHP (описан ниже):
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;Array(
    [0] =&amp;gt; Array(
            [0] =&amp;gt; document_start
            [1] =&amp;gt; Array()
            [2] =&amp;gt; 0
        )
    [1] =&amp;gt; Array(
            [0] =&amp;gt; p_open
            [1] =&amp;gt; Array()
            [2] =&amp;gt; 0
        )
    [2] =&amp;gt; Array(
            [0] =&amp;gt; cdata
            [1] =&amp;gt; Array(
                    [0] =&amp;gt; 

abc
                )
            [2] =&amp;gt; 0
        )
    [3] =&amp;gt; Array(
            [0] =&amp;gt; p_close
            [1] =&amp;gt; Array()
            [2] =&amp;gt; 5
        )
    [4] =&amp;gt; Array(
            [0] =&amp;gt; table_open
            [1] =&amp;gt; Array(
                    [0] =&amp;gt; 3
                    [1] =&amp;gt; 2
                )
            [2] =&amp;gt; 5
        )
    [5] =&amp;gt; Array(
            [0] =&amp;gt; tablerow_open
            [1] =&amp;gt; Array()
            [2] =&amp;gt; 5
        )
    [6] =&amp;gt; Array(
            [0] =&amp;gt; tablecell_open
            [1] =&amp;gt; Array(
                    [0] =&amp;gt; 1
                    [1] =&amp;gt; left
                )
            [2] =&amp;gt; 5
        )
    [7] =&amp;gt; Array(
            [0] =&amp;gt; cdata
            [1] =&amp;gt; Array(
                    [0] =&amp;gt;  Row 0 Col 1
                )
            [2] =&amp;gt; 7
        )
    [8] =&amp;gt; Array(
            [0] =&amp;gt; cdata
            [1] =&amp;gt; Array(
                    [0] =&amp;gt;     
                )
            [2] =&amp;gt; 19
        )
    [9] =&amp;gt; Array(
            [0] =&amp;gt; tablecell_close
            [1] =&amp;gt; Array()
            [2] =&amp;gt; 23
        )
    [10] =&amp;gt; Array(
            [0] =&amp;gt; tablecell_open
            [1] =&amp;gt; Array(
                    [0] =&amp;gt; 1
                    [1] =&amp;gt; left
                )
            [2] =&amp;gt; 23
        )
    [11] =&amp;gt; Array(
            [0] =&amp;gt; cdata
            [1] =&amp;gt; Array(
                    [0] =&amp;gt;  Row 0 Col 2
                )
            [2] =&amp;gt; 24
        )
    [12] =&amp;gt; Array(
            [0] =&amp;gt; cdata
            [1] =&amp;gt; Array(
                    [0] =&amp;gt;      
                )
            [2] =&amp;gt; 36
        )
    [13] =&amp;gt; Array(
            [0] =&amp;gt; tablecell_close
            [1] =&amp;gt; Array()
            [2] =&amp;gt; 41
        )
    [14] =&amp;gt; Array(
            [0] =&amp;gt; tablecell_open
            [1] =&amp;gt; Array(
                    [0] =&amp;gt; 1
                    [1] =&amp;gt; left
                )
            [2] =&amp;gt; 41
        )
    [15] =&amp;gt; Array(
            [0] =&amp;gt; cdata
            [1] =&amp;gt; Array(
                    [0] =&amp;gt;  Row 0 Col 3
                )
            [2] =&amp;gt; 42
        )
    [16] =&amp;gt; Array(
            [0] =&amp;gt; cdata
            [1] =&amp;gt; Array(
                    [0] =&amp;gt;         
                )
            [2] =&amp;gt; 54
        )
    [17] =&amp;gt; Array(
            [0] =&amp;gt; tablecell_close
            [1] =&amp;gt; Array()
            [2] =&amp;gt; 62
        )
    [18] =&amp;gt; Array(
            [0] =&amp;gt; tablerow_close
            [1] =&amp;gt; Array()
            [2] =&amp;gt; 63
        )
    [19] =&amp;gt; Array(
            [0] =&amp;gt; tablerow_open
            [1] =&amp;gt; Array()
            [2] =&amp;gt; 63
        )
    [20] =&amp;gt; Array(
            [0] =&amp;gt; tablecell_open
            [1] =&amp;gt; Array(
                    [0] =&amp;gt; 1
                    [1] =&amp;gt; left
                )
            [2] =&amp;gt; 63
        )
    [21] =&amp;gt; Array(
            [0] =&amp;gt; cdata
            [1] =&amp;gt; Array(
                    [0] =&amp;gt;  Row 1 Col 1
                )
            [2] =&amp;gt; 65
        )
    [22] =&amp;gt; Array(
            [0] =&amp;gt; cdata
            [1] =&amp;gt; Array(
                    [0] =&amp;gt;     
                )
            [2] =&amp;gt; 77
        )
    [23] =&amp;gt; Array(
            [0] =&amp;gt; tablecell_close
            [1] =&amp;gt; Array()
            [2] =&amp;gt; 81
        )
    [24] =&amp;gt; Array(
            [0] =&amp;gt; tablecell_open
            [1] =&amp;gt; Array(
                    [0] =&amp;gt; 1
                    [1] =&amp;gt; left
                )
            [2] =&amp;gt; 81
        )
    [25] =&amp;gt; Array(
            [0] =&amp;gt; cdata
            [1] =&amp;gt; Array(
                    [0] =&amp;gt;  Row 1 Col 2
                )
            [2] =&amp;gt; 82
        )
    [26] =&amp;gt; Array(
            [0] =&amp;gt; cdata
            [1] =&amp;gt; Array(
                    [0] =&amp;gt;      
                )
            [2] =&amp;gt; 94
        )
    [27] =&amp;gt; Array(
            [0] =&amp;gt; tablecell_close
            [1] =&amp;gt; Array()
            [2] =&amp;gt; 99
        )
    [28] =&amp;gt; Array(
            [0] =&amp;gt; tablecell_open
            [1] =&amp;gt; Array(
                    [0] =&amp;gt; 1
                    [1] =&amp;gt; left
                )
            [2] =&amp;gt; 99
        )
    [29] =&amp;gt; Array(
            [0] =&amp;gt; cdata
            [1] =&amp;gt; Array(
                    [0] =&amp;gt;  Row 1 Col 3
                )
            [2] =&amp;gt; 100
        )
    [30] =&amp;gt; Array(
            [0] =&amp;gt; cdata
            [1] =&amp;gt; Array(
                    [0] =&amp;gt;         
                )
            [2] =&amp;gt; 112
        )
    [31] =&amp;gt; Array(
            [0] =&amp;gt; tablecell_close
            [1] =&amp;gt; Array()
            [2] =&amp;gt; 120
        )
    [32] =&amp;gt; Array(
            [0] =&amp;gt; tablerow_close
            [1] =&amp;gt; Array()
            [2] =&amp;gt; 121
        )
    [33] =&amp;gt; Array(
            [0] =&amp;gt; table_close
            [1] =&amp;gt; Array()
            [2] =&amp;gt; 121
        )
    [34] =&amp;gt; Array(
            [0] =&amp;gt; p_open
            [1] =&amp;gt; Array()
            [2] =&amp;gt; 121
        )
    [35] =&amp;gt; Array(
            [0] =&amp;gt; cdata
            [1] =&amp;gt; Array(
                    [0] =&amp;gt; def

                )
            [2] =&amp;gt; 122
        )
    [36] =&amp;gt; Array(
            [0] =&amp;gt; p_close
            [1] =&amp;gt; Array()
            [2] =&amp;gt; 122
        )
    [37] =&amp;gt; Array(
            [0] =&amp;gt; document_end
            [1] =&amp;gt; Array()
            [2] =&amp;gt; 122
        )
)&lt;/pre&gt;

&lt;p&gt;
Верхний уровень массива — это просто список. Каждый из его дочерних элементов описывает возвратную функцию, которая будет запущена под преобразователем (см. описание &lt;a href=&quot;#renderer_преобразователь&quot; title=&quot;wiki:devel:parser ↵&quot; class=&quot;wikilink1&quot;&gt;Renderer&lt;/a&gt; ниже), также как и индекс байта исходного текста, где был найден особенный «элемент» синтаксиса вики.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;единственная_инструкция&quot;&gt;Единственная инструкция&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Рассмотрим единственный элемент, который представляет единственную инструкцию, из списка инструкций, приведённого выше:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;    [35] =&amp;gt; Array
        (
            [0] =&amp;gt; cdata
            [1] =&amp;gt; Array
                (
                    [0] =&amp;gt; def

                )
            [2] =&amp;gt; 122
        )&lt;/pre&gt;

&lt;p&gt;
Первый элемент (индекс 0) — это имя метода или функции в Renderer, которую необходимо выполнить.
&lt;/p&gt;

&lt;p&gt;
Второй элемент (индекс 1) сам по себе является массивом, каждый из элементов которого является аргументом для метода Renderer, который будет вызван.
&lt;/p&gt;

&lt;p&gt;
В этом случае имеется один аргумент со значением &lt;code&gt;&amp;quot;def\n&amp;quot;&lt;/code&gt;, поэтому вызов метода будет выглядеть так:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$Render&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;cdata&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;def&lt;span class=&quot;es1&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Третий элемент (индекс 2) — это индекс байта первого символа, который «запустил» эту инструкцию в необработанном текстовом документе. Он должен быть таким же, как значение, возвращаемое функцией PHP &lt;a href=&quot;https://secure.php.net/strpos&quot; class=&quot;interwiki iw_phpfn&quot; title=&quot;https://secure.php.net/strpos&quot;&gt;strpos&lt;/a&gt;. Это можно использовать для извлечения разделов необработанного текста вики на основе позиций сгенерированных из него инструкций (пример ниже).
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Примечание&lt;/strong&gt;: Метод парсера &lt;code&gt;parse&lt;/code&gt; дополняет необработанный текст вики предшествующим и последующим символом перевода строки, чтобы гарантировать корректный выход определенных состояний лексера, поэтому вам может потребоваться вычесть 1 из индекса байта, чтобы получить правильное местоположение в исходном необработанном тексте вики. Парсер также нормализует переводы строк в соответствии со стилем Unix (т. е. все &lt;code&gt;\r\n&lt;/code&gt; становятся &lt;code&gt;\n&lt;/code&gt;), поэтому документ, который видит лексер, может быть меньше того, который вы ему фактически дали.
&lt;/p&gt;

&lt;p&gt;
Пример массив инструкций страницы с описанием &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:syntax&quot; class=&quot;wikilink1&quot; title=&quot;wiki:syntax&quot; data-wiki-id=&quot;wiki:syntax&quot;&gt;синтаксиса&lt;/a&gt; можно найти &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:parser:sample_instructions&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:parser:sample_instructions&quot; data-wiki-id=&quot;wiki:devel:parser:sample_instructions&quot;&gt;здесь&lt;/a&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0424\u043e\u0440\u043c\u0430\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0444\u043e\u0440\u043c\u0430\u0442_\u0434\u0430\u043d\u043d\u044b\u0445_\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:24,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;41383-51092&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit7&quot; id=&quot;renderer_преобразователь&quot;&gt;Renderer (преобразователь)&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Renderer (преобразователь) — это класс (или коллекция функций), определяемый вами. Его интерфейс описан в файле &lt;code&gt;inc/parser/renderer.php&lt;/code&gt; и выглядит так:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; Doku_Renderer &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// вырезка&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; &lt;a href=&quot;http://www.php.net/header&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;header&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$text&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$level&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; section_open&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$level&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; section_close&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; cdata&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$text&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; p_open&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; p_close&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; linebreak&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; hr&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// вырезка&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Он используется для документирования Renderer, хотя его также можно расширить, если вы хотите написать Renderer, который захватывает только определенные вызовы.
&lt;/p&gt;

&lt;p&gt;
Основной принцип того, как инструкции, возвращаемые парсером, используются против Renderer, аналогичен понятию &lt;a href=&quot;https://en.wikipedia.org/wiki/Simple_API_for_XML&quot; class=&quot;interwiki iw_wp&quot; title=&quot;https://en.wikipedia.org/wiki/Simple_API_for_XML&quot;&gt;SAX XML API&lt;/a&gt; - инструкции представляют собой список имен функций/методов и их аргументов. Проходя по списку инструкций, каждая инструкция может быть вызвана против Renderer (т. е. методы, предоставляемые Renderer, являются &lt;a href=&quot;https://en.wikipedia.org/wiki/Callback_(computer_science)&quot; class=&quot;interwiki iw_wp&quot; title=&quot;https://en.wikipedia.org/wiki/Callback_(computer_science)&quot;&gt;callbacks&lt;/a&gt;). Unlike the SAX &lt;abbr title=&quot;Application Programming Interface&quot;&gt;API&lt;/abbr&gt;, where only a few, fairly general, callbacks are available (e.g. tag_start, tag_end, cdata etc.). В отличие от SAX &lt;abbr title=&quot;Application Programming Interface&quot;&gt;API&lt;/abbr&gt; , где доступно только несколько, довольно общих, обратных вызовов (например, tag_start, tag_end, cdata и т. д.), Renderer определяет более явный &lt;abbr title=&quot;Application Programming Interface&quot;&gt;API&lt;/abbr&gt; , где методы обычно соответствуют один к одному акту генерации вывода. В разделе Renderer, показанном выше, методы &lt;code&gt;p_open&lt;/code&gt; и &lt;code&gt;p_close&lt;/code&gt; будут использоваться для вывода тегов &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; и &lt;code&gt;&amp;lt;/p&amp;gt;&lt;/code&gt; в XHTML, соответственно, в то время как &lt;code&gt;header&lt;/code&gt; функция принимает два аргумента — некоторый текст для отображения и «уровень» заголовка, поэтому вызов типа &lt;code&gt;header(&amp;#039;Some Title&amp;#039;, 1)&lt;/code&gt; будет выведен в XHTML типа &lt;code&gt;&amp;lt;h1&amp;gt;Some Title&amp;lt;/h1&amp;gt;&lt;/code&gt;.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;вызов_рендерера_с_инструкциями&quot;&gt;Вызов рендерера с инструкциями&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Клиентскому коду, использующему Parser, остается выполнить список инструкций для Renderer. Обычно это делается с помощью функции PHP &lt;a href=&quot;https://secure.php.net/call_user_func_array()&quot; class=&quot;interwiki iw_phpfn&quot; title=&quot;https://secure.php.net/call_user_func_array()&quot;&gt;call_user_func_array()&lt;/a&gt; function. Например;
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// Получить список инструкций от парсера &lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$instructions&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;parse&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$rawDoc&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Создаем рендерер &lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$renderer&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Renderer_xhtml&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Проходим по инструкциям &lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;foreach&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$instructions&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$instruction&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;// Выполняем обратный вызов для Renderer &lt;/span&gt;
    &lt;a href=&quot;http://www.php.net/call_user_func_array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;call_user_func_array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$renderer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$instruction&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$instruction&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4 id=&quot;методы_связи_с_рендерером&quot;&gt;Методы связи с рендерером&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Ключевые методы Renderer для обработки различных типов ссылок:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;function &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=camelcaselink&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;search definitions for camelcaselink($link)&quot;&gt;camelcaselink($link)&lt;/a&gt; {} // $link like &amp;quot;SomePage&amp;quot;&lt;/code&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;Вероятно, это можно проигнорировать для проверки на спам — никто не должен иметь возможности ссылаться на сторонние сайты с таким синтаксисом.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;function &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=internallink&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;search definitions for internallink($link, $title = null)&quot;&gt;internallink($link, $title = null)&lt;/a&gt; {} // $link like &amp;quot;[[syntax]]&amp;quot;&lt;/code&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;Хотя &lt;code&gt;$link&lt;/code&gt; сам по себе является внутренним, &lt;code&gt;$title&lt;/code&gt; может быть изображением, которое находится вне сайта, поэтому необходимо проверить&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;function &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=externallink&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;search definitions for externallink($link, $title = null)&quot;&gt;externallink($link, $title = null)&lt;/a&gt; {}&lt;/code&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;Оба изображения &lt;code&gt;$link&lt;/code&gt; и &lt;code&gt;$title&lt;/code&gt; (изображения) нуждаются в проверке&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;function &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=interwikilink&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;search definitions for interwikilink($link, $title = null, $wikiName, $wikiUri)&quot;&gt;interwikilink($link, $title = null, $wikiName, $wikiUri)&lt;/a&gt; {}&lt;/code&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;Необходимость &lt;code&gt;$title&lt;/code&gt; проверки изображений&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;function &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=filelink&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;search definitions for filelink($link, $title = null)&quot;&gt;filelink($link, $title = null)&lt;/a&gt; {}&lt;/code&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;Технически должны совпадать только действительные &lt;code&gt;file://&lt;/code&gt; &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt;-адреса, но, вероятно, лучше все равно проверить, плюс &lt;code&gt;$title&lt;/code&gt; может быть стороннее изображение&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;function &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=windowssharelink&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;search definitions for windowssharelink($link, $title = null)&quot;&gt;windowssharelink($link, $title = null)&lt;/a&gt; {}&lt;/code&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;Должен соответствовать только допустимым &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt;-адресам общих ресурсов Windows, но в любом случае проверять наличие &lt;code&gt;$title&lt;/code&gt; изображений&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;function &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=emaillink&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;search definitions for emaillink($address, $title = null)&quot;&gt;emaillink($address, $title = null)&lt;/a&gt; {}&lt;/code&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;code&gt;$title&lt;/code&gt; может быть изображение. Проверить почту тоже?$titleможет быть изображение. Проверить почту тоже?&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;function &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=internalmedialink&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for internalmedialink($src, $title = null, $align = null,  $width = null, $height = null, $cache = null)&quot;&gt;internalmedialink($src, $title = null, $align = null,  $width = null, $height = null, $cache = null)&lt;/a&gt; {}&lt;/code&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;Это не требует проверки — должно ссылаться только на локальные изображения. &lt;code&gt;$title&lt;/code&gt; само по себе не может быть изображением&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;function &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=externalmedialink&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for externalmedialink($src, $title = null, $align = null, $width = null, $height = null, $cache = null)&quot;&gt;externalmedialink($src, $title = null, $align = null, $width = null, $height = null, $cache = null)&lt;/a&gt; {}&lt;/code&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;code&gt;$src&lt;/code&gt; нуждается в проверке&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Особого внимания требуют методы, которые принимаютe &lt;code&gt;$title&lt;/code&gt; аргумент, представляющий видимый текст ссылки, например;
&lt;/p&gt;
&lt;pre class=&quot;code html4strict&quot;&gt;&lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/a.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;a&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;kw3&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;https://www.example.com&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;This is the title&lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/a.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;a&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Аргумент &lt;code&gt;$title&lt;/code&gt; может иметь три возможных типа значений;
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;null&lt;/code&gt;: в вики-документе заголовок не указан.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; string: в качестве заголовка использовалась простая текстовая строка&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; array (hash): в качестве заголовка использовано изображение.&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
Если это &lt;code&gt;$title&lt;/code&gt; массив, он будет содержать ассоциативные значения, описывающие изображение;
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$title&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;// Может быть &#039;internalmedia&#039; (локальное изображение) или &#039;externalmedia&#039; (внешнее изображение) &lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;type&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;internalmedia&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// URL-адрес изображения (может быть URL-адресом wiki или https://static.example.com/img.png) &lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;src&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;wiki:php-powered.png&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// Для атрибута alt - строка или null &lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;title&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;Powered by PHP&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// &#039;left&#039;, &#039;right&#039;, &#039;center&#039; или null&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;align&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;right&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// Ширина в пикселях или null &lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;width&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// Высота в пикселях или null &lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;height&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;75&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// Кэшировать ли изображение (для внешних изображений)&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;cache&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Renderer (\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c)&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;renderer_\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:28,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;51093-59075&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit8&quot; id=&quot;примеры&quot;&gt;Примеры&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Следующие примеры показывают общие задачи, которые будут решаться с помощью парсера.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u0440\u0438\u043c\u0435\u0440\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u0440\u0438\u043c\u0435\u0440\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:32,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;59076-59261&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit9&quot; id=&quot;основной_вызов&quot;&gt;Основной вызов&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Чтобы вызвать парсер со &lt;em&gt;всеми&lt;/em&gt; режимами, и обработать синтаксис документа «Докувики»:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;require_once&lt;/span&gt; DOKU_INC &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;parser/parser.php&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Создать парсер&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Добавить обработчик&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;Handler&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Handler&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Загрузить все режимы&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;listblock&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_ListBlock&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;preformatted&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Preformatted&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; 
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;notoc&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_NoToc&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;header&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Header&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;table&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Table&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;re0&quot;&gt;$formats&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;strong&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;emphasis&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;underline&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;monospace&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;subscript&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;superscript&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;deleted&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;foreach&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$formats&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$format&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$format&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Formatting&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$format&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;linebreak&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Linebreak&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;footnote&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Footnote&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;hr&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_HR&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;unformatted&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Unformatted&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;php&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_PHP&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;html&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_HTML&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;code&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Code&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;file&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_File&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;quote&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Quote&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Здесь требуются данные. Функции &#039;&#039;get*&#039;&#039;остаются на ваше усмотрение&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;acronym&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Acronym&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/array_keys&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array_keys&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;getAcronyms&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;wordblock&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Wordblock&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/array_keys&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array_keys&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;getBadWords&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;smiley&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Smiley&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/array_keys&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array_keys&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;getSmileys&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;entity&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Entity&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/array_keys&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array_keys&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;getEntities&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;multiplyentity&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_MultiplyEntity&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;quotes&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Quotes&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;camelcaselink&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_CamelCaseLink&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;internallink&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_InternalLink&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;media&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Media&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;externallink&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_ExternalLink&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;email&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Email&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;windowssharelink&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_WindowsShareLink&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;filelink&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_FileLink&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;eol&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Eol&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Загрузить исходный документ вики&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$doc&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/file_get_contents&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;file_get_contents&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;DOKU_DATA &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;wiki/syntax.txt&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Получить список инструкций&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$instructions&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;parse&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$doc&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Создать преобразователь&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;require_once&lt;/span&gt; DOKU_INC &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;parser/xhtml.php&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Renderer&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Renderer_XHTML&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co2&quot;&gt;# Здесь загрузите в преобразователь данные (например, типа смайлов)
&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// Проходимся по всем инструкциям&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;foreach&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$instructions&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$instruction&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// Выполняем обратный вызов через преобразователь&lt;/span&gt;
    &lt;a href=&quot;http://www.php.net/call_user_func_array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;call_user_func_array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$Renderer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$instruction&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$instruction&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Отображаем выходные данные&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$Renderer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;doc&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0432\u044b\u0437\u043e\u0432&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439_\u0432\u044b\u0437\u043e\u0432&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:32,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;59262-62713&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit10&quot; id=&quot;выбор_текста_для_фрагментов&quot;&gt;Выбор текста (для фрагментов)&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Следующий код показывает, как выбрать фрагмент исходного текста, используя инструкции, полученные из парсера;
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// Создаём парсер&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Добавляем обработчик&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;Handler&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Handler&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Загружаем режим header для поиска заголовков&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;header&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Header&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Загружаем режимы, которые могут содержать разметку,&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// которая может быть принята за заголовок&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;listblock&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_ListBlock&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;preformatted&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Preformatted&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; 
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;table&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Table&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;unformatted&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Unformatted&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;php&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_PHP&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;html&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_HTML&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;code&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Code&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;file&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_File&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;quote&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Quote&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;footnote&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Footnote&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;internallink&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_InternalLink&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;media&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Media&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;externallink&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_ExternalLink&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;email&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Email&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;windowssharelink&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_WindowsShareLink&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;filelink&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_FileLink&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Загружаем исходный документ вики&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$doc&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/file_get_contents&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;file_get_contents&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;DOKU_DATA &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;wiki/syntax.txt&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Получаем перечень инструкций&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$instructions&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;parse&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$doc&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Используем эти переменные, чтобы узнать,&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// находимся ли мы внутри необходимого фрагмента&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$inSection&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;FALSE&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$startPos&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$endPos&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Проходимся по всем инструкциям&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;foreach&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$instructions&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$instruction&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$inSection&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;co1&quot;&gt;// Ищем заголовки в списках&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$instruction&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;header&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;
                &lt;a href=&quot;http://www.php.net/trim&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;trim&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$instruction&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;Lists&#039;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
            &lt;span class=&quot;re0&quot;&gt;$startPos&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$instruction&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;re0&quot;&gt;$inSection&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;TRUE&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;co1&quot;&gt;// Ищем конец фрагмента&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$instruction&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;section_close&#039;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
            &lt;span class=&quot;re0&quot;&gt;$endPos&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$instruction&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;break&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Нормализуем и разбиваем документ&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$doc&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es1&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;a href=&quot;http://www.php.net/str_replace&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;str_replace&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es1&quot;&gt;\r&lt;/span&gt;&lt;span class=&quot;es1&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es1&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$doc&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es1&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Получаем текст, идущий перед фрагментом, который нам необходим&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$before&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/substr&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;substr&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$doc&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$startPos&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$section&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/substr&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;substr&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$doc&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$startPos&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$endPos&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$startPos&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$after&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/substr&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;substr&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$doc&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$endPos&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0412\u044b\u0431\u043e\u0440 \u0442\u0435\u043a\u0441\u0442\u0430 (\u0434\u043b\u044f \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432)&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0432\u044b\u0431\u043e\u0440_\u0442\u0435\u043a\u0441\u0442\u0430_\u0434\u043b\u044f_\u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:33,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;62714-65843&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit11&quot; id=&quot;управление_входными_файлами_с_данными_в_шаблонах&quot;&gt;Управление входными файлами с данными в шаблонах&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
«Докувики» хранит части некоторых шаблонов во внешних файлах (например, смайлы). Поскольку парсинг и вывод документа являются отдельными стадиями, обрабатываемыми различными компонентами, при использовании данных также требуется дифференцированный подход.
&lt;/p&gt;

&lt;p&gt;
Каждый подходящий режим принимает простой список элементов, который он собирает в список шаблонов для регистрации в анализаторе.
&lt;/p&gt;

&lt;p&gt;
Например:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// Простой список вхождений смайлов...&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$smileys&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;:-)&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;:-(&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;;-)&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;// и т. д.&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Создать режим&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$SmileyMode&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Smiley&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$smileys&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Добавить режим в парсер&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$SmileyMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Для парсера не имеет значения выходной формат смайлов.
&lt;/p&gt;

&lt;p&gt;
Другие режимы, где применяется подобный подход, определяются классами;
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;Doku_Parser_Mode_Acronym&lt;/code&gt; — для сокращений;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;Doku_Parser_Mode_Wordblock&lt;/code&gt; — для блоков специфических слов (например, ненормативной лексики);&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;Doku_Parser_Mode_Entity&lt;/code&gt; — для типографических символов.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Конструктор каждого класса принимает в качестве параметра список указанных элементов.
&lt;/p&gt;

&lt;p&gt;
На практике возникает необходимость в функциях для извлечения данных из конфигурационных файлов и размещение ассоциативных массивов в статической переменной, например:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; getSmileys&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
    static &lt;span class=&quot;re0&quot;&gt;$smileys&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$smileys&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;re0&quot;&gt;$smileys&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;re0&quot;&gt;$lines&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/file&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;file&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; DOKU_CONF &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;smileys.conf&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;kw1&quot;&gt;foreach&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$lines&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$line&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
            &lt;span class=&quot;co1&quot;&gt;// игнорировать комментарии&lt;/span&gt;
            &lt;span class=&quot;re0&quot;&gt;$line&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/preg_replace&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;preg_replace&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;/#.*$/&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$line&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
            &lt;span class=&quot;re0&quot;&gt;$line&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/trim&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;trim&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$line&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
            &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/empty&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;empty&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$line&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;continue&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
            &lt;span class=&quot;re0&quot;&gt;$smiley&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/preg_split&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;preg_split&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;/\s+/&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$line&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
            &lt;span class=&quot;co1&quot;&gt;// Собрать ассоциативный массив&lt;/span&gt;
            &lt;span class=&quot;re0&quot;&gt;$smileys&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$smiley&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$smiley&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$smileys&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Эта функция может быть использована следующим образом:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// Загрузить шаблоны смайлов в режим&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$SmileyMode&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Smiley&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/array_keys&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array_keys&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;getSmileys&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// Загрузить ассоциативный массив в Преобразователь&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Renderer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;smileys&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; getSmileys&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
&lt;strong&gt;Замечание:&lt;/strong&gt; проверка ссылок, которые необходимо блокировать, обрабатывается другим способом, описанным ниже.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0445\u043e\u0434\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0432 \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u0445&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435_\u0432\u0445\u043e\u0434\u043d\u044b\u043c\u0438_\u0444\u0430\u0439\u043b\u0430\u043c\u0438_\u0441_\u0434\u0430\u043d\u043d\u044b\u043c\u0438_\u0432_\u0448\u0430\u0431\u043b\u043e\u043d\u0430\u0445&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:34,&amp;quot;secid&amp;quot;:11,&amp;quot;range&amp;quot;:&amp;quot;65844-69369&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit12&quot; id=&quot;проверка_ссылок_на_спам&quot;&gt;Проверка ссылок на спам&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
В идеале ссылки требуется проверять на спам &lt;em&gt;до&lt;/em&gt; размещения документа (после редактирования).
&lt;/p&gt;
&lt;blockquote&gt;&lt;div class=&quot;no&quot;&gt;
 Этот пример следует использовать осторожно. Он создаёт полезные точки связывания, но по результатам тестирования является очень медленным — возможно проще использовать функцию, которая «закрывает глаза» на синтаксис, но ищет во всем документе ссылки, сверяя их с «чёрным списком». Между тем, этот пример может быть полезным как основа для построения «карты вики» или поиска «требуемых страниц» посредством проверки внутренних ссылок.&lt;/div&gt;&lt;/blockquote&gt;

&lt;p&gt;
Это можно сделать, создав специальный преобразователь, который проверяет только относящиеся к ссылкам обратные вызовы и сверяет ULR с «чёрным списком».
&lt;/p&gt;

&lt;p&gt;
Требуется функция для загрузки файла &lt;code&gt;spam.conf&lt;/code&gt; и связывания его с единственным регулярным выражением:
&lt;/p&gt;
&lt;blockquote&gt;&lt;div class=&quot;no&quot;&gt;
 Недавно протестировал этот подход (единственное регулярное выражение) с использованием последней версии «чёрного списка» с &lt;a href=&quot;http://blacklist.chongqed.org/&quot; class=&quot;urlextern&quot; title=&quot;http://blacklist.chongqed.org/&quot; rel=&quot;ugc nofollow&quot;&gt;blacklist.chongqed.org&lt;/a&gt; и получил ошибки о том, что окончательное регулярное выражение слишком велико. Возможно, следует разбить регулярное выражение на маленькие кусочки и возвращать их как массив.&lt;/div&gt;&lt;/blockquote&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; getSpamPattern&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    static &lt;span class=&quot;re0&quot;&gt;$spamPattern&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/is_null&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;is_null&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$spamPattern&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;re0&quot;&gt;$lines&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;@&lt;/span&gt;&lt;a href=&quot;http://www.php.net/file&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;file&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;DOKU_CONF &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;spam.conf&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$lines&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
            &lt;span class=&quot;re0&quot;&gt;$spamPattern&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
            &lt;span class=&quot;re0&quot;&gt;$spamPattern&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;#&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;re0&quot;&gt;$sep&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
            &lt;span class=&quot;kw1&quot;&gt;foreach&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$lines&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$line&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
                &lt;span class=&quot;re0&quot;&gt;$line&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/preg_replace&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;preg_replace&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;/#.*$/&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$line&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
                &lt;span class=&quot;co1&quot;&gt;// Игнорировать пустые строки&lt;/span&gt;
                &lt;span class=&quot;re0&quot;&gt;$line&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/trim&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;trim&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$line&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/empty&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;empty&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$line&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;continue&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
                &lt;span class=&quot;re0&quot;&gt;$spamPattern&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;.=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$sep&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$line&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
                &lt;span class=&quot;re0&quot;&gt;$sep&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;|&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
            &lt;span class=&quot;re0&quot;&gt;$spamPattern&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;.=&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;#si&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$spamPattern&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Теперь нам нужно расширить основной преобразователь ещё одним, который проверяет только ссылки:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;require_once&lt;/span&gt; DOKU_INC &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;parser/renderer.php&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; Doku_Renderer_SpamCheck &lt;span class=&quot;kw2&quot;&gt;extends&lt;/span&gt; Doku_Renderer &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// Здесь должен быть код, выполняющий инструкции&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$currentCall&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// Массив инструкций, которые содержат спам&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$spamFound&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// PCRE-шаблон для нахождения спама&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$spamPattern&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;#^$#&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; internallink&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$link&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$title&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;__checkTitle&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$title&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; externallink&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$link&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$title&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;__checkLinkForSpam&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$link&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;__checkTitle&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$title&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; interwikilink&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$link&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$title&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;__checkTitle&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$title&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; filelink&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$link&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$title&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;__checkLinkForSpam&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$link&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;__checkTitle&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$title&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; windowssharelink&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$link&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$title&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;__checkLinkForSpam&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$link&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;__checkTitle&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$title&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; email&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$address&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$title&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;__checkLinkForSpam&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$address&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;__checkTitle&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$title&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; internalmedialink &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$src&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;__checkLinkForSpam&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$src&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; externalmedialink&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$src&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;__checkLinkForSpam&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$src&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; __checkTitle&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$title&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/is_array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;is_array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$title&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/isset&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;isset&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$title&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;src&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
            &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;__checkLinkForSpam&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$title&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;src&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// Поиск по шаблону осуществляется здесь&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; __checkLinkForSpam&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$link&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/preg_match&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;preg_match&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;spamPattern&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$link&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
            &lt;span class=&quot;re0&quot;&gt;$spam&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;currentCall&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;re0&quot;&gt;$spam&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$link&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;spamFound&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$spam&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Обратите внимание на строку &lt;code&gt;$spam[3] = $link;&lt;/code&gt; в методе &lt;code&gt;__checkLinkForSpam&lt;/code&gt;. Она вставляет дополнительный элемент в список найденных спамовых инструкций, позволяя легко определить, какие &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; были «плохими».
&lt;/p&gt;

&lt;p&gt;
Наконец мы можем использовать преобразователь с проверкой на спам:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// Создать парсер&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Добавить обработчик&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;Handler&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Handler&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Добавить режимы, которые могут содержать разметку,&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// которая ошибочно будет принята за ссылку&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;preformatted&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Preformatted&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; 
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;unformatted&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Unformatted&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;php&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_PHP&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;html&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_HTML&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;code&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Code&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;file&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_File&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;quote&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Quote&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Загружаем режим link...&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;internallink&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_InternalLink&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;media&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Media&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;externallink&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_ExternalLink&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;email&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Email&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;windowssharelink&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_WindowsShareLink&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;filelink&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_FileLink&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Загружаем исходный документ вики&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$doc&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/file_get_contents&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;file_get_contents&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;DOKU_DATA &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;wiki/spam.txt&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Получить список инструкций&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$instructions&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;parse&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$doc&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Создать преобразователь&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;require_once&lt;/span&gt; DOKU_INC &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;parser/spamcheck.php&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Renderer&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Renderer_SpamCheck&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Загрузить шаблон спама&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$Renderer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;spamPattern&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; getSpamPattern&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Пройтись по всем инструкциям&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;foreach&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$instructions&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$instruction&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// Сохранить текущую инструкцию&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$Renderer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;currentCall&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$instruction&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;a href=&quot;http://www.php.net/call_user_func_array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;call_user_func_array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$Renderer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$instruction&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$instruction&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Что за спам был найден?&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;pre&amp;gt;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;a href=&quot;http://www.php.net/print_r&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;print_r&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$Renderer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;spamFound&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;/pre&amp;gt;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Поскольку нам не нужны все режимы синтаксиса, проверка спама таким способом будет быстрее, чем обычный парсинг документа.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430 \u0441\u043f\u0430\u043c&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430_\u0441\u0441\u044b\u043b\u043e\u043a_\u043d\u0430_\u0441\u043f\u0430\u043c&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:38,&amp;quot;secid&amp;quot;:12,&amp;quot;range&amp;quot;:&amp;quot;69370-77126&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit13&quot; id=&quot;добавление_синтаксической_конструкции&quot;&gt;Добавление синтаксической конструкции&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
&lt;strong&gt;Предупреждение:&lt;/strong&gt; приведённый ниже код ещё не испытан — это только пример.
&lt;/p&gt;

&lt;p&gt;
Простая задача по модификации парсера: этот пример будет добавлять тэг-«закладку», который может быть использован для создания якоря в документе для создания ссылки на него.
&lt;/p&gt;

&lt;p&gt;
Синтаксис для тэга будет таким:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;BM{Моя закладка}&lt;/pre&gt;

&lt;p&gt;
Строка «Моя закладка» является наименование закладки, а &lt;code&gt;BM&lt;/code&gt; {} идентифицируется как сама закладка. В &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt; эта конструкция будет соответствовать:
&lt;/p&gt;
&lt;pre class=&quot;code html4strict&quot;&gt;&lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/a.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;a&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;kw3&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Моя закладка&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/a.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;a&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Добавление этой синтаксической конструкции требует следующих шагов:
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; создать синтаксический режим парсера, для регистрации в лексическом анализаторе;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; обновить код функции &lt;code&gt;Doku_Parser_Substition&lt;/code&gt;, находящейся в конце файла &lt;code&gt;parser.php&lt;/code&gt; и которая используется для быстрого получения списка режимов (используется в классах вроде&lt;code&gt;Doku_Parser_Mode_Table&lt;/code&gt;);&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; обновить код обработчика, дополнив его методом, «ловящим» вхождения закладок;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; обновление абстрактного класса преобразователя и какого-нибудь конкретного преобразователя.&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
Создание режима парсера подразумевает расширение класса &lt;code&gt;Doku_Parser_Mode&lt;/code&gt; и перегрузкой метода &lt;code&gt;connectTo&lt;/code&gt;:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; Doku_Parser_Mode_Bookmark &lt;span class=&quot;kw2&quot;&gt;extends&lt;/span&gt; Doku_Parser_Mode &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; connectTo&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;co1&quot;&gt;// Разрешаются слова и пробелы&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;Lexer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addSpecialPattern&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;BM\{[\w ]+\}&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;bookmark&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Будет осуществляться поиск целой закладки с использованием единственного шаблона (извлечение имени закладки из остального синтаксиса будет осущевляться обработчиком). Используется метод &lt;code&gt;addSpecialPattern&lt;/code&gt; анализатора, так что закладка присутствует в своём собственном состоянии.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Замечание:&lt;/strong&gt; анализатор не требует ограничителей шаблона — он заботиться об этом за вас.
&lt;/p&gt;

&lt;p&gt;
Поскольку ничто &lt;em&gt;внутри&lt;/em&gt; закладки не должно рассматриваться как годная разметка вики, связывание с другими режимами, которые может принимать этот, отсутствует.
&lt;/p&gt;

&lt;p&gt;
Следующая функция &lt;code&gt;Doku_Parser_Substition&lt;/code&gt; в файле &lt;code&gt;inc/parser/parser.php&lt;/code&gt; требует обновления, чтобы она возвращала в списке новый режим с наименованием &lt;code&gt;bookmark&lt;/code&gt;;
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; Doku_Parser_Substition&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$modes&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
        &lt;span class=&quot;st_h&quot;&gt;&#039;acronym&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;smiley&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;wordblock&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;entity&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;camelcaselink&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;st_h&quot;&gt;&#039;internallink&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;media&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;externallink&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;linebreak&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;email&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;st_h&quot;&gt;&#039;windowssharelink&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;filelink&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;notoc&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;multiplyentity&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;st_h&quot;&gt;&#039;quotes&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;bookmark&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$modes&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Эта функция лишь помогает в регистрации режима с другими режимами, которые получают его (например, списки могут содержать этот режим — ваша ссылка может быть внутри списка).
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Замечание:&lt;/strong&gt; существует похожая функция, вроде &lt;code&gt;Doku_Parser_Protected&lt;/code&gt; и &lt;code&gt;Doku_Parser_Formatting&lt;/code&gt;, которые возвращают разные группы режимов. Группировка различных типов синтаксиса не является полностью совершенной, но всё равно остаётся полезной для экономии кода.
&lt;/p&gt;

&lt;p&gt;
Описав синтаксис, мы должны добавить в обработчик новый метод, который сравнивает наименование режима (т. е.&lt;code&gt;bookmark&lt;/code&gt;).
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; Doku_Handler &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// ...&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// $match - строка, которая сравнивается анализатором&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;//          с регулярным выражением для закладок&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;// $state идентифицирует тип совпадения (см. выше)&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;// $pos - индекс байта первого символа совпадения в исходном документе&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; bookmark&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$match&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$state&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$pos&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;co1&quot;&gt;// Технически не следует беспокоится о состоянии:&lt;/span&gt;
        &lt;span class=&quot;co1&quot;&gt;// оно всегда будет DOKU_LEXER_SPECIAL, если&lt;/span&gt;
        &lt;span class=&quot;co1&quot;&gt;// нет серьёзных багов&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;switch&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$state&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
            &lt;span class=&quot;kw1&quot;&gt;case&lt;/span&gt; DOKU_LEXER_SPECIAL&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;
&amp;nbsp;
                &lt;span class=&quot;co1&quot;&gt;// Попытка извлечения наименования закладки&lt;/span&gt;
                &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/preg_match&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;preg_match&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;/^BM\{(\w{1,})\}$/&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$match&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$nameMatch&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
                    &lt;span class=&quot;re0&quot;&gt;$name&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$nameMatch&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
                    &lt;span class=&quot;co1&quot;&gt;// arg0: наименование вызываемого метода преобразователя&lt;/span&gt;
                    &lt;span class=&quot;co1&quot;&gt;// arg1: массив аргументов для метода преобразователя&lt;/span&gt;
                    &lt;span class=&quot;co1&quot;&gt;// arg2: индекс байта&lt;/span&gt;
                    &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;__addCall&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;bookmark&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$name&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$pos&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
                &lt;span class=&quot;co1&quot;&gt;// Если у закладки нет годного имени,&lt;/span&gt;
                &lt;span class=&quot;co1&quot;&gt;//  пропускаем не меняя как cdata&lt;/span&gt;
                &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
                    &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;__addCall&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;cdata&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$match&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$pos&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
                &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;break&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;co1&quot;&gt;// Должно вернуть TRUE или анализатор будет остановлен&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;TRUE&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// ...&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Последний этап — обновление кода преобразователя (&lt;code&gt;renderer.php&lt;/code&gt;) новой функцией и её реализация в XHTML преобразовании (&lt;code&gt;xhtml.php&lt;/code&gt;):
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; Doku_Renderer &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// ...&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; bookmark&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$name&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// ...&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; Doku_Renderer_XHTML &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// ...&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; bookmark&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$name&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$name&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;__xmlEntities&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$name&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;co1&quot;&gt;// id is required in XHTML while name still supported in 1.0&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;a class=&amp;quot;bookmark&amp;quot; name=&amp;quot;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$name&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;&amp;quot; id=&amp;quot;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$name&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// ...&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
См. скрипт &lt;code&gt;tests/parser_replacements.test.php&lt;/code&gt; в качестве примера того, как можно использовать этот код.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435_\u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0439_\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:41,&amp;quot;secid&amp;quot;:13,&amp;quot;range&amp;quot;:&amp;quot;77127-84807&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit14&quot; id=&quot;добавление_синтаксиса_форматирования_с_состоянием&quot;&gt;Добавление синтаксиса форматирования (с состоянием)&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
&lt;strong&gt;Предупреждение:&lt;/strong&gt; нижеприведённый код ещё не протестирован — это только пример.
&lt;/p&gt;

&lt;p&gt;
Для того, чтобы показать расширенное использование анализатора, этот пример добавляет разметку, которая позволяет пользователям менять цвет обрамляемый текст на красный, жёлтый или зелёный.
&lt;/p&gt;

&lt;p&gt;
Разметка будет выглядеть так:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;&amp;lt;red&amp;gt;Это красный цвет&amp;lt;/red&amp;gt;.
Это чёрный цвет
&amp;lt;yellow&amp;gt;Это жёлтый цвет&amp;lt;/yellow&amp;gt;.
Это тоже чёрный цвет
&amp;lt;green&amp;gt;Это зелёный цвет&amp;lt;/green&amp;gt;.&lt;/pre&gt;

&lt;p&gt;
Шаги, необходимые для внедрения данной возможности, в сущности, являются такими же, как в предыдущем примере, начинаются с нового синтаксического режима, но добавляет некоторые детали, поскольку задействуются другие режимы:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; Doku_Parser_Mode_TextColors &lt;span class=&quot;kw2&quot;&gt;extends&lt;/span&gt; Doku_Parser_Mode &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$color&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$colors&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;red&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;green&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;blue&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; Doku_Parser_Mode_TextColor&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$color&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;co1&quot;&gt;// Предотвращает ошибки использования этого режима&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;&lt;a href=&quot;http://www.php.net/array_key_exists&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array_key_exists&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$color&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;colors&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
            &lt;a href=&quot;http://www.php.net/trigger_error&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;trigger_error&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;Invalid color &#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$color&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;E_USER_WARNING&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;color&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$color&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;co1&quot;&gt;// Этот режим принимает другие режимы:&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;allowedModes&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array_merge&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array_merge&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
            Doku_Parser_Formatting&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$color&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            Doku_Parser_Substition&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            Doku_Parser_Disabled&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
        &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// connectTo вызывается однократно для каждого режима, зарегистрированного анализатором&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; connectTo&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;co1&quot;&gt;// Шаблон с просмотром вперёд проверяет наличие закрывающего тэга...&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$pattern&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;&amp;gt;(?=.*&amp;lt;/&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;&amp;gt;)&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;co1&quot;&gt;// arg0: шаблон сравнения при входе в режим;&lt;/span&gt;
        &lt;span class=&quot;co1&quot;&gt;// arg1: другие режимы, может сравниваться этот шаблон;&lt;/span&gt;
        &lt;span class=&quot;co1&quot;&gt;// arg2: наименование режима.&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;Lexer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addEntryPattern&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$pattern&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// post connect вызывается однократно&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; postConnect&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;co1&quot;&gt;// arg0: шаблон сравнения при выходе из режима;&lt;/span&gt;
        &lt;span class=&quot;co1&quot;&gt;// arg1: наименование режима.&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;Lexer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addExitPattern&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;/&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;&amp;gt;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Некоторые особенности вышеприведённых классов:
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; В действительности представляют множество режимов, один для каждого цвета. Цвета следует выделять в отдельные режимы так, что, например, &lt;code&gt;&amp;lt;/green&amp;gt;&lt;/code&gt; не будет закрывающим тэгом для &lt;code&gt;&amp;lt;red&amp;gt;&lt;/code&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Эти режимы могут содержать, например, &lt;code&gt;&amp;lt;red&amp;gt;**Предупреждение**&amp;lt;/red&amp;gt;&lt;/code&gt; для полужирного текста красного цвета. Это регистрируется в конструкторе класса назначением полученных наименований режимов свойству &lt;code&gt;allowedModes&lt;/code&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Когда регистрируется входной шаблон, имеет смысл проверить существование выходного шаблона (с помощью просмотра вперёд). Это поможет в защите пользователей от них самих, когда они забудут добавить закрывающий тэг.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Входной шаблон требует регистрации для каждого режима, внутри которого тэги &amp;lt;color /&amp;gt; могут использоваться. Нам требуется толь один выходной шаблон, помещённый в метод &lt;code&gt;postConnect&lt;/code&gt;, который исполняется однократно, после всех вызовов &lt;code&gt;connectTo&lt;/code&gt; по всем вызванным режимам.&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
Когда с классом режимами обработки покончено, новые режимы требуется добавить в в функцию &lt;code&gt;Doku_Parser_Formatting&lt;/code&gt;:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; Doku_Parser_Formatting&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$remove&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$modes&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
        &lt;span class=&quot;st_h&quot;&gt;&#039;strong&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;emphasis&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;underline&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;monospace&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; 
        &lt;span class=&quot;st_h&quot;&gt;&#039;subscript&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;superscript&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;deleted&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;st_h&quot;&gt;&#039;red&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;yellow&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;green&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$key&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array_search&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array_search&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$remove&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$modes&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/is_int&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;is_int&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$key&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;a href=&quot;http://www.php.net/unset&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;unset&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$modes&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$key&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$modes&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
&lt;strong&gt;Замечание:&lt;/strong&gt; эта функция обрабатывается, чтобы снять режим для предотвращения включения режима форматирования в самого себя (так, например, нежелательно:  &lt;code&gt;&amp;lt;red&amp;gt;Срочное&amp;lt;red&amp;gt;и важное&amp;lt;/red&amp;gt;сообщение&amp;lt;/red&amp;gt;&lt;/code&gt;).
&lt;/p&gt;

&lt;p&gt;
Далее обработчик должен быть обновлён методами для каждого цвета:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; Doku_Handler &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// ...&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; red&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$match&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$state&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$pos&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;co1&quot;&gt;// Метод nestingTag в обработчике предотвращает&lt;/span&gt;
        &lt;span class=&quot;co1&quot;&gt;// многократное повторение одного и того же кода.&lt;/span&gt;
        &lt;span class=&quot;co1&quot;&gt;// Он создаёт открывающий и закрывающий инструкции&lt;/span&gt;
        &lt;span class=&quot;co1&quot;&gt;// для входных и выходных шаблонов,&lt;/span&gt;
        &lt;span class=&quot;co1&quot;&gt;// пропуская остальные как cdata.&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;__nestingTag&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$match&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$state&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$pos&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;red&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;TRUE&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; yellow&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$match&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$state&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$pos&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;__nestingTag&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$match&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$state&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$pos&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;yellow&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;TRUE&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; green&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$match&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$state&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$pos&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;__nestingTag&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$match&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$state&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$pos&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;green&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;TRUE&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// ...&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Наконец мы может обновить преобразователи:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; Doku_Renderer &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// ...&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; red_open&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; red_close&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; yellow_open&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; yellow_close&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; green_open&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; green_close&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// ...&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; Doku_Renderer_XHTML &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// ...&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; red_open&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;span class=&amp;quot;red&amp;quot;&amp;gt;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; red_close&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;/span&amp;gt;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; yellow_open&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;span class=&amp;quot;yellow&amp;quot;&amp;gt;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; yellow_close&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;/span&amp;gt;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; green_open&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;span class=&amp;quot;green&amp;quot;&amp;gt;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; green_close&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;/span&amp;gt;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// ...&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
См. скрипт &lt;code&gt;tests/parser_formatting.test.php&lt;/code&gt; в качестве примера того, как можно использовать этот код.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (\u0441 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c)&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435_\u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430_\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f_\u0441_\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:48,&amp;quot;secid&amp;quot;:14,&amp;quot;range&amp;quot;:&amp;quot;84808-92583&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit15&quot; id=&quot;добавление_блочных_синтаксических_конструкций&quot;&gt;Добавление блочных синтаксических конструкций&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
&lt;strong&gt;Предупреждение:&lt;/strong&gt; приведённый ниже код ещё не тестировался — это только пример.
&lt;/p&gt;

&lt;p&gt;
Развивая предыдущий пример, этот будет создавать новый тэг для разметки сообщений о том, что ещё предстоит сделать. Пример использования может выглядеть так:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;
===== Синтаксис цитирования в вики =====

Этот синтаксис позволяет

&amp;lt;todo&amp;gt;
Опишите синтаксис цитирования &amp;#039;&amp;gt;&amp;#039;
&amp;lt;/todo&amp;gt;

Другой текст&lt;/pre&gt;

&lt;p&gt;
Этот синтаксис позволяет искать страницы вики и находить вопросы, которые предстоит решить, выделяя их в документе бросающимся в глаза стилем.
&lt;/p&gt;

&lt;p&gt;
Особенностью данного синтаксиса является то, что он должен отображаться в отдельном блоке документа (например, внутри &lt;code&gt;
&lt;/p&gt;
&lt;div class=&quot;plugin_wrap&quot;&gt;&lt;/div&gt;
&lt;p&gt;
&lt;/code&gt;, так что он с помощью &lt;abbr title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/abbr&gt; может «плавать»). Это требует модификации класса &lt;code&gt;Doku_Handler_Block&lt;/code&gt;, который пробегает по всем инструкциям, после того, как обработчиком найдены все вхождения, и заботиться о добавлении тэгов &lt;code&gt;&amp;lt;p/&amp;gt;&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Режим парсера для этого синтаксиса может быть таким:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; Doku_Parser_Mode_Todo &lt;span class=&quot;kw2&quot;&gt;extends&lt;/span&gt; Doku_Parser_Mode &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; Doku_Parser_Mode_Todo&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;allowedModes&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array_merge&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array_merge&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
            Doku_Parser_Formatting&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            Doku_Parser_Substition&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            Doku_Parser_Disabled&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
        &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; connectTo&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;re0&quot;&gt;$pattern&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;todo&amp;gt;(?=.*&amp;lt;/todo&amp;gt;)&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;Lexer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addEntryPattern&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$pattern&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;todo&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; postConnect&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;Lexer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addExitPattern&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;/todo&amp;gt;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;todo&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Затем этот режим добавляется в функцию &lt;code&gt;Doku_Parser_BlockContainers&lt;/code&gt; в файле &lt;code&gt;parser.php&lt;/code&gt;:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; Doku_Parser_BlockContainers&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$modes&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
        &lt;span class=&quot;st_h&quot;&gt;&#039;footnote&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;listblock&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;table&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;quote&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;co1&quot;&gt;// горизонтальные разрывы нарушают принцип, но они не могут использоваться в таблицах / списках, &lt;/span&gt;
        &lt;span class=&quot;co1&quot;&gt;// так что вставляем их сюда&lt;/span&gt;
        &lt;span class=&quot;st_h&quot;&gt;&#039;hr&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;st_h&quot;&gt;&#039;todo&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$modes&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Обновление класса &lt;code&gt;Doku_Handler&lt;/code&gt;:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; Doku_Handler &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// ...&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; todo&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$match&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$state&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$pos&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;__nestingTag&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$match&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$state&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$pos&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;todo&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;TRUE&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// ...&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Класс &lt;code&gt;Doku_Handler_Block&lt;/code&gt; (см. файл &lt;code&gt;inc/parser/handler.php&lt;/code&gt;) также нуждается в обновлении, чтобы регистрировать открывающие и закрывающие инструкции &lt;code&gt;todo&lt;/code&gt;:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; Doku_Handler_Block &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// ...&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$blockOpen&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
            &lt;span class=&quot;st_h&quot;&gt;&#039;header&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;st_h&quot;&gt;&#039;listu_open&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;listo_open&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;listitem_open&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;st_h&quot;&gt;&#039;table_open&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;tablerow_open&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;tablecell_open&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;tableheader_open&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;st_h&quot;&gt;&#039;quote_open&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;st_h&quot;&gt;&#039;section_open&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;// Needed to prevent p_open between header and section_open&lt;/span&gt;
            &lt;span class=&quot;st_h&quot;&gt;&#039;code&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;file&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;php&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;html&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;hr&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;preformatted&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;st_h&quot;&gt;&#039;todo_open&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$blockClose&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
            &lt;span class=&quot;st_h&quot;&gt;&#039;header&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;st_h&quot;&gt;&#039;listu_close&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;listo_close&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;listitem_close&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;st_h&quot;&gt;&#039;table_close&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;tablerow_close&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;tablecell_close&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;tableheader_close&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;st_h&quot;&gt;&#039;quote_close&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;st_h&quot;&gt;&#039;section_close&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;// Needed to prevent p_close after section_close&lt;/span&gt;
            &lt;span class=&quot;st_h&quot;&gt;&#039;code&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;file&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;php&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;html&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;hr&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;preformatted&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;st_h&quot;&gt;&#039;todo_close&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;&lt;/pre&gt;

&lt;p&gt;
Регистрация &lt;code&gt;todo_open&lt;/code&gt; и &lt;code&gt;todo_close&lt;/code&gt; в массивах &lt;code&gt;$blockOpen&lt;/code&gt; и &lt;code&gt;$blockClose&lt;/code&gt; сообщает классу &lt;code&gt;Doku_Handler_Block&lt;/code&gt;, что любые предыдущие абзацы должны быть закрыты &lt;em&gt;до&lt;/em&gt; входа в секцию &lt;code&gt;todo&lt;/code&gt;, а новый абзац должен начинаться &lt;em&gt;после&lt;/em&gt; секции &lt;code&gt;todo&lt;/code&gt;. Внутри &lt;code&gt;todo&lt;/code&gt; дополнительные абзацы не вставляются.
&lt;/p&gt;

&lt;p&gt;
После этого должен быть обновлён код преобразователя:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; Doku_Renderer &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// ...&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; todo_open&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; todo_close&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// ...&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; Doku_Renderer_XHTML &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// ...&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; todo_open&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;div class=&amp;quot;todo&amp;quot;&amp;gt;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; todo_close&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;/div&amp;gt;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// ...&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u043b\u043e\u0447\u043d\u044b\u0445 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435_\u0431\u043b\u043e\u0447\u043d\u044b\u0445_\u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0445_\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:54,&amp;quot;secid&amp;quot;:15,&amp;quot;range&amp;quot;:&amp;quot;92584-97795&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit16&quot; id=&quot;сериализация_инструкций_преобразователя&quot;&gt;Сериализация инструкций преобразователя&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Список выводимых обработчиком инструкций можно сериализировать, чтобы устранить повторную обработку исходного документа при каждом запросе, если содержание документа не менялось.
&lt;/p&gt;

&lt;p&gt;
Самая простая реализация может быть такой:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$ID&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; DOKU_DATA &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;wiki/syntax.txt&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$cacheID&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; DOKU_CACHE &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$ID&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;.cache&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Если кэш-файл отсутствует или утратил актуальность&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// (исходный документ модифицирован), получить «свежий» список инструкций&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;&lt;a href=&quot;http://www.php.net/file_exists&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;file_exists&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$cacheID&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/filemtime&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;filemtime&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$ID&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/filemtime&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;filemtime&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$cacheID&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw1&quot;&gt;require_once&lt;/span&gt; DOKU_INC &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;parser/parser.php&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// Создать парсер&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// Добавить обработчик&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;Handler&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Handler&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// Загрузить все режимы&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;listblock&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_ListBlock&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;preformatted&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Preformatted&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; 
    &lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;notoc&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_NoToc&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;header&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Header&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;table&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Table&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// и т. д., и т. п.&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;re0&quot;&gt;$instructions&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;parse&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/file_get_contents&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;file_get_contents&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$filename&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// Сериализировать и кэшировать &lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$sInstructions&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/serialize&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;serialize&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$instructions&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$fh&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;@&lt;/span&gt;&lt;a href=&quot;http://www.php.net/fopen&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;fopen&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$cacheID&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;a&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/fwrite&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;fwrite&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$fh&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$sInstructions&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;FALSE&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
            &lt;a href=&quot;http://www.php.net/die&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;die&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Cannot write to file (&lt;span class=&quot;es4&quot;&gt;$cacheID&lt;/span&gt;)&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
        &lt;a href=&quot;http://www.php.net/fclose&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;fclose&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$fh&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;// Загрузить и десериализировать&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$sInstructions&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/file_get_contents&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;file_get_contents&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$cacheID&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$instructions&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/unserialize&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;unserialize&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$sInstructions&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;re0&quot;&gt;$Renderer&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Renderer_XHTML&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;foreach&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$instructions&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$instruction&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;a href=&quot;http://www.php.net/call_user_func_array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;call_user_func_array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
        &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$Renderer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$instruction&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$instruction&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;
        &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$Renderer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;doc&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
&lt;strong&gt;Замечание:&lt;/strong&gt; эта реализация не является полной. Что должно просходить, если кто-либо, например, модифицирует файл &lt;code&gt;smiley.conf&lt;/code&gt;, добавив новый смайл? Это изменение должно порождать изменение кэша с обработкой нового смайла. Также необходимо позаботиться о блокировке файлов (или их переименовании).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0421\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f_\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439_\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:61,&amp;quot;secid&amp;quot;:16,&amp;quot;range&amp;quot;:&amp;quot;97796-100656&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit17&quot; id=&quot;сериализация_парсера&quot;&gt;Сериализация парсера&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
По аналогии с приведённым выше примером, возможна сериализация самого парсера до начала обработки. Поскольку установка режимов поддерживает довольно высокую перегрузку, этот пример может немного увеличить производительность. По неточной оценке, обработка страницы &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=ru:wiki:syntax&quot; class=&quot;wikilink2&quot; title=&quot;ru:wiki:syntax&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;ru:wiki:syntax&quot;&gt;syntax&lt;/a&gt; в медленной системе занимает около 1,5-а секунд для завершения &lt;em&gt;без&lt;/em&gt; сериализации и около 1,25-х секунды в версии парсера &lt;em&gt;с поддержкой&lt;/em&gt; сериализации.
&lt;/p&gt;

&lt;p&gt;
Если коротко, то сериализация может быть реализована таким способом:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$cacheId&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; DOKU_CACHE &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;parser.cache&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;&lt;a href=&quot;http://www.php.net/file_exists&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;file_exists&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$cacheId&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// Создаём парсер&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;Handler&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Handler&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// Загружаем все режимы&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;listblock&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_ListBlock&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addMode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;preformatted&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Doku_Parser_Mode_Preformatted&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co2&quot;&gt;# и т. д., и т. п.
&lt;/span&gt;    
    &lt;span class=&quot;co1&quot;&gt;// ВАЖНО: вызов connectModes()&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;connectModes&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// Сериализация&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$sParser&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/serialize&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;serialize&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// Запись в файл&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$fh&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;@&lt;/span&gt;&lt;a href=&quot;http://www.php.net/fopen&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;fopen&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$cacheID&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;a&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/fwrite&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;fwrite&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$fh&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$sParser&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;FALSE&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
            &lt;a href=&quot;http://www.php.net/die&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;die&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Cannot write to file (&lt;span class=&quot;es4&quot;&gt;$cacheID&lt;/span&gt;)&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
        &lt;a href=&quot;http://www.php.net/fclose&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;fclose&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$fh&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;// Загружаем сериализированную версию&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$sParser&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/file_get_contents&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;file_get_contents&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$cacheID&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/unserialize&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;unserialize&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$sParser&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;re0&quot;&gt;$Parser&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;parse&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$doc&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Некоторые замечания по реализации, не упомянутые выше:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Для некоторых файлов вместо записи требуется блокировка, в противном случае в ответ на запрос может быть получен частично кэшированный файл, если он будет считываться, пока продолжается запись.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Что следует делать, если обновляется один из файлов &lt;code&gt;*.conf&lt;/code&gt;? Необходимо очистить кэш.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Могут быть различные версии парсера (например, с проверкой на спам), так что используйте кэш-идентификаторы (cache IDs).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0421\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0430\u0440\u0441\u0435\u0440\u0430&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f_\u043f\u0430\u0440\u0441\u0435\u0440\u0430&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:62,&amp;quot;secid&amp;quot;:17,&amp;quot;range&amp;quot;:&amp;quot;100657-103460&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit18&quot; id=&quot;тестирование&quot;&gt;Тестирование&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;a href=&quot;http://ru.wikipedia.org/wiki/Модульное_тестирование&quot; class=&quot;urlextern&quot; title=&quot;http://ru.wikipedia.org/wiki/Модульное_тестирование&quot; rel=&quot;ugc nofollow&quot;&gt;Тесты программных единиц&lt;/a&gt; обеспечивают использование «&lt;a href=&quot;http://www.lastcraft.com/simple_test.php&quot; class=&quot;urlextern&quot; title=&quot;http://www.lastcraft.com/simple_test.php&quot; rel=&quot;ugc nofollow&quot;&gt;Simple Test for PHP&lt;/a&gt;». «Simple Test» является отличным инструментом для тестирования единиц php-кода. Особенно выделяются блестящая документация (см. &lt;a href=&quot;http://simpletest.sourceforge.net/&quot; class=&quot;urlextern&quot; title=&quot;http://simpletest.sourceforge.net/&quot; rel=&quot;ugc nofollow&quot;&gt;simpletest.sourceforge.net&lt;/a&gt; и &lt;a href=&quot;http://www.lastcraft.com/simple_test.php&quot; class=&quot;urlextern&quot; title=&quot;http://www.lastcraft.com/simple_test.php&quot; rel=&quot;ugc nofollow&quot;&gt;www.lastcraft.com/simple_test.php&lt;/a&gt;) и хорошо продуманый код, обеспечивающий «прозрачное» решение многих вопросов (вроде перехвата ошибок PHP и сообщения о них в результатах тестирования).
&lt;/p&gt;

&lt;p&gt;
Для парсера «Докувики» тесты проводились по всем внедряемым синтаксическим конструкциям, и я &lt;em&gt;очень сильно&lt;/em&gt; рекомендую написание новых тестов, если добавляется новый синтаксис.
&lt;/p&gt;

&lt;p&gt;
Чтобы запустить тесты, вам следует модифицировать файл &lt;code&gt;tests/testconfig.php&lt;/code&gt;, указав корректные директории «Simple Test» и «Докувики».
&lt;/p&gt;

&lt;p&gt;
Некоторые заметки и рекомендации:
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Повторно запускайте тесты каждый раз, когда вы меняете что-нибудь в парсере — проблемы немедленно выплывают на поверхность, экономя кучу времени.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Это только тесты для специфических ситуаций. Они не гарантируют отсутствие ошибок, если в этих специфических ситуациях работают корректно.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Если найдена ошибка, в процессе её устранения напишите тесты (даже лучше, &lt;em&gt;до&lt;/em&gt; её устранения), чтобы предотвратить её повторное возникновение.&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:63,&amp;quot;secid&amp;quot;:18,&amp;quot;range&amp;quot;:&amp;quot;103461-105813&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit19&quot; id=&quot;ошибки_и_проблемы&quot;&gt;Ошибки и проблемы&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Некоторые вопросы остаются за рамками подробного рассмотрения.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041e\u0448\u0438\u0431\u043a\u0438 \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043e\u0448\u0438\u0431\u043a\u0438_\u0438_\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:63,&amp;quot;secid&amp;quot;:19,&amp;quot;range&amp;quot;:&amp;quot;105814-105978&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit20&quot; id=&quot;важность_порядка_добавления_режимов&quot;&gt;Важность порядка добавления режимов&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Требуется выполение не столько «правил», сколько порядка, в котором добавляются режимы (парсер этого не проверяет). В особенности, режим &lt;code&gt;eol&lt;/code&gt; должен быть загружен последним, т. к. он «съедает» «обёрточные» символы, что может нарушить корректную работу других режимов, вроде &lt;code&gt;list&lt;/code&gt; или &lt;code&gt;table&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
В общем случае рекомендуется загружать режимы в порядке, описанном выше в первом примере.
&lt;/p&gt;
&lt;blockquote&gt;&lt;div class=&quot;no&quot;&gt;
 По моим наработкам, порядок важен, только если два и более режима имеют шаблоны, с которыми могут сравниваться одинаковые совокупности символов - в этом случае «выиграет» режим, имеющий низший порядковый номер.  Синтаксический плагин может извлечь из этого выгоду, заменяя оригинальный обработчик, в качестве примера см. плагин «&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=plugin:code&quot; class=&quot;wikilink2&quot; title=&quot;plugin:code&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;plugin:code&quot;&gt;Code&lt;/a&gt;» — &lt;em&gt; &lt;a href=&quot;mailto:&amp;#99;&amp;#104;&amp;#114;&amp;#105;&amp;#115;&amp;#64;&amp;#106;&amp;#97;&amp;#108;&amp;#97;&amp;#107;&amp;#97;&amp;#105;&amp;#46;&amp;#99;&amp;#111;&amp;#46;&amp;#117;&amp;#107;&quot; class=&quot;mail&quot; title=&quot;&amp;#99;&amp;#104;&amp;#114;&amp;#105;&amp;#115;&amp;#64;&amp;#106;&amp;#97;&amp;#108;&amp;#97;&amp;#107;&amp;#97;&amp;#105;&amp;#46;&amp;#99;&amp;#111;&amp;#46;&amp;#117;&amp;#107;&quot;&gt;ChrisS&lt;/a&gt; 2005-07-30 &lt;/em&gt;&lt;/div&gt;&lt;/blockquote&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0412\u0430\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u0436\u0438\u043c\u043e\u0432&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0432\u0430\u0436\u043d\u043e\u0441\u0442\u044c_\u043f\u043e\u0440\u044f\u0434\u043a\u0430_\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f_\u0440\u0435\u0436\u0438\u043c\u043e\u0432&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:63,&amp;quot;secid&amp;quot;:20,&amp;quot;range&amp;quot;:&amp;quot;105979-107431&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit21&quot; id=&quot;замены_блокиратора_слов&quot;&gt;Замены «блокиратора слов»&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
В оригинале функционирование «блокиратора слов» &lt;code&gt;wordblock&lt;/code&gt; заключалось в сравнении &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; ссылок с «чёрным списком». Сейчас этот режим используется для нахождения грубых слов. Для блокирования спамовых &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; лучше использовать приведённый выше пример.
&lt;/p&gt;

&lt;p&gt;
Рекомендация — файл &lt;code&gt;conf/wordblock.conf&lt;/code&gt; следует переименовать в &lt;code&gt;conf/spam.conf&lt;/code&gt;, содержащий «чёрный список» &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt;. Новый файл&lt;code&gt;conf/badwords.conf&lt;/code&gt; будет содержать список цензурируемых грубых слов.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0417\u0430\u043c\u0435\u043d\u044b \u00ab\u0431\u043b\u043e\u043a\u0438\u0440\u0430\u0442\u043e\u0440\u0430 \u0441\u043b\u043e\u0432\u00bb&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0437\u0430\u043c\u0435\u043d\u044b_\u0431\u043b\u043e\u043a\u0438\u0440\u0430\u0442\u043e\u0440\u0430_\u0441\u043b\u043e\u0432&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:63,&amp;quot;secid&amp;quot;:21,&amp;quot;range&amp;quot;:&amp;quot;107432-108258&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit22&quot; id=&quot;слабые_моменты&quot;&gt;Слабые моменты&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
С точки зрения архитектуры, наихудшие части кода находятся в файле &lt;code&gt;inc/parser/handler.php&lt;/code&gt;, преимущественно в «re-writing»-классах;
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;Doku_Handler_List&lt;/code&gt; (inline re-writer)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;Doku_Handler_Preformatted&lt;/code&gt; (inline re-writer)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;Doku_Handler_Quote&lt;/code&gt; (inline re-writer)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;Doku_Handler_Table&lt;/code&gt; (inline re-writer)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;Doku_Handler_Section&lt;/code&gt; (post processing re-writer)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;Doku_Handler_Block&lt;/code&gt; (post processing re-writer)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;Doku_Handler_Toc&lt;/code&gt; (post processing re-writer)&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
«Inline re-writers» используются, пока обработчик получает вхождения от анализатора, в то время как «post processing re-writers», вызываются из &lt;code&gt;Doku_Handler::__finalize()&lt;/code&gt; и выполняются однократно в отношении полного списка инструкций, созданных обработчиком.
&lt;/p&gt;

&lt;p&gt;
&lt;em&gt;Возможно лучше&lt;/em&gt; устранить &lt;code&gt;Doku_Handler_List&lt;/code&gt;, &lt;code&gt;Doku_Handler_Quote&lt;/code&gt; и &lt;code&gt;Doku_Handler_Table&lt;/code&gt;, использовав взамен многострочные лексические режимы.
&lt;/p&gt;

&lt;p&gt;
Также &lt;em&gt;возможно лучше&lt;/em&gt; изменить &lt;code&gt;Doku_Handler_Section&lt;/code&gt; и &lt;code&gt;Doku_Handler_Toc&lt;/code&gt; в «inline re-writers«, срабатывающие на вхождения заголовков, принимаемых Обработчиком.
&lt;/p&gt;

&lt;p&gt;
Самое «больное место» — это класс &lt;code&gt;Doku_Handler_Block&lt;/code&gt;, отвечающий за вставку абзацев в инструкции. Имеет значение добавить в него больше абстракций для облегчения разработки, но в общем-то я не вижу каких-либо путей полного его устранения.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0421\u043b\u0430\u0431\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0441\u043b\u0430\u0431\u044b\u0435_\u043c\u043e\u043c\u0435\u043d\u0442\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:63,&amp;quot;secid&amp;quot;:22,&amp;quot;range&amp;quot;:&amp;quot;108259-110205&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit23&quot; id=&quot;жадные_тэги&quot;&gt;«Жадные» тэги&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Рассмотрим следующий синтаксис вики:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;Привет, &amp;lt;sup&amp;gt;Мир! 

----

&amp;lt;sup&amp;gt;Пока,&amp;lt;/sup&amp;gt; Мир...&lt;/pre&gt;

&lt;p&gt;
Пользователь забыл закрыть первый тэг &amp;lt;sup&amp;gt;.
&lt;/p&gt;

&lt;p&gt;
В результате получится:
&lt;/p&gt;

&lt;p&gt;
Привет, &lt;sup&gt;Мир! 

—-

&amp;lt;sup&amp;gt;Пока,&lt;/sup&gt; Мир…
&lt;/p&gt;

&lt;p&gt;
Первый тэг &amp;lt;sup&amp;gt; оказался слишком «жадным» в проверке своего входного шаблона.
&lt;/p&gt;

&lt;p&gt;
Это применимо ко всем подобным режимам. Входные шаблоны проверяют наличие закрывающего тэга, но также они должны проверять, чтобы раньше не встретился второй открывающий тэг.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u00ab\u0416\u0430\u0434\u043d\u044b\u0435\u00bb \u0442\u044d\u0433\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0436\u0430\u0434\u043d\u044b\u0435_\u0442\u044d\u0433\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:63,&amp;quot;secid&amp;quot;:23,&amp;quot;range&amp;quot;:&amp;quot;110206-111058&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit24&quot; id=&quot;сноски_через_список&quot;&gt;Сноски через список&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
В сущности, если сноска закрывается через несколько элементов списка, это вызывает эффект открывающей инструкции сноски без соответствующей закрывающей. Вот пример синтаксиса, вызывающего проблему:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;  *((A))
    *(( B
  * C )) &lt;/pre&gt;

&lt;p&gt;
Это будет происходить до тех пор, пока пользователи не поправят страницу. Решение — разбить захват элементов списка в многострочные режимы (сейчас для списков есть только единственный режим &lt;code&gt;listblock&lt;/code&gt;).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0421\u043d\u043e\u0441\u043a\u0438 \u0447\u0435\u0440\u0435\u0437 \u0441\u043f\u0438\u0441\u043e\u043a&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0441\u043d\u043e\u0441\u043a\u0438_\u0447\u0435\u0440\u0435\u0437_\u0441\u043f\u0438\u0441\u043e\u043a&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:64,&amp;quot;secid&amp;quot;:24,&amp;quot;range&amp;quot;:&amp;quot;111059-111888&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit25&quot; id=&quot;захват_обёрточных_символов&quot;&gt;Захват «обёрточных» символов&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Баг № &lt;a href=&quot;doku.php?id=wiki:bug:dokuwiki:261&quot; class=&quot;interwiki iw_bug&quot; title=&quot;doku.php?id=wiki:bug:dokuwiki:261&quot;&gt;261&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
Поскольку синтаксис заголовка, горизонтальной линии, списка, таблицы, цитаты и неформатируемого (выделяемого) текста полагается на «обёрточные» символы для разметки своих начала и окончания, им требуются регулярные выражения, которые поглощают «обёрточные» символы. Это означает, что пользователь должен добавлять «обёрточные» символы, если таблица находится сразу после списка, например:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;До списка
  - Элемент списка
  - Элемент списка
| Ячейка A | Ячейка B |
| Ячейка C | Ячейка D |
После таблицы&lt;/pre&gt;

&lt;p&gt;
Выдаёт:
&lt;/p&gt;

&lt;p&gt;
До списка
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Элемент списка&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Элемент списка&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
| Ячейка A | Ячейка B |
&lt;/p&gt;
&lt;div class=&quot;table sectionedit26&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Ячейка C &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Ячейка D &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;secid&amp;quot;:26,&amp;quot;range&amp;quot;:&amp;quot;113030-113065&amp;quot;} --&gt;
&lt;p&gt;
После таблицы
&lt;/p&gt;

&lt;p&gt;
Заметьте, что &lt;strong&gt;первая строка&lt;/strong&gt; таблицы воспринимается как обычный текст.
&lt;/p&gt;

&lt;p&gt;
Чтобы скорректировать это, синтаксис вики должен иметь дополнительную «обёртку» между списком и таблицей:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;До списка
  - Элемент списка
  - Элемент списка

| Ячейка A | Ячейка B |
| Ячейка C | Ячейка D |
После таблицы&lt;/pre&gt;

&lt;p&gt;
Что будет выглядеть следующим образом:
&lt;/p&gt;

&lt;p&gt;
До списка
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Элемент списка&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Элемент списка&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;table sectionedit27&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Ячейка A &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Ячейка B &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Ячейка C &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Ячейка D &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table1&amp;quot;,&amp;quot;secid&amp;quot;:27,&amp;quot;range&amp;quot;:&amp;quot;113778-113849&amp;quot;} --&gt;
&lt;p&gt;
После таблицы
&lt;/p&gt;

&lt;p&gt;
Без сканирования текста множества раз (некая разновидность «предварительных» операций, которые вставляют «обёртку»), едва ли можно найти простое решение.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0417\u0430\u0445\u0432\u0430\u0442 \u00ab\u043e\u0431\u0451\u0440\u0442\u043e\u0447\u043d\u044b\u0445\u00bb \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0437\u0430\u0445\u0432\u0430\u0442_\u043e\u0431\u0451\u0440\u0442\u043e\u0447\u043d\u044b\u0445_\u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:65,&amp;quot;secid&amp;quot;:25,&amp;quot;range&amp;quot;:&amp;quot;111889-114162&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit28&quot; id=&quot;проблемы_списков_таблиц_и_цитат&quot;&gt;Проблемы списков, таблиц и цитат&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Для синтаксиса списков, таблиц и цитат есть вероятность, что использование внутри их другого синтаксиса «съест» несколько  строк. Например, таблица вроде:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;| Cell A | &amp;lt;sup&amp;gt;Cell B |
| Cell C | Cell D&amp;lt;/sup&amp;gt; |
| Cell E | Cell F |&lt;/pre&gt;

&lt;p&gt;
выдаёт:
&lt;/p&gt;
&lt;div class=&quot;table sectionedit29&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Cell A &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; &lt;sup&gt;Cell B |
| Cell C | Cell D&lt;/sup&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Cell E &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Cell F &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table2&amp;quot;,&amp;quot;secid&amp;quot;:29,&amp;quot;range&amp;quot;:&amp;quot;114621-114691&amp;quot;} --&gt;
&lt;p&gt;
В идеале должно быть преобразовано так:
&lt;/p&gt;
&lt;div class=&quot;table sectionedit30&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Cell A &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; &amp;lt;sup&amp;gt;Cell B &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Cell C &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Cell D&amp;lt;/sup&amp;gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Cell E &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Cell F &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table3&amp;quot;,&amp;quot;secid&amp;quot;:30,&amp;quot;range&amp;quot;:&amp;quot;114767-114845&amp;quot;} --&gt;
&lt;p&gt;
Т. е. открывающий тэг &lt;code&gt;&amp;lt;sup&amp;gt;&lt;/code&gt; должен игнорироваться, если в текущей ячейке отсутствует закрывающий тэг.
&lt;/p&gt;

&lt;p&gt;
Для устранения этого требуется поддержка многострочного режима внутри таблиц, списков и цитат.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441\u043f\u0438\u0441\u043a\u043e\u0432, \u0442\u0430\u0431\u043b\u0438\u0446 \u0438 \u0446\u0438\u0442\u0430\u0442&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b_\u0441\u043f\u0438\u0441\u043a\u043e\u0432_\u0442\u0430\u0431\u043b\u0438\u0446_\u0438_\u0446\u0438\u0442\u0430\u0442&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:67,&amp;quot;secid&amp;quot;:28,&amp;quot;range&amp;quot;:&amp;quot;114163-115213&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit31&quot; id=&quot;сноски_и_блоки&quot;&gt;Сноски и блоки&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Внутри сносок блоки игнорируются, вместо этого используется эквивалент инструкции &lt;code&gt;&amp;lt;br/&amp;gt;&lt;/code&gt;. Это связано с неудобным в разработке классом &lt;code&gt;Doku_Handler_Block&lt;/code&gt;. Если внутри сноски используются таблица, список, цитата или горизонтальная линия, это &lt;em&gt;сработает&lt;/em&gt; как абзац.
&lt;/p&gt;

&lt;p&gt;
Устраняется модификацией класса &lt;code&gt;Doku_Handler_Block&lt;/code&gt;, однако рекомендуется предварительно тщательно ознакомиться с его устройством.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0421\u043d\u043e\u0441\u043a\u0438 \u0438 \u0431\u043b\u043e\u043a\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0441\u043d\u043e\u0441\u043a\u0438_\u0438_\u0431\u043b\u043e\u043a\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:68,&amp;quot;secid&amp;quot;:31,&amp;quot;range&amp;quot;:&amp;quot;115214-115961&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit32&quot; id=&quot;заголовки&quot;&gt;Заголовки&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Текущие заголовки могут находиться на той же строке, что и предшествующий текст. Это вытекает из эффекта, рассмотренного выше в вопросе «Захват строк», и требует некоторой предварительной обработки для устранения. Например:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;До заголовка есть
Некоторый текст == Заголовок ==
После заголовка&lt;/pre&gt;

&lt;p&gt;
Если бы поведение было бы таким же, как в оригинальном парсере «Докувики», преобразование было бы таким:
&lt;/p&gt;

&lt;p&gt;
До заголовка есть
Некоторый текст == Заголовок ==
После заголовка
&lt;/p&gt;

&lt;p&gt;
Но в результате будет:
&lt;/p&gt;

&lt;p&gt;
До заголовка есть
Некоторый текст
&lt;/p&gt;

&lt;/div&gt;

&lt;h5 id=&quot;заголовок&quot;&gt;Заголовок&lt;/h5&gt;
&lt;div class=&quot;level5&quot;&gt;

&lt;p&gt;
После заголовка
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:68,&amp;quot;secid&amp;quot;:32,&amp;quot;range&amp;quot;:&amp;quot;115962-117014&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit33&quot; id=&quot;конфликт_блоков_и_списков&quot;&gt;Конфликт блоков и списков&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Существует проблема: если до списка находится пустая строка с двумя пробелами, всё это вместе будет интерпретироваться как блок:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;* list item
* list item 2&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041a\u043e\u043d\u0444\u043b\u0438\u043a\u0442 \u0431\u043b\u043e\u043a\u043e\u0432 \u0438 \u0441\u043f\u0438\u0441\u043a\u043e\u0432&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442_\u0431\u043b\u043e\u043a\u043e\u0432_\u0438_\u0441\u043f\u0438\u0441\u043a\u043e\u0432&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:69,&amp;quot;secid&amp;quot;:33,&amp;quot;range&amp;quot;:&amp;quot;117015-117344&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit34&quot; id=&quot;что_ещё_необходимо_сделать&quot;&gt;Что ещё необходимо сделать&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Вот некоторые вопросы, которые ещё предстоит решить…
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0427\u0442\u043e \u0435\u0449\u0451 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0447\u0442\u043e_\u0435\u0449\u0451_\u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e_\u0441\u0434\u0435\u043b\u0430\u0442\u044c&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:69,&amp;quot;secid&amp;quot;:34,&amp;quot;range&amp;quot;:&amp;quot;117345-117507&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit35&quot; id=&quot;больше_состояний_для_закрывающих_инструкций&quot;&gt;Больше состояний для закрывающих инструкций&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Для преобразования в иные форматы, нежели XHTML, может оказаться полезным добавление отождествления уровня для закрывающих инструкций списка, и т. д.
&lt;/p&gt;
&lt;blockquote&gt;&lt;div class=&quot;no&quot;&gt;
 Почему бы просто не «преобразовать» в XML и затем применить к нему некоторые парсеры XSLT/XML?&lt;/div&gt;&lt;/blockquote&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0411\u043e\u043b\u044c\u0448\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0434\u043b\u044f \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0431\u043e\u043b\u044c\u0448\u0435_\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439_\u0434\u043b\u044f_\u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u0445_\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:69,&amp;quot;secid&amp;quot;:35,&amp;quot;range&amp;quot;:&amp;quot;117508-118038&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit36&quot; id=&quot;подрежимы_для_таблиц_списков_цитат&quot;&gt;Подрежимы для таблиц, списков, цитат&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Анализатор с множественными режимами для предотвращения случаев вложенности состояний друг в друга.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u043e\u0434\u0440\u0435\u0436\u0438\u043c\u044b \u0434\u043b\u044f \u0442\u0430\u0431\u043b\u0438\u0446, \u0441\u043f\u0438\u0441\u043a\u043e\u0432, \u0446\u0438\u0442\u0430\u0442&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u043e\u0434\u0440\u0435\u0436\u0438\u043c\u044b_\u0434\u043b\u044f_\u0442\u0430\u0431\u043b\u0438\u0446_\u0441\u043f\u0438\u0441\u043a\u043e\u0432_\u0446\u0438\u0442\u0430\u0442&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:69,&amp;quot;secid&amp;quot;:36,&amp;quot;range&amp;quot;:&amp;quot;118039-118304&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit37&quot; id=&quot;обсуждение&quot;&gt;Обсуждение&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Спасибо за перевод! &lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/images/smileys/sm_2.png&quot; class=&quot;icon smiley&quot; alt=&quot;:-)&quot; /&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0435&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0435&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:69,&amp;quot;secid&amp;quot;:37,&amp;quot;range&amp;quot;:&amp;quot;118305-&amp;quot;} --&gt;&lt;div class=&quot;footnotes&quot;&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__1&quot; id=&quot;fn__1&quot; class=&quot;fn_bot&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;&lt;em class=&quot;u&quot;&gt;L&lt;/em&gt;exer относится к классу &lt;code&gt;Doku_Lexer&lt;/code&gt; и содержится в файле &lt;code&gt;inc/parser/lexer.php&lt;/code&gt;.&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__2&quot; id=&quot;fn__2&quot; class=&quot;fn_bot&quot;&gt;2)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;Сканирование — чтение строки PHP от начала до конца.&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__3&quot; id=&quot;fn__3&quot; class=&quot;fn_bot&quot;&gt;3)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;Термин «токен» в этом документе относится к совпадению регулярного выраждения, полученного лексическим анализатором, и соответствующему вызову метода обработчиком.&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__4&quot; id=&quot;fn__4&quot; class=&quot;fn_bot&quot;&gt;4)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;&lt;em class=&quot;u&quot;&gt;H&lt;/em&gt;andler относится к классу &lt;code&gt;Doku_Handler&lt;/code&gt; и содержится в файле &lt;code&gt;inc/parser/handler.php&lt;/code&gt;.&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__5&quot; id=&quot;fn__5&quot; class=&quot;fn_bot&quot;&gt;5)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;Последовательность инструкций содержится в массиве &lt;code&gt;$calls&lt;/code&gt;, который является атрибутом обработчика. Предназначен для использования с &lt;a href=&quot;https://secure.php.net/call_user_func_array&quot; class=&quot;interwiki iw_phpfn&quot; title=&quot;https://secure.php.net/call_user_func_array&quot;&gt;call_user_func_array&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__6&quot; id=&quot;fn__6&quot; class=&quot;fn_bot&quot;&gt;6)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;&lt;em class=&quot;u&quot;&gt;P&lt;/em&gt;arser относится к классу &lt;code&gt;Doku_Parser&lt;/code&gt; и содержится в файле &lt;code&gt;inc/parser/parser.php&lt;/code&gt;.&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__7&quot; id=&quot;fn__7&quot; class=&quot;fn_bot&quot;&gt;7)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;&lt;em class=&quot;u&quot;&gt;R&lt;/em&gt;enderer (&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/images/smileys/exclaim.svg&quot; class=&quot;icon smiley&quot; alt=&quot;:!:&quot; /&gt; от «to render» &lt;em&gt;в значении&lt;/em&gt; превращать, преобразовывать) относится к абстрактному (implemented) классу &lt;code&gt;Doku_Renderer&lt;/code&gt; - см. &lt;code&gt;inc/parser/renderer.php&lt;/code&gt; и &lt;code&gt;inc/parser/xhtml.php&lt;/code&gt;.&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__8&quot; id=&quot;fn__8&quot; class=&quot;fn_bot&quot;&gt;8)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;Прим. переводчика: возможно, речь идёт о т.н. &lt;strong&gt;незахватывающем поиске&lt;/strong&gt;, подробнее см. литературу по регулярным выражениям, например, Джеффри Фридла «Регулярные выражения: библиотека программиста. Второе издание.» — СПб.: Питер, 2003, или документацию по PHP — &lt;a href=&quot;http://ru.php.net/manual/en/ref.pcre.php&quot; class=&quot;urlextern&quot; title=&quot;http://ru.php.net/manual/en/ref.pcre.php&quot; rel=&quot;ugc nofollow&quot;&gt;ru.php.net/manual/en/ref.pcre.php&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__9&quot; id=&quot;fn__9&quot; class=&quot;fn_bot&quot;&gt;9)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;Термины «состояние» и «режим» используются отчасти как взаимозаменяемые, когда здесь говориться об анализаторе&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__10&quot; id=&quot;fn__10&quot; class=&quot;fn_bot&quot;&gt;10)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;Смысл «плохо форматируемый» не применим к парсеру «Докувики» — он разработан так, чтобы предотвращать случаи, когда пользователь забывает добавить закрывающий тэг некоторой разметки, полностью игнорируя эту разметку.&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Fri, 17 Jan 2025 10:53:47 +0000</pubDate>
        </item>
        <item>
            <title>plugin_development_link</title>
            <link>https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:plugin_development_link&amp;rev=1740110007</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;пример_разработки_плагина_ссылки&quot;&gt;Пример разработки плагина ссылки&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Суть нашего плагина будет во вставке часто используемых шаблонов описания ссылок, например: &lt;em&gt;Ссылка на оригинальную статью&lt;/em&gt;, &lt;em&gt;См. также&lt;/em&gt; и &lt;em&gt;Читать далее…&lt;/em&gt;.
Статья затронет добавление кнопки нашего плагина на панель инструментов редактора (toolbar), описание процесса разработки и закончим переводом нашего плагина на другие языки.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u0440\u0438\u043c\u0435\u0440 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0441\u0441\u044b\u043b\u043a\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u0440\u0438\u043c\u0435\u0440_\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438_\u043f\u043b\u0430\u0433\u0438\u043d\u0430_\u0441\u0441\u044b\u043b\u043a\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-679&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;подготовка_папок_и_файлов&quot;&gt;Подготовка папок и файлов&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
В папке lib/plugins создадим папку нашего плагина (например link или mylink). Я использую название mylink, т.к. более простые могут быть заняты.
В нашей папке создадим файлы:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; plugin.info.txt&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; README.md&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; script.js&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
и папку:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; images&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;a href=&quot;https://wwoss.direct.quickconnect.to/lib/exe/detail.php?id=wiki%3Adevel%3Aplugin_development_link&amp;amp;media=wiki:devel:devev_plugin_mylink_1.jpg&quot; class=&quot;media&quot; title=&quot;wiki:devel:devev_plugin_mylink_1.jpg&quot;&gt;&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/exe/fetch.php?media=wiki:devel:devev_plugin_mylink_1.jpg&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043f\u0430\u043f\u043e\u043a \u0438 \u0444\u0430\u0439\u043b\u043e\u0432&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430_\u043f\u0430\u043f\u043e\u043a_\u0438_\u0444\u0430\u0439\u043b\u043e\u0432&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;680-1144&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;файл_plugininfotxt&quot;&gt;Файл plugin.info.txt&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Каждый плагин должен предоставить некоторую базовую информацию о себе. Это делается через файл с именем, &lt;code&gt;plugin.info.txt&lt;/code&gt; расположенный в каталоге плагина .
&lt;/p&gt;

&lt;p&gt;
Вот пример того, как должен выглядеть такой файл.
&lt;/p&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=wiki:devel:plugin_development_link&amp;amp;codeblock=0&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_txt&quot;&gt;plugin.info.txt&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code txt&quot;&gt;base   mylink 
author VladPolskiy 
email  polskiyvn@gmail.com 
date   2025-01-09 
name   mylink syntax plugin 
desc   Inserts frequently used link descriptions into Dokuwiki. 
url    https://www.dokuwiki.org/plugin:mylink &lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;
&lt;div class=&quot;table sectionedit4&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;thead&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Параметр &lt;/th&gt;&lt;th class=&quot;col1&quot;&gt; Описание &lt;/th&gt;
	&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; base      &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Техническое имя плагина.  &lt;strong&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:plugin:extension&quot; class=&quot;wikilink1&quot; title=&quot;wiki:plugin:extension&quot; data-wiki-id=&quot;wiki:plugin:extension&quot;&gt;Менеджер расширений&lt;/a&gt; установит его в этот каталог.&lt;/strong&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; author    &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Полное имя автора плагина &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; email     &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Электронная почта для связи с автором плагина по поводу этого плагина &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; date      &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Дата последнего обновления этого плагина в формате ГГГГ-ММ-ДД. Не забудьте обновить это, когда будете обновлять свой плагин! &lt;sup&gt;&lt;a href=&quot;#fn__8&quot; id=&quot;fnt__8&quot; class=&quot;fn_top&quot;&gt;8)&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; name      &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Удобочитаемое имя плагина &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row6&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; desc      &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Описание того, что делает плагин &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row7&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; url       &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt;-адрес , по которому можно получить более подробную информацию о плагине &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row8&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; minphp    &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Минимальная версия PHP, требуемая для этого плагина. Пусто для того же, что и DokuWiki. Только &lt;code&gt;Major.Minor&lt;/code&gt; версия, например 8.2, не 8.2.3 может быть указана! &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row9&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; maxphp    &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Максимальная версия PHP, поддерживаемая этим плагином. Пусто для того же, что и DokuWiki. Только &lt;code&gt;Major.Minor&lt;/code&gt; версия, например 8.2, не 8.2.3может быть указана! &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;1806-3716&amp;quot;} --&gt;
&lt;p&gt;
&lt;strong&gt;Примечание:&lt;/strong&gt; &lt;code&gt;plugin.info.txt&lt;/code&gt; заменяет старый вызов &lt;code&gt;getInfo()&lt;/code&gt; в ваших компонентах плагина для DokuWiki 2009-12-25 «Lemming» и более поздних версий. getInfo() теперь реализован в базовом классе и будет считывать всю информацию из этого файла. Его больше не нужно реализовывать в ваших подклассах.
&lt;a href=&quot;https://wwoss.direct.quickconnect.to/lib/exe/detail.php?id=wiki%3Adevel%3Aplugin_development_link&amp;amp;media=wiki:devel:devev_plugin_mylink_2.jpg&quot; class=&quot;media&quot; title=&quot;wiki:devel:devev_plugin_mylink_2.jpg&quot;&gt;&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/exe/fetch.php?media=wiki:devel:devev_plugin_mylink_2.jpg&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0424\u0430\u0439\u043b plugin.info.txt&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0444\u0430\u0439\u043b_plugininfotxt&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;1145-4258&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;файл_readmemd&quot;&gt;Файл README.md&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
README.md служит первым документом для пользователей и разработчиков, которые хотят понять назначение, настройку и использование проекта.
&lt;/p&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=wiki:devel:plugin_development_link&amp;amp;codeblock=1&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_md&quot;&gt;README.md&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code txt&quot;&gt;# плагин моих ссылок
&amp;nbsp;
Это плагин для [dokuwiki](https://www.dokuwiki.org/start)..
&amp;nbsp;
См. [домашнюю страницу](https://www.dokuwiki.org/plugin:mylink) для получения подробной документации. Здесь мы приводим краткое описание требуемого синтаксиса:
&amp;nbsp;
```
{magnifier-lefticon}См. так-же [[:example|]]
{blue-document--arrowicon}[[http://example.com| Ссылка на оригинальную статью]]
```
&amp;nbsp;
- Квадратные скобки обозначают ссылку.&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0424\u0430\u0439\u043b README.md&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0444\u0430\u0439\u043b_readmemd&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;4259-5177&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit6&quot; id=&quot;файл_scriptjs&quot;&gt;Файл script.js&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
JavaScript файл с рабочим кодом нашего  плагина (подключения кнопки и вывод описания нашей ссылки в тело редактируемой страницы.
Поскольку пользовательские и плагинные скрипты загружаться при всех запросах, а панель инструментов инициализируется только при редактировании, нам нужно сначала убедиться, что массив панелей инструментов существует. Проверим это, window.toolbar определен ли он. Если определен, вы можете добавить свою кнопку в конец массива.
&lt;/p&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=wiki:devel:plugin_development_link&amp;amp;codeblock=2&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_js&quot;&gt;script.js&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code js&quot;&gt;/* JavaScript function to create mylink toolbar in Dokuwiki */
/* see http://www.dokuwiki.org/plugin:mylink for more info */
&amp;nbsp;
/* Путь к папке с иконками для кнопок панели */
mylink_icobase = &amp;quot;../../plugins/mylink/images/&amp;quot;;
&amp;nbsp;
if(window.toolbar != undefined) {       
  toolbar[toolbar.length] = {           
    &amp;quot;type&amp;quot;:&amp;quot;picker&amp;quot;,                    
    &amp;quot;title&amp;quot;:&amp;quot;My links&amp;quot;,                 
    &amp;quot;icon&amp;quot;:mylink_icobase+&amp;quot;toolbar_icon.png&amp;quot;,  
    &amp;quot;list&amp;quot;:[{ 
      &amp;quot;type&amp;quot;:&amp;quot;format&amp;quot;, 
      &amp;quot;title&amp;quot;:&amp;quot;Link to the original article&amp;quot;, 
      &amp;quot;icon&amp;quot;:mylink_icobase+&amp;quot;blog.png&amp;quot;,  
      &amp;quot;open&amp;quot;:&amp;quot;[[&amp;quot;,
	  &amp;quot;sample&amp;quot;:&amp;quot;http://example.com|Link to the original article&amp;quot;,
      &amp;quot;close&amp;quot;:&amp;quot;]]&amp;quot;
    }, {
      &amp;quot;type&amp;quot;:&amp;quot;format&amp;quot;, 
      &amp;quot;title&amp;quot;:&amp;quot;See also&amp;quot;,   
      &amp;quot;icon&amp;quot;:mylink_icobase+&amp;quot;magnifier-medium-left.png&amp;quot;, 
      &amp;quot;open&amp;quot;:&amp;quot;See also: [[&amp;quot;,   
	  &amp;quot;sample&amp;quot;:&amp;quot;http://example.com|&amp;quot;,
	  &amp;quot;close&amp;quot;:&amp;quot;]]&amp;quot;         
    }
	]
  };
}&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;
&lt;details&gt;&lt;summary&gt;«Подробности и пояснения»&lt;/summary&gt;&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=wiki:devel:plugin_development_link&amp;amp;codeblock=3&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_js&quot;&gt;script.js&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code css&quot;&gt;&lt;span class=&quot;coMULTI&quot;&gt;/* JavaScript function to create mylink toolbar in Dokuwiki */&lt;/span&gt;
&lt;span class=&quot;coMULTI&quot;&gt;/* see http://www.dokuwiki.org/plugin:mylink for more info */&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;coMULTI&quot;&gt;/* Путь к папке с иконками для кнопок панели */&lt;/span&gt;
mylink_icobase &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;../../plugins/mylink/images/&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
if&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;window&lt;span class=&quot;re1&quot;&gt;.toolbar&lt;/span&gt; !&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; undefined&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;       // Проверка наличия массива панели инструментов
  toolbar&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;toolbar.length&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;           // Кнопка верхнего уровня панели инструментов
    &lt;span class=&quot;st0&quot;&gt;&amp;quot;type&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;picker&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;                    // тип действия кнопки&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; picker⇒ меню выбора
    &lt;span class=&quot;st0&quot;&gt;&amp;quot;title&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;My links&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;                 // название кнопки&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; отображаемое при наведении курсора
    &lt;span class=&quot;st0&quot;&gt;&amp;quot;icon&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;mylink_icobase&lt;span class=&quot;sy0&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;toolbar_icon.png&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;  //значок&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; используемый для кнопки
    &lt;span class=&quot;st0&quot;&gt;&amp;quot;list&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; //список выпадающего меню кнопок
      &lt;span class=&quot;st0&quot;&gt;&amp;quot;type&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;format&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; // &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;я кнопка в выпадающем окне. тип действия кнопки&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; format⇒ вики-разметка
      &lt;span class=&quot;st0&quot;&gt;&amp;quot;title&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Link to the original article&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; // название кнопки&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; отображаемое при наведении курсора
      &lt;span class=&quot;st0&quot;&gt;&amp;quot;icon&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;mylink_icobase&lt;span class=&quot;sy0&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;blog.png&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;  //путь к иконке&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; используемой для кнопки
      &lt;span class=&quot;st0&quot;&gt;&amp;quot;open&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;[[&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
	  &lt;span class=&quot;st0&quot;&gt;&amp;quot;sample&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;http://example.com|Link to the original article&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;st0&quot;&gt;&amp;quot;close&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;]]&amp;quot;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
      &lt;span class=&quot;st0&quot;&gt;&amp;quot;type&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;format&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; // &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;я кнопка в выпадающем окне. тип действия кнопки&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; format⇒ вики-разметка
      &lt;span class=&quot;st0&quot;&gt;&amp;quot;title&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;See also&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;   // название кнопки&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; отображаемое при наведении курсора
      &lt;span class=&quot;st0&quot;&gt;&amp;quot;icon&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;mylink_icobase&lt;span class=&quot;sy0&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;magnifier-medium-left.png&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; //путь к иконке&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; используемой для кнопки
      &lt;span class=&quot;st0&quot;&gt;&amp;quot;open&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;See also: [[&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;   //открывающий тег вики-разметки для вставки
	  &lt;span class=&quot;st0&quot;&gt;&amp;quot;sample&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;http://example.com|&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
	  &lt;span class=&quot;st0&quot;&gt;&amp;quot;close&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;]]&amp;quot;&lt;/span&gt;         //закрывающий тег вики-разметки для вставки
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
	&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;
&lt;/details&gt;&lt;pre class=&quot;code css&quot;&gt;в данном случае наш код
          &lt;span class=&quot;st0&quot;&gt;&amp;quot;open&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;See also: [[&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;   //открывающий тег вики-разметки для вставки
	  &lt;span class=&quot;st0&quot;&gt;&amp;quot;sample&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;http://example.com|&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
	  &lt;span class=&quot;st0&quot;&gt;&amp;quot;close&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;]]&amp;quot;&lt;/span&gt;             //закрывающий тег вики-разметки для вставки
представляют собою разрезанный код для вывода&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;
See also&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;   http&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;//example.com|    &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
После редактирования и сохранения с нашим кодом файла script.js, переходим в редактор страниц и видим нашу новую кнопку на панели инструментовЖ
&lt;a href=&quot;https://wwoss.direct.quickconnect.to/lib/exe/detail.php?id=wiki%3Adevel%3Aplugin_development_link&amp;amp;media=wiki:devel:devev_plugin_mylink_10.jpg&quot; class=&quot;media&quot; title=&quot;wiki:devel:devev_plugin_mylink_10.jpg&quot;&gt;&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/exe/fetch.php?media=wiki:devel:devev_plugin_mylink_10.jpg&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
При нажатии на кнопку проверяем открытие выпадающего списка кнопок и работу кода по выводу нашего текста:
&lt;a href=&quot;https://wwoss.direct.quickconnect.to/lib/exe/detail.php?id=wiki%3Adevel%3Aplugin_development_link&amp;amp;media=wiki:devel:devev_plugin_mylink_11.jpg&quot; class=&quot;media&quot; title=&quot;wiki:devel:devev_plugin_mylink_11.jpg&quot;&gt;&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/exe/fetch.php?media=wiki:devel:devev_plugin_mylink_11.jpg&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
Проверяем вторую кнопку:
&lt;a href=&quot;https://wwoss.direct.quickconnect.to/lib/exe/detail.php?id=wiki%3Adevel%3Aplugin_development_link&amp;amp;media=wiki:devel:devev_plugin_mylink_12.jpg&quot; class=&quot;media&quot; title=&quot;wiki:devel:devev_plugin_mylink_12.jpg&quot;&gt;&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/exe/fetch.php?media=wiki:devel:devev_plugin_mylink_12.jpg&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
Мы видим код, который мы разрезали на части в файле script.js
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;See also: [[http://example.com|]]&lt;/pre&gt;

&lt;p&gt;
Пример вывода на странице нашего кода:
&lt;a href=&quot;https://wwoss.direct.quickconnect.to/lib/exe/detail.php?id=wiki%3Adevel%3Aplugin_development_link&amp;amp;media=wiki:devel:devev_plugin_mylink_13.jpg&quot; class=&quot;media&quot; title=&quot;wiki:devel:devev_plugin_mylink_13.jpg&quot;&gt;&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/exe/fetch.php?media=wiki:devel:devev_plugin_mylink_13.jpg&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
Ниже вы видите, как это отображается на этой странице, что говорит о том, что наш код работаетю
&lt;a href=&quot;http://example.com&quot; class=&quot;urlextern&quot; title=&quot;http://example.com&quot; rel=&quot;ugc nofollow&quot;&gt;Link to the original article&lt;/a&gt;&lt;br/&gt;

See also: &lt;a href=&quot;http://example.com&quot; class=&quot;urlextern&quot; title=&quot;http://example.com&quot; rel=&quot;ugc nofollow&quot;&gt;http://example.com&lt;/a&gt;&lt;br/&gt;

Регистрация в программе нашего плагина прошла автоматически,т.к. мы создавали наш проект в папке lib/plugins. При этом мы можем заорхивировать наш проект и установить через менеджер плагинов.&lt;br/&gt;

Просмотрим информацию о плагине в менеджере плагинов:
&lt;a href=&quot;https://wwoss.direct.quickconnect.to/lib/exe/detail.php?id=wiki%3Adevel%3Aplugin_development_link&amp;amp;media=wiki:devel:devev_plugin_mylink_9.jpg&quot; class=&quot;media&quot; title=&quot;wiki:devel:devev_plugin_mylink_9.jpg&quot;&gt;&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/exe/fetch.php?media=wiki:devel:devev_plugin_mylink_9.jpg&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
Если мы удалим наш проект из lib/plugins и заархивируем нашу папку в формате .zip, то сможем произвести установку плагина через менеджер управления дополнениями:
&lt;a href=&quot;https://wwoss.direct.quickconnect.to/lib/exe/detail.php?id=wiki%3Adevel%3Aplugin_development_link&amp;amp;media=wiki:devel:devev_plugin_mylink_8.jpg&quot; class=&quot;media&quot; title=&quot;wiki:devel:devev_plugin_mylink_8.jpg&quot;&gt;&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/exe/fetch.php?media=wiki:devel:devev_plugin_mylink_8.jpg&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0424\u0430\u0439\u043b script.js&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0444\u0430\u0439\u043b_scriptjs&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;5178-11675&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit7&quot; id=&quot;перевод_плагина_на_разные_языки&quot;&gt;Перевод плагина на разные языки&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Заходим в папку нашего проекта и создадим внутри папку lang
&lt;a href=&quot;https://wwoss.direct.quickconnect.to/lib/exe/detail.php?id=wiki%3Adevel%3Aplugin_development_link&amp;amp;media=wiki:devel:devev_plugin_mylink_25.jpg&quot; class=&quot;media&quot; title=&quot;wiki:devel:devev_plugin_mylink_25.jpg&quot;&gt;&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/exe/fetch.php?media=wiki:devel:devev_plugin_mylink_25.jpg&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
Внутри создадим папки с необходимыми нам языковыми пакетами (в нашем примере это папки: en - англиский и ru - русский)).
&lt;a href=&quot;https://wwoss.direct.quickconnect.to/lib/exe/detail.php?id=wiki%3Adevel%3Aplugin_development_link&amp;amp;media=wiki:devel:devev_plugin_mylink_26.jpg&quot; class=&quot;media&quot; title=&quot;wiki:devel:devev_plugin_mylink_26.jpg&quot;&gt;&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/exe/fetch.php?media=wiki:devel:devev_plugin_mylink_26.jpg&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
В каждой из папок создадим файл перевода lang.php
&lt;a href=&quot;https://wwoss.direct.quickconnect.to/lib/exe/detail.php?id=wiki%3Adevel%3Aplugin_development_link&amp;amp;media=wiki:devel:devev_plugin_mylink_27.jpg&quot; class=&quot;media&quot; title=&quot;wiki:devel:devev_plugin_mylink_27.jpg&quot;&gt;&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/exe/fetch.php?media=wiki:devel:devev_plugin_mylink_27.jpg&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
Примерное содержание файлов lang.php для русского и английского переводов:
&lt;/p&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=wiki:devel:plugin_development_link&amp;amp;codeblock=6&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_php&quot;&gt;lang.php&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code html4strict&quot;&gt;&lt;span class=&quot;sc2&quot;&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class=&quot;sc2&quot;&gt;&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;**&lt;/span&gt;
&lt;span class=&quot;sc2&quot;&gt; * English &lt;span class=&quot;kw3&quot;&gt;language&lt;/span&gt; file&lt;/span&gt;
&lt;span class=&quot;sc2&quot;&gt; *&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;sc2&quot;&gt;$lang&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;js&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;mylink_picker&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;  &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;My links&#039;&lt;/span&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;sc2&quot;&gt;$lang&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;js&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;tb_see_also&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;      &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;See also&#039;&lt;/span&gt;;&lt;/span&gt;
&lt;span class=&quot;sc2&quot;&gt;$lang&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;js&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;tb_link_to_the_original&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;       &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;Link to the original article&#039;&lt;/span&gt;;&lt;/span&gt;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=wiki:devel:plugin_development_link&amp;amp;codeblock=7&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_php&quot;&gt;lang.php&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class=&quot;co4&quot;&gt;/**
 * Russian language file
 */&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;re0&quot;&gt;$lang&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;js&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;mylink_picker&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;  &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;Мои ссылки&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;re0&quot;&gt;$lang&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;js&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;tb_see_also&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;      &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;См. также&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$lang&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;js&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;tb_link_to_the_original&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;       &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;Ссылка на оригинальную статью&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;
&lt;div class=&#039;plugin_tablelayout_placeholder&#039; data-tablelayout=&quot;{&amp;quot;rowsHeaderSource&amp;quot;:&amp;quot;Auto&amp;quot;}&quot;&gt;&lt;/div&gt;&lt;div class=&quot;table sectionedit8&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;thead&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Атрибут                                      &lt;/th&gt;&lt;th class=&quot;col1 leftalign&quot;&gt; Значение                           &lt;/th&gt;
	&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; $lang[&amp;#039;js&amp;#039;][&amp;#039;mylink_picker&amp;#039;]  = &amp;#039;My links&amp;#039;;  &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; &lt;strong&gt;mylink_picker&lt;/strong&gt; - имя вехней кнопки, &lt;strong&gt;My links&lt;/strong&gt; - название (при наведении мыши) на английском и  &lt;strong&gt;Мои ссылки&lt;/strong&gt; - название на русском языке. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;$lang[&amp;#039;js&amp;#039;][&amp;#039;tb_see_also&amp;#039;]      = &amp;#039;See also&amp;#039;; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;тоже самое для 1й кнопки в раскравающемся списке&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;$lang[&amp;#039;js&amp;#039;][&amp;#039;tb_link_to_the_original&amp;#039;]       = &amp;#039;Link to the original article&amp;#039;; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;тоже самое для 2й кнопки в раскравающемся списке&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table1&amp;quot;,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;12974-13662&amp;quot;} --&gt;
&lt;p&gt;
Вносим правки в наш файл script.js
&lt;/p&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=wiki:devel:plugin_development_link&amp;amp;codeblock=8&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_js&quot;&gt;script.js&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code js&quot;&gt;/* JavaScript function to create mylink toolbar in Dokuwiki */
/* see http://www.dokuwiki.org/plugin:mylink for more info */
&amp;nbsp;
mylink_icobase = &amp;quot;../../plugins/mylink/images/&amp;quot;;
&amp;nbsp;
if(window.toolbar != undefined) {
  toolbar[toolbar.length] = {
    &amp;quot;type&amp;quot;:&amp;quot;picker&amp;quot;,
    &amp;quot;title&amp;quot;:LANG[&#039;plugins&#039;][&#039;mylink&#039;][&#039;mylink_picker&#039;],
    &amp;quot;icon&amp;quot;:mylink_icobase+&amp;quot;toolbar_icon.png&amp;quot;,
    &amp;quot;list&amp;quot;:[{
      &amp;quot;type&amp;quot;:&amp;quot;format&amp;quot;,
      &amp;quot;title&amp;quot;:LANG[&#039;plugins&#039;][&#039;mylink&#039;][&#039;tb_link_to_the_original&#039;],
      &amp;quot;icon&amp;quot;:mylink_icobase+&amp;quot;blog.png&amp;quot;,
      &amp;quot;open&amp;quot;:&amp;quot;[[http://example.com|&amp;quot;,
	  &amp;quot;sample&amp;quot;:LANG[&#039;plugins&#039;][&#039;mylink&#039;][&#039;tb_link_to_the_original&#039;],
      &amp;quot;close&amp;quot;:&amp;quot;]]&amp;quot;
    }, 	{
      &amp;quot;type&amp;quot;:&amp;quot;format&amp;quot;,
      &amp;quot;title&amp;quot;:LANG[&#039;plugins&#039;][&#039;mylink&#039;][&#039;tb_see_also&#039;],
      &amp;quot;icon&amp;quot;:mylink_icobase+&amp;quot;magnifier-medium-left.png&amp;quot;,
      &amp;quot;open&amp;quot;:LANG[&#039;plugins&#039;][&#039;mylink&#039;][&#039;tb_see_also&#039;],
	  &amp;quot;sample&amp;quot;:&amp;quot;:[[http://example.com|&amp;quot;,
	  &amp;quot;close&amp;quot;:&amp;quot;]]&amp;quot;
    },
	]
  };
}&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;p&gt;
Переведем Dokuwiki в английский язык и проверим работу нашего плагина при английской локализации:
&lt;a href=&quot;https://wwoss.direct.quickconnect.to/lib/exe/detail.php?id=wiki%3Adevel%3Aplugin_development_link&amp;amp;media=wiki:devel:devev_plugin_mylink_12.jpg&quot; class=&quot;media&quot; title=&quot;wiki:devel:devev_plugin_mylink_12.jpg&quot;&gt;&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/exe/fetch.php?media=wiki:devel:devev_plugin_mylink_12.jpg&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
И то же самое при установленном русском языке в настройках Dokuwiki
&lt;a href=&quot;https://wwoss.direct.quickconnect.to/lib/exe/detail.php?id=wiki%3Adevel%3Aplugin_development_link&amp;amp;media=wiki:devel:devev_plugin_mylink_14.jpg&quot; class=&quot;media&quot; title=&quot;wiki:devel:devev_plugin_mylink_14.jpg&quot;&gt;&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/exe/fetch.php?media=wiki:devel:devev_plugin_mylink_14.jpg&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
Работа кода кнопки См. также и вывод в редакторе текста на русском языке
&lt;a href=&quot;https://wwoss.direct.quickconnect.to/lib/exe/detail.php?id=wiki%3Adevel%3Aplugin_development_link&amp;amp;media=wiki:devel:devev_plugin_mylink_16.jpg&quot; class=&quot;media&quot; title=&quot;wiki:devel:devev_plugin_mylink_16.jpg&quot;&gt;&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/exe/fetch.php?media=wiki:devel:devev_plugin_mylink_16.jpg&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
Пример вывода на страницу
&lt;a href=&quot;https://wwoss.direct.quickconnect.to/lib/exe/detail.php?id=wiki%3Adevel%3Aplugin_development_link&amp;amp;media=wiki:devel:devev_plugin_mylink_17.jpg&quot; class=&quot;media&quot; title=&quot;wiki:devel:devev_plugin_mylink_17.jpg&quot;&gt;&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/exe/fetch.php?media=wiki:devel:devev_plugin_mylink_17.jpg&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
Примеры работы нашего плагина и вывода наших ссылок на этой странице при английской и русской локализациях:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://example.com&quot; class=&quot;urlextern&quot; title=&quot;http://example.com&quot; rel=&quot;ugc nofollow&quot;&gt;Link to the original article&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; See also: &lt;a href=&quot;http://example.com&quot; class=&quot;urlextern&quot; title=&quot;http://example.com&quot; rel=&quot;ugc nofollow&quot;&gt;http://example.com&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://example.com&quot; class=&quot;urlextern&quot; title=&quot;http://example.com&quot; rel=&quot;ugc nofollow&quot;&gt;Ссылка на оригинальную статью&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; См. также:&lt;a href=&quot;http://example.com&quot; class=&quot;urlextern&quot; title=&quot;http://example.com&quot; rel=&quot;ugc nofollow&quot;&gt;http://example.com&lt;/a&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0435 \u044f\u0437\u044b\u043a\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u0435\u0440\u0435\u0432\u043e\u0434_\u043f\u043b\u0430\u0433\u0438\u043d\u0430_\u043d\u0430_\u0440\u0430\u0437\u043d\u044b\u0435_\u044f\u0437\u044b\u043a\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:6,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;11676-15721&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit9&quot; id=&quot;примеры_использования&quot;&gt;Примеры использования&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Как мы уже знает, переменные
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; open - открывающий тег вики-разметки для вставки&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; sample- код php&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; close - закрывающий тег вики-разметки для вставки &lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Соответственно и вставлять мы можем любые шаблоны, например:
&lt;a href=&quot;https://wwoss.direct.quickconnect.to/lib/exe/detail.php?id=wiki%3Adevel%3Aplugin_development_link&amp;amp;media=wiki:devel:plugin_link_exsample_1.png&quot; class=&quot;media&quot; title=&quot;wiki:devel:plugin_link_exsample_1.png&quot;&gt;&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/exe/fetch.php?media=wiki:devel:plugin_link_exsample_1.png&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://example.com&quot; class=&quot;urlextern&quot; title=&quot;http://example.com&quot; rel=&quot;ugc nofollow&quot;&gt;Ссылка на оригинальную статью&lt;/a&gt;
&lt;/p&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=wiki:devel:plugin_development_link&amp;amp;codeblock=9&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_php&quot;&gt;index.php&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code php&quot;&gt;Вставить код PHP&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=wiki:devel:plugin_development_link&amp;amp;codeblock=10&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_css&quot;&gt;style.css&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code css&quot;&gt;Вставить код CSS&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=wiki:devel:plugin_development_link&amp;amp;codeblock=11&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_js&quot;&gt;script.js&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code js&quot;&gt;Вставить код JS&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u0440\u0438\u043c\u0435\u0440\u044b_\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:9,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;15722-16434&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit10&quot; id=&quot;дополнения_и_файлы&quot;&gt;Дополнения и Файлы&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://wwoss.direct.quickconnect.to/lib/exe/fetch.php?media=wiki:devel:mylink.zip&quot; class=&quot;media mediafile mf_zip&quot; title=&quot;wiki:devel:mylink.zip (10.8 KB)&quot;&gt;Архив проекта mylink&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://wwoss.direct.quickconnect.to/lib/exe/fetch.php?media=wiki:devel:mylink1.zip&quot; class=&quot;media mediafile mf_zip&quot; title=&quot;wiki:devel:mylink1.zip (11.7 KB)&quot;&gt;Архив проекта mylink (en/ru)&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://wwoss.direct.quickconnect.to/lib/exe/fetch.php?media=wiki:devel:mylink-master.zip&quot; class=&quot;media mediafile mf_zip&quot; title=&quot;wiki:devel:mylink-master.zip (22.3 KB)&quot;&gt;mylink-master.zip&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0414\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u0424\u0430\u0439\u043b\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f_\u0438_\u0444\u0430\u0439\u043b\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:12,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;16435-&amp;quot;} --&gt;&lt;div class=&quot;footnotes&quot;&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__8&quot; id=&quot;fn__8&quot; class=&quot;fn_bot&quot;&gt;8)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;&lt;strong&gt;Эта дата должна быть равна дате «Последнее обновление» на странице плагинов в репозитории.&lt;/strong&gt; Это необходимо для автоматической маркировки обновлений, используемой Extension Manager, представленной в релизе Ponder Stibbons&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Fri, 21 Feb 2025 03:53:27 +0000</pubDate>
        </item>
        <item>
            <title>plugin_file_structure</title>
            <link>https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:plugin_file_structure&amp;rev=1724652045</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;структура_файлов_плагина&quot;&gt;Структура файлов плагина&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Существует две структуры для файлов класса плагина DokuWiki. Выбор структуры определяет имя класса(-ов) плагина.
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;  &lt;code&gt;&amp;lt;dokuwiki&amp;gt;/lib/plugins/&amp;lt;plugin name&amp;gt;/&amp;lt;plugin type&amp;gt;.php&lt;/code&gt; &lt;br/&gt;
Имя класса плагина будет  &lt;code&gt;&amp;lt;plugin type&amp;gt;_plugin_&amp;lt;plugin name&amp;gt;&lt;/code&gt; &lt;pre class=&quot;code&quot;&gt;т.е. файл                                       класс
     &amp;lt;dokuwiki&amp;gt;/lib/plugins/acl/admin.php   =&amp;gt;  admin_plugin_acl&lt;/pre&gt;

&lt;p&gt;
 &lt;br/&gt;

&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;  &lt;code&gt;&amp;lt;dokuwiki&amp;gt;/lib/plugins/&amp;lt;plugin name&amp;gt;/&amp;lt;plugin type&amp;gt;/&amp;lt;filename&amp;gt;.php&lt;/code&gt; &lt;br/&gt;
Эта структура допускает несколько классов одного типа в одном плагине, имена классов будут &lt;code&gt;&amp;lt;plugin_type&amp;gt;_plugin_&amp;lt;plugin name&amp;gt;_&amp;lt;filename&amp;gt;&lt;/code&gt;, &lt;pre class=&quot;code&quot;&gt;т.е. файл                        тип                   класс
     &amp;lt;dokuwiki&amp;gt;/lib/plugins/code/syntax/code.php   =&amp;gt;  syntax_plugin_code_code
     &amp;lt;dokuwiki&amp;gt;/lib/plugins/code/syntax/file.php   =&amp;gt;  syntax_plugin_code_file&lt;/pre&gt;

&lt;p&gt;
 &lt;br/&gt;

&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
Заметьте, что _ (подчерк) это зарезервированный символ, и не может использоваться имени плагина &lt;code&gt;&amp;lt;plugin name&amp;gt;&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Плагин может содержать как несколько типов плагинов, так и несколько классов плагинов каждого типа.
&lt;/p&gt;

&lt;p&gt;
&lt;em&gt;?Кроме того, плагин может (опционально) использовать другие встроенные ?&lt;/em&gt;
In addition, a plugin can (optionally) take advantage of other built-in facilities to have its styles, JavaScript, localisation, and configuration included in DokuWiki.
&lt;/p&gt;

&lt;p&gt;
Все пути и файлы – относительны к корневой директории плагина.
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;&amp;lt;dokuwiki&amp;gt;/lib/plugins/&amp;lt;pluginname&amp;gt;/&lt;/code&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;style.css&lt;/code&gt; – стили &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:css&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:css&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:css&quot;&gt;CSS&lt;/a&gt; для плагина&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;script.js&lt;/code&gt; – &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:javascript&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:javascript&quot; data-wiki-id=&quot;wiki:devel:javascript&quot;&gt;JavaScript&lt;/a&gt; используемые плагином&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;lang/&amp;lt;language&amp;gt;/lang.php&lt;/code&gt; – Английские языковые строки (доступные через &lt;code&gt;$this→getLang()&lt;/code&gt;)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;lang/&amp;lt;language&amp;gt;/settings.php&lt;/code&gt; – локализованные строки, используемые в  &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=ru:plugin:config&quot; class=&quot;wikilink2&quot; title=&quot;ru:plugin:config&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;ru:plugin:config&quot;&gt;Менеджере конфигурации&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;lang/&amp;lt;language&amp;gt;/&amp;lt;filename&amp;gt;.txt&lt;/code&gt; – локализованный текст включая разметку DokuWiki (доступен через &lt;code&gt;$this→locale_xhml()&lt;/code&gt;)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;conf/default.php&lt;/code&gt; – &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:configuration#default_settings&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:configuration&quot; data-wiki-id=&quot;wiki:devel:configuration&quot;&gt;настройки по умолчанию&lt;/a&gt; (доступные через &lt;code&gt;$this→getConf()&lt;/code&gt;, локальные настройки добавляются к глобальному файлу DokuWiki &lt;code&gt;&amp;lt;dokuwiki&amp;gt;/conf/local.php&lt;/code&gt;)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;conf/metadata.php&lt;/code&gt; – &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:configuration#configuration_metadata&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:configuration&quot; data-wiki-id=&quot;wiki:devel:configuration&quot;&gt;Метаданные настроек&lt;/a&gt; описывающие настройки для использования в &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=ru:plugin:config&quot; class=&quot;wikilink2&quot; title=&quot;ru:plugin:config&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;ru:plugin:config&quot;&gt;Менеджере конфигурации&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u043b\u0430\u0433\u0438\u043d\u0430&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430_\u0444\u0430\u0439\u043b\u043e\u0432_\u043f\u043b\u0430\u0433\u0438\u043d\u0430&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-3159&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;как_включить_более_чем_один_файл_javascript&quot;&gt;Как включить более чем один файл JavaScript&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=ru:dokuwiki&quot; class=&quot;wikilink2&quot; title=&quot;ru:dokuwiki&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;ru:dokuwiki&quot;&gt;DokuWiki&lt;/a&gt; поддерживает специальный &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=ru:devel:javascript#include_syntax&quot; class=&quot;wikilink2&quot; title=&quot;ru:devel:javascript&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;ru:devel:javascript&quot;&gt;синтаксис include&lt;/a&gt;, который можно использовать для &lt;em&gt;включения&lt;/em&gt; в файл JavaScript других файлов.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041a\u0430\u043a \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u043e\u0434\u0438\u043d \u0444\u0430\u0439\u043b JavaScript&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043a\u0430\u043a_\u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c_\u0431\u043e\u043b\u0435\u0435_\u0447\u0435\u043c_\u043e\u0434\u0438\u043d_\u0444\u0430\u0439\u043b_javascript&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;3160-3506&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;как_включить_более_чем_один_файл_css&quot;&gt;Как включить более чем один файл CSS&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Все &lt;abbr title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/abbr&gt; должны быть сведены в один файл.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041a\u0430\u043a \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u043e\u0434\u0438\u043d \u0444\u0430\u0439\u043b CSS&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043a\u0430\u043a_\u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c_\u0431\u043e\u043b\u0435\u0435_\u0447\u0435\u043c_\u043e\u0434\u0438\u043d_\u0444\u0430\u0439\u043b_css&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;3507-3654&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;выключение_плагина&quot;&gt;Выключение плагина&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Плагин может быть установлен, но выключен. Признаком того, что плагин выключен, служит файл нулевой длинны &lt;code&gt;disabled&lt;/code&gt; в директории плагина.
&lt;/p&gt;

&lt;p&gt;
 Признаком того, что плагин выключен, служит суффикс &lt;code&gt;.disabled&lt;/code&gt; добавленный к имени директории.  Безопасный метод получить имя директории плагина – использовать функцию &lt;code&gt;plugin_directory()&lt;/code&gt; &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=plugin_directory&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for #plugin_directory&quot;&gt;inc/pluginutils.php&lt;/a&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0412\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u0430&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435_\u043f\u043b\u0430\u0433\u0438\u043d\u0430&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;3655-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Mon, 26 Aug 2024 06:00:45 +0000</pubDate>
        </item>
        <item>
            <title>plugin_info</title>
            <link>https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:plugin_info&amp;rev=1736454067</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;информация_о_плагине&quot;&gt;Информация о плагине&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Каждый плагин должен предоставить некоторую базовую информацию о себе. Это делается через файл с именем, &lt;code&gt;plugin.info.txt&lt;/code&gt; расположенный в каталоге плагина .
&lt;/p&gt;

&lt;p&gt;
Вот пример того, как должен выглядеть такой файл.
&lt;/p&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=wiki:devel:plugin_info&amp;amp;codeblock=0&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_txt&quot;&gt;lib/plugins/example/plugin.info.txt&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code txt&quot;&gt;base   example
author My Full Name
email  me@example.com
date   2010-01-17
name   Example Plugin to do Stuff
desc   This is just an Example of how a plugin description looks like
url    https://www.dokuwiki.org/plugin:example&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;
&lt;div class=&quot;table sectionedit2&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;thead&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Параметр &lt;/th&gt;&lt;th class=&quot;col1&quot;&gt; Описание &lt;/th&gt;
	&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; base      &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Техническое имя плагина. &lt;strong&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:plugin:extension&quot; class=&quot;wikilink1&quot; title=&quot;wiki:plugin:extension&quot; data-wiki-id=&quot;wiki:plugin:extension&quot;&gt;Менеджер расширений&lt;/a&gt; установит его в этот каталог.&lt;/strong&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; author    &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Полное имя автора плагина &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; email     &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Электронная почта для связи с автором плагина по поводу этого плагина &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; date      &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Дата последнего обновления этого плагина в формате ГГГГ-ММ-ДД. Не забудьте обновить это, когда будете обновлять свой плагин! &lt;sup&gt;&lt;a href=&quot;#fn__9&quot; id=&quot;fnt__9&quot; class=&quot;fn_top&quot;&gt;9)&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; name      &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Удобочитаемое имя плагина &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row6&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; desc      &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Описание того, что делает плагин &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row7&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; url       &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt;-адрес , по которому можно получить более подробную информацию о плагине &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row8&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; minphp    &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Минимальная версия PHP, требуемая для этого плагина. Пусто для того же, что и DokuWiki. Только &lt;code&gt;Major.Minor&lt;/code&gt; версия, например 8.2, не 8.2.3 может быть указана! &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row9&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; maxphp    &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Максимальная версия PHP, поддерживаемая этим плагином. Пусто для того же, что и DokuWiki. Только &lt;code&gt;Major.Minor&lt;/code&gt; версия, например 8.2, не 8.2.3может быть указана! &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;701-2610&amp;quot;} --&gt;
&lt;p&gt;
&lt;strong&gt;Примечание:&lt;/strong&gt; &lt;code&gt;plugin.info.txt&lt;/code&gt; заменяет старый вызов &lt;code&gt;getInfo()&lt;/code&gt; в ваших компонентах плагина для DokuWiki 2009-12-25 «Lemming» и более поздних версий. getInfo() теперь реализован в базовом классе и будет считывать всю информацию из этого файла. Его больше не нужно реализовывать в ваших подклассах.
&lt;/p&gt;

&lt;/div&gt;
&lt;div class=&quot;footnotes&quot;&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__9&quot; id=&quot;fn__9&quot; class=&quot;fn_bot&quot;&gt;9)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;&lt;strong&gt;Эта дата должна быть равна дате «Последнее обновление» на странице плагинов в репозитории.&lt;/strong&gt; Это необходимо для автоматической маркировки обновлений, используемой Extension Manager, представленной в релизе Ponder Stibbons&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Thu, 09 Jan 2025 20:21:07 +0000</pubDate>
        </item>
        <item>
            <title>plugin_programming_tips</title>
            <link>https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:plugin_programming_tips&amp;rev=1736416448</link>
            <description>
&lt;p&gt;
&lt;a href=&quot;https://www.dokuwiki.org/devel:plugin_programming_tips&quot; class=&quot;urlextern&quot; title=&quot;https://www.dokuwiki.org/devel:plugin_programming_tips&quot; rel=&quot;ugc nofollow&quot;&gt;https://www.dokuwiki.org/devel:plugin_programming_tips&lt;/a&gt;
&lt;/p&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Thu, 09 Jan 2025 09:54:08 +0000</pubDate>
        </item>
        <item>
            <title>plugins</title>
            <link>https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:plugins&amp;rev=1736421102</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;разработка_плагинов&quot;&gt;Разработка плагинов&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Написать плагин DokuWiki очень просто. Перед тем, как написать свой собственный, не забудьте поискать похожие плагины среди &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:plugins&quot; class=&quot;wikilink1&quot; title=&quot;wiki:plugins&quot; data-wiki-id=&quot;wiki:plugins&quot;&gt;уже написанных&lt;/a&gt; and read through &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:security&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:security&quot; data-wiki-id=&quot;wiki:devel:security&quot;&gt;рекомендации по безопасности для авторов плагинов .&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
DokuWiki имеет гибкий &lt;abbr title=&quot;Application Programming Interface&quot;&gt;API&lt;/abbr&gt;-интерфейс плагина, который позволяет разработчикам расширять его функциональность, будь то дополнительные &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:syntax&quot; class=&quot;wikilink1&quot; title=&quot;wiki:syntax&quot; data-wiki-id=&quot;wiki:syntax&quot;&gt;режимы синтаксиса&lt;/a&gt; , &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:action_modes&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:action_modes&quot; data-wiki-id=&quot;wiki:devel:action_modes&quot;&gt;пользовательские режимы действий &lt;/a&gt; или новые форматы &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:export&quot; class=&quot;wikilink1&quot; title=&quot;wiki:export&quot; data-wiki-id=&quot;wiki:export&quot;&gt;экспорта&lt;/a&gt; и многое другое. В зависимости от назначения плагина, он может состоять из одного или нескольких компонентов следующих типов плагинов.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430_\u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-1142&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;типы_плагинов&quot;&gt;Типы плагинов&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
На данный момент DokuWiki предлагает семь различных типов плагинов.
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:syntax_plugins&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:syntax_plugins&quot; data-wiki-id=&quot;wiki:devel:syntax_plugins&quot;&gt;Плагины синтаксиса&lt;/a&gt; расширяют базовый  &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:syntax&quot; class=&quot;wikilink1&quot; title=&quot;wiki:syntax&quot; data-wiki-id=&quot;wiki:syntax&quot;&gt;синтаксис&lt;/a&gt; DokuWiki.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:action_plugins&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:action_plugins&quot; data-wiki-id=&quot;wiki:devel:action_plugins&quot;&gt;Плагины действий&lt;/a&gt; можно использовать для расширения или замены многих аспектов основных операций DokuWiki: от сохранения вики-страниц до добавления новых &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:action_modes&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:action_modes&quot; data-wiki-id=&quot;wiki:devel:action_modes&quot;&gt;режимов действий&lt;/a&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:admin_plugins&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:admin_plugins&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:admin_plugins&quot;&gt;Плагины администратора&lt;/a&gt; могут обеспечить функциональные возможности администрирования DokuWiki — эти плагины доступны суперпользователям и менеджерам с помощью кнопки «Администратор».&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:helper_plugins&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:helper_plugins&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:helper_plugins&quot;&gt;Вспомогательные плагины&lt;/a&gt; можно использовать для предоставления функциональности многим другим плагинам, поэтому каждому плагину не придется снова и снова реализовывать определенную функцию.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:renderer_plugins&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:renderer_plugins&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:renderer_plugins&quot;&gt;renderer_plugins&lt;/a&gt; позволяют создавать новые режимы &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:export&quot; class=&quot;wikilink1&quot; title=&quot;wiki:export&quot; data-wiki-id=&quot;wiki:export&quot;&gt;экспорта&lt;/a&gt; и заменять стандартный рендерер DokuWiki XHTML.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:remote_plugins&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:remote_plugins&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:remote_plugins&quot;&gt;Удаленные плагины&lt;/a&gt; позволяют добавлять веб-сервисы в ваш плагин.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:auth_plugins&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:auth_plugins&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:auth_plugins&quot;&gt;Плагины аутентификаци&lt;/a&gt; и добавляют в DokuWiki дополнительный бэкэнд аутентификации, который можно активировать через менеджер конфигурации.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:cli_plugins&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:cli_plugins&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:cli_plugins&quot;&gt;Плагины CLI&lt;/a&gt; добавляют инструменты командной строки в ваш плагин&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Plugin types are not mutually exclusive, i.e. a plugin can also be assigned to several plugin types.
&lt;/p&gt;

&lt;p&gt;
Типы плагинов не являются взаимоисключающими, т.е. плагин может быть отнесен к нескольким типам плагинов. &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:plugin:color&quot; class=&quot;wikilink1&quot; title=&quot;wiki:plugin:color&quot; data-wiki-id=&quot;wiki:plugin:color&quot;&gt;плагин цвета&lt;/a&gt;, может состоять только из одного файла 
 &lt;code&gt;syntax.php&lt;/code&gt;. Более продвинутые плагины состоят из нескольких компонентов, например, &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:plugin:data&quot; class=&quot;wikilink1&quot; title=&quot;wiki:plugin:data&quot; data-wiki-id=&quot;wiki:plugin:data&quot;&gt;плагин структурированных данных&lt;/a&gt; имеет обработку синтаксиса, разделенную на компоненты «ввод данных» и «табличное представление», компонент действия для специальной кнопки редактирования, прикрепленной к каждой записи данных, и интерфейс администратора для обслуживания базы данных.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0422\u0438\u043f\u044b \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0442\u0438\u043f\u044b_\u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;1143-4502&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;sources&quot;&gt;Sources&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
There are a number of sources especially for plugin development:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; The &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=devel:plugin_file_structure&quot; class=&quot;wikilink2&quot; title=&quot;devel:plugin_file_structure&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;devel:plugin_file_structure&quot;&gt;plugin file structure&lt;/a&gt; gives overview of the naming convention and structure, and where you add &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=devel:javascript&quot; class=&quot;wikilink2&quot; title=&quot;devel:javascript&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;devel:javascript&quot;&gt;JavaScript&lt;/a&gt; and &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=devel:css&quot; class=&quot;wikilink2&quot; title=&quot;devel:css&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;devel:css&quot;&gt;CSS stylesheets&lt;/a&gt;, relevant for all plugin types&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; There are some &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:common_plugin_functions&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:common_plugin_functions&quot; data-wiki-id=&quot;wiki:devel:common_plugin_functions&quot;&gt;common plugin functions&lt;/a&gt;, available in all plugins types. Adds localisation, configuration and interspection.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; These &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:security&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:security&quot; data-wiki-id=&quot;wiki:devel:security&quot;&gt;security guidelines&lt;/a&gt; give some deeper understanding of common issues and presents some protection measures.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Some general &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:plugin_programming_tips&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:plugin_programming_tips&quot; data-wiki-id=&quot;wiki:devel:plugin_programming_tips&quot;&gt;plugin programming tips&lt;/a&gt; are available, mostly good practices and pointers to handsome tools in DokuWiki.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Sources&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;sources&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;4503-5185&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;plugin_name&quot;&gt;Plugin Name&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
A valid plugin name:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Should only contain the characters a-z and 0-9. &lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; Underscore is NOT allowed as:&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; This is used to separate &lt;code&gt;&amp;lt;plugin name&amp;gt;&lt;/code&gt; from &lt;code&gt;&amp;lt;component name&amp;gt;&lt;/code&gt;. &lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; Using underscore will also give a &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=popularity&quot; class=&quot;wikilink2&quot; title=&quot;popularity&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;popularity&quot;&gt;popularity&lt;/a&gt; rating of zero. &lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; If the same name is used by two different plugins&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; they are mutually excluding and inherently incompatible, &lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; furthermore only one of them can have a plugin homepage on dokuwiki.org.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Plugin Name&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;plugin_name&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;5186-5677&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;plugin_wizard&quot;&gt;Plugin Wizard&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
A Wizard to create the basic skeleton for a DokuWiki plugin can be found at &lt;a href=&quot;http://pluginwizard.dokuwiki.org/&quot; class=&quot;urlextern&quot; title=&quot;http://pluginwizard.dokuwiki.org/&quot; rel=&quot;ugc nofollow&quot;&gt;http://pluginwizard.dokuwiki.org/&lt;/a&gt; and is recommended to be used for starting the development. Alternatively use the command line &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=plugin:dev&quot; class=&quot;wikilink2&quot; title=&quot;plugin:dev&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;plugin:dev&quot;&gt;dev Plugin&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
If you later need to extend your plugin refer to the &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:plugin_file_structure&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:plugin_file_structure&quot; data-wiki-id=&quot;wiki:devel:plugin_file_structure&quot;&gt;plugin file structure&lt;/a&gt; on how files are arranged in a plugin.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Plugin Wizard&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;plugin_wizard&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;5678-6078&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit6&quot; id=&quot;publishing_a_plugin_on_dokuwikiorg&quot;&gt;Publishing a Plugin on dokuwiki.org&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
If you created a plugin, please share it with the community. Just create a page named after your plugin in the plugin namespace. E.g. if your pluginfolder is named &lt;code&gt;sample&lt;/code&gt; create a page &lt;code&gt;plugin:sample&lt;/code&gt; here in the wiki.
&lt;/p&gt;

&lt;p&gt;
The page should contain all needed documentation on how to install and use the plugin and give users a pretty good idea what it does before installing the plugin. Adding screenshots might be a good idea as well. When creating the new page, a namespace template will prefill sections and tips for you.
&lt;/p&gt;

&lt;p&gt;
At the top of the plugin page a few metadata fields have to be filled. A description of each field can be found on &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=plugin:repository&quot; class=&quot;wikilink2&quot; title=&quot;plugin:repository&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;plugin:repository&quot;&gt;Repository Plugin&lt;/a&gt; page.
&lt;/p&gt;

&lt;p&gt;
Users will see that an update is available in the extension manager. For this to work properly it is necessary that the date “Last updated on” at the Plugin wiki page equals the date in the file &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=devel:plugin_info&quot; class=&quot;wikilink2&quot; title=&quot;devel:plugin_info&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;devel:plugin_info&quot;&gt;plugin.info.txt&lt;/a&gt; in the source tarball/zipfile. If this is not the case, available  updates will not be shown or the “Update” signal will persist despite the plugin being up-to-date!
&lt;/p&gt;

&lt;p&gt;
Uploads are not allowed on dokuwiki.org, so you need to host your plugin files somewhere else. We recommend to manage your source with a Revision Control System like &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:git&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:git&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:git&quot;&gt;git&lt;/a&gt;. If you do, it&amp;#039;s easiest to use a public repository host like &lt;a href=&quot;https://github.com/&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/&quot; rel=&quot;ugc nofollow&quot;&gt;GitHub&lt;/a&gt;, &lt;a href=&quot;https://gitlab.com/&quot; class=&quot;urlextern&quot; title=&quot;https://gitlab.com/&quot; rel=&quot;ugc nofollow&quot;&gt;GitLab&lt;/a&gt; or &lt;a href=&quot;https://bitbucket.org/&quot; class=&quot;urlextern&quot; title=&quot;https://bitbucket.org/&quot; rel=&quot;ugc nofollow&quot;&gt;Bitbucket&lt;/a&gt; which offers also a bug tracker for your repository.
&lt;/p&gt;

&lt;p&gt;
Plugin developers can check the &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=devel:badextensions&quot; class=&quot;wikilink2&quot; title=&quot;devel:badextensions&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;devel:badextensions&quot;&gt;bad extension page&lt;/a&gt; for differences in their github repository checkin, the &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=devel:plugin_info&quot; class=&quot;wikilink2&quot; title=&quot;devel:plugin_info&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;devel:plugin_info&quot;&gt;plugin.info.txt&lt;/a&gt; and the respective page at dokuwiki.org.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Publishing a Plugin on dokuwiki.org&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;publishing_a_plugin_on_dokuwikiorg&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;6079-7829&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit7&quot; id=&quot;inspirations&quot;&gt;Inspirations&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Inspirations&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;inspirations&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;7830-7855&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit8&quot; id=&quot;existing_plugins&quot;&gt;Existing Plugins&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Already more than 1400 plugins are written for DokuWiki. To learn how things are working, you might study some &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=plugins&quot; class=&quot;wikilink2&quot; title=&quot;plugins&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;plugins&quot;&gt;existing plugins&lt;/a&gt; that have some similarity with your ideas. At &lt;a href=&quot;https://codesearch.dokuwiki.org/&quot; class=&quot;urlextern&quot; title=&quot;https://codesearch.dokuwiki.org/&quot; rel=&quot;ugc nofollow&quot;&gt;code­search.doku­wiki.org&lt;/a&gt; you can find &lt;a href=&quot;https://codesearch.dokuwiki.org/xref/plugin/&quot; class=&quot;urlextern&quot; title=&quot;https://codesearch.dokuwiki.org/xref/plugin/&quot; rel=&quot;ugc nofollow&quot;&gt;all them&lt;/a&gt; in a browsable format.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Existing Plugins&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;existing_plugins&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;7856-8230&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit9&quot; id=&quot;event_list&quot;&gt;Event List&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Another way is to search the &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=devel:events_list&quot; class=&quot;wikilink2&quot; title=&quot;devel:events_list&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;devel:events_list&quot;&gt;event list&lt;/a&gt; for a suitable event that may be used to implement the desired plugin function. The plugins that use this event can then be found using the code search mentioned above. 
&lt;/p&gt;

&lt;p&gt;
At the bottom of each event page, where the details of the event are listed, there is a link to a pre-filled code search. It provides specific examples of the function and application of the respective event.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Event List&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;event_list&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;8231-8695&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit10&quot; id=&quot;дополнения_и_файлы&quot;&gt;Дополнения и Файлы&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
см. также
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:plugin_programming_tips&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:plugin_programming_tips&quot; data-wiki-id=&quot;wiki:devel:plugin_programming_tips&quot;&gt;plugin_programming_tips&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.dokuwiki.org/devel:plugins&quot; class=&quot;urlextern&quot; title=&quot;https://www.dokuwiki.org/devel:plugins&quot; rel=&quot;ugc nofollow&quot;&gt;Ссылки на источник статьи&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:plugin_development_icon&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:plugin_development_icon&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:plugin_development_icon&quot;&gt;Пример разработки плагина иконок&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:plugin_development_link&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:plugin_development_link&quot; data-wiki-id=&quot;wiki:devel:plugin_development_link&quot;&gt;Пример разработки плагина ссылки&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0414\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u0424\u0430\u0439\u043b\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f_\u0438_\u0444\u0430\u0439\u043b\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;8696-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Thu, 09 Jan 2025 11:11:42 +0000</pubDate>
        </item>
        <item>
            <title>preload</title>
            <link>https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:preload&amp;rev=1735907712</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;предварительная_загрузка&quot;&gt;Предварительная загрузка&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;inc/preload.php&lt;/code&gt; не является частью стандартной установки dokuwiki&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/images/smileys/magnifier-left.png&quot; class=&quot;icon smiley&quot; alt=&quot;:&amp;amp;13:&quot; /&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:xref:dokuwiki:inc:init.php&quot; class=&quot;wikilink1&quot; title=&quot;wiki:xref:dokuwiki:inc:init.php&quot; data-wiki-id=&quot;wiki:xref:dokuwiki:inc:init.php&quot;&gt;inc/init.php&lt;/a&gt; пытается включить &lt;code&gt;inc/preload.php&lt;/code&gt; прежде, чем он сделает что-либо еще&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; preload.php имеет возможность переопределять многие аспекты &lt;strong&gt;стандартной&lt;/strong&gt; dokuwiki, в т.ч.&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; большинство местоположений каталога&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; каскад конфигурации&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; контроллер плагина&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Это представляет особый интерес для &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:farm&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:farm&quot; data-wiki-id=&quot;wiki:devel:farm&quot;&gt;вики-ферм&lt;/a&gt;, позволяя им управлять несколькими независимыми вики из одной установки dokuwiki.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f_\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-916&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit2&quot; id=&quot;смотрите_также&quot;&gt;Смотрите также&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Константы &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:environment#doku&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:environment&quot; data-wiki-id=&quot;wiki:devel:environment&quot;&gt;DOKU_*&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0421\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0442\u0430\u043a\u0436\u0435&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435_\u0442\u0430\u043a\u0436\u0435&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;917-1016&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;примеры&quot;&gt;Примеры&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u0440\u0438\u043c\u0435\u0440\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u0440\u0438\u043c\u0435\u0440\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;1017-1044&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit4&quot; id=&quot;локальная_папка_конфигурации&quot;&gt;Локальная папка конфигурации&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=wiki:devel:preload&amp;amp;codeblock=0&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_php&quot;&gt;preload.php&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class=&quot;co4&quot;&gt;/**
 *  Sample preload.php to use a separate folder for all local configuration settings
 * 
 *  By default this script will locate the local config files in
 *      /path/to/doku/conf/local/
 * 
 *  The locations of both the default dokuwiki configuration and local configuration
 *  can be controlled using DOKU_DEFAULT &amp;amp; DOKU_CONF.
 * 
 *  NOTE: DOKU_CONF controls the location of several other files not contained in the
 *  configuration cascade.  They are:
 *    acl.auth.php
 *    users.auth.php
 *    userscript.php
 *    userstyle.css (and media specific user stylesheets, e.g. userscreen.css, userprint.css)
 *    report_e_all
 *    msg
 *
 */&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;&lt;a href=&quot;http://www.php.net/defined&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;defined&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;DOKU_DEFAULT&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/define&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;define&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;DOKU_DEFAULT&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;DOKU_INC&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;conf/&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;&lt;a href=&quot;http://www.php.net/defined&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;defined&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;DOKU_CONF&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/define&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;define&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;DOKU_CONF&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;DOKU_DEFAULT&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;local/&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw2&quot;&gt;global&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$config_cascade&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$config_cascade&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
  &lt;span class=&quot;st_h&quot;&gt;&#039;main&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;default&#039;&lt;/span&gt;   &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;DOKU_DEFAULT&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;dokuwiki.php&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;local&#039;&lt;/span&gt;     &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;DOKU_CONF&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;dokuwiki.php&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;protected&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;DOKU_CONF&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;protected.php&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;st_h&quot;&gt;&#039;acronyms&#039;&lt;/span&gt;  &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;default&#039;&lt;/span&gt;   &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;DOKU_DEFAULT&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;acronyms.conf&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;local&#039;&lt;/span&gt;     &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;DOKU_CONF&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;acronyms.conf&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;st_h&quot;&gt;&#039;entities&#039;&lt;/span&gt;  &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;default&#039;&lt;/span&gt;   &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;DOKU_DEFAULT&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;entities.conf&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;local&#039;&lt;/span&gt;     &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;DOKU_CONF&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;entities.conf&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;st_h&quot;&gt;&#039;interwiki&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;default&#039;&lt;/span&gt;   &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;DOKU_DEFAULT&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;interwiki.conf&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;local&#039;&lt;/span&gt;     &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;DOKU_CONF&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;interwiki.conf&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;st_h&quot;&gt;&#039;license&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;default&#039;&lt;/span&gt;   &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;DOKU_DEFAULT&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;license.php&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;local&#039;&lt;/span&gt;     &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;DOKU_CONF&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;license.php&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;st_h&quot;&gt;&#039;mediameta&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;default&#039;&lt;/span&gt;   &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;DOKU_DEFAULT&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;mediameta.php&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;local&#039;&lt;/span&gt;     &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;DOKU_CONF&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;mediameta.php&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;st_h&quot;&gt;&#039;mime&#039;&lt;/span&gt;      &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;default&#039;&lt;/span&gt;   &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;DOKU_DEFAULT&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;mime.conf&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;local&#039;&lt;/span&gt;     &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;DOKU_CONF&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;mime.conf&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;st_h&quot;&gt;&#039;scheme&#039;&lt;/span&gt;    &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;default&#039;&lt;/span&gt;   &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;DOKU_DEFAULT&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;scheme.conf&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;local&#039;&lt;/span&gt;     &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;DOKU_CONF&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;scheme.conf&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;st_h&quot;&gt;&#039;smileys&#039;&lt;/span&gt;   &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;default&#039;&lt;/span&gt;   &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;DOKU_DEFAULT&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;smileys.conf&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;local&#039;&lt;/span&gt;     &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;DOKU_CONF&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;smileys.conf&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;st_h&quot;&gt;&#039;wordblock&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;default&#039;&lt;/span&gt;   &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;DOKU_DEFAULT&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;wordblock.conf&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;local&#039;&lt;/span&gt;     &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;DOKU_CONF&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;wordblock.conf&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;st_h&quot;&gt;&#039;acl&#039;&lt;/span&gt;       &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;default&#039;&lt;/span&gt;   &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; DOKU_CONF&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;acl.auth.php&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;st_h&quot;&gt;&#039;plainauth.users&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;default&#039;&lt;/span&gt;   &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; DOKU_CONF&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;users.auth.php&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;st_h&quot;&gt;&#039;plugins&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;local&#039;&lt;/span&gt;     &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;DOKU_CONF&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;plugins.local.php&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;protected&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
      DOKU_CONF&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;plugins.required.php&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
      DOKU_CONF&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;plugins.protected.php&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;st_h&quot;&gt;&#039;userstyle&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;default&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; DOKU_CONF&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;userstyle.css&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;print&#039;&lt;/span&gt;   &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; DOKU_CONF&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;printstyle.css&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;feed&#039;&lt;/span&gt;    &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; DOKU_CONF&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;feedstyle.css&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;all&#039;&lt;/span&gt;     &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; DOKU_CONF&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;allstyle.css&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;st_h&quot;&gt;&#039;userscript&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;default&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; DOKU_CONF&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;userscript.js&#039;&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0430\u043f\u043a\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f_\u043f\u0430\u043f\u043a\u0430_\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;1045-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Fri, 03 Jan 2025 12:35:12 +0000</pubDate>
        </item>
        <item>
            <title>request_vars</title>
            <link>https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:request_vars&amp;rev=1735917719</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;доступ_к_переменным_запроса&quot;&gt;Доступ к переменным запроса&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
DokuWiki не запрещает доступ к &lt;code&gt;$_POST&lt;/code&gt;, &lt;code&gt;$_GET&lt;/code&gt;, &lt;code&gt;$_REQUEST&lt;/code&gt; и &lt;code&gt;$_SERVER&lt;/code&gt;. Однако мы настоятельно рекомендуем обращаться к ним &lt;strong&gt;не напрямую&lt;/strong&gt;, а использовать наш &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=Input&amp;amp;path=Input&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;search definitions for Input&quot;&gt;Input&lt;/a&gt; класс. Глобальный экземпляр этого класса доступен везде как &lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/images/smileys/magnifier-left.png&quot; class=&quot;icon smiley&quot; alt=&quot;:&amp;amp;13:&quot; /&gt;&lt;a href=&quot;https://codesearch.dokuwiki.org/xref/dokuwiki/inc/Input/Input.php?r=&amp;amp;mo=360&amp;amp;fi=14#14&quot; class=&quot;urlextern&quot; title=&quot;https://codesearch.dokuwiki.org/xref/dokuwiki/inc/Input/Input.php?r=&amp;amp;mo=360&amp;amp;fi=14#14&quot; rel=&quot;ugc nofollow&quot;&gt;$INPUT&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
Класс предоставляет вам типобезопасный доступ к переменным запроса, обеспечивает их правильную инициализацию и позволяет вам устанавливать значения по умолчанию.
&lt;/p&gt;

&lt;p&gt;
Чтобы получить доступ к переменной в &lt;code&gt;$_REQUEST&lt;/code&gt;, просто вызовите соответствующий метод в &lt;code&gt;$INPUT&lt;/code&gt;. Например, для доступа к Integer в &lt;code&gt;$_REQUEST[&amp;#039;foo&amp;#039;]&lt;/code&gt;, просто вызовите &lt;code&gt;$INPUT-&amp;gt;int(&amp;#039;foo&amp;#039;)&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Если вы хотите получить доступ к &lt;code&gt;$_GET&lt;/code&gt; или &lt;code&gt;$_POST&lt;/code&gt; явно, вызовите методы для членов &lt;code&gt;get&lt;/code&gt; и &lt;code&gt;post&lt;/code&gt; &lt;code&gt;$INPUT&lt;/code&gt;. Например &lt;code&gt;$INPUT-&amp;gt;get-&amp;gt;int(&amp;#039;foo&amp;#039;)&lt;/code&gt; или &lt;code&gt;$INPUT-&amp;gt;post-&amp;gt;int(&amp;#039;foo&amp;#039;)&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Доступ к &lt;code&gt;$_SERVER&lt;/code&gt; переменным всегда осуществляется через &lt;code&gt;server&lt;/code&gt; член &lt;code&gt;$INPUT&lt;/code&gt;: Например. &lt;code&gt;$INPUT-&amp;gt;server-&amp;gt;str(&amp;#039;REMOTE_USER&amp;#039;)&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Все функции доступа позволяют второму параметру задать значение по умолчанию. Это значение будет возвращено, если переменная не была установлена ​​или имела неправильный тип (например, ожидаемое целое число было массивом). Все функции доступа имеют разумные значения по умолчанию, соответствующие типу функции. Например &lt;code&gt;int()&lt;/code&gt; returns &lt;code&gt;0&lt;/code&gt;, &lt;code&gt;arr()&lt;/code&gt; возвращает пустой массив по умолчанию.
&lt;/p&gt;

&lt;p&gt;
Третий параметр сообщает функции, следует ли возвращать параметр &lt;a href=&quot;https://secure.php.net/empty()&quot; class=&quot;interwiki iw_phpfn&quot; title=&quot;https://secure.php.net/empty()&quot;&gt;empty()&lt;/a&gt; по умолчанию. Этот третий параметр по умолчанию равен&lt;code&gt;false&lt;/code&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0414\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0430&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0434\u043e\u0441\u0442\u0443\u043f_\u043a_\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c_\u0437\u0430\u043f\u0440\u043e\u0441\u0430&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-2587&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;примеры&quot;&gt;Примеры&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Вот несколько примеров, чтобы дать вам представление о том, как работает класс Input. Для получения подробной информации, пожалуйста, обратитесь к &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:xref:dokuwiki:inc:input:input.php&quot; class=&quot;wikilink1&quot; title=&quot;wiki:xref:dokuwiki:inc:input:input.php&quot; data-wiki-id=&quot;wiki:xref:dokuwiki:inc:input:input.php&quot;&gt;inc/input/input.php&lt;/a&gt;.
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;global&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$INPUT&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;re0&quot;&gt;$_REQUEST&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;foo&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;3&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;a href=&quot;http://www.php.net/var_dump&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;var_dump&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$INPUT&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;foo&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;// expect an integer&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// int(3)&lt;/span&gt;
&amp;nbsp;
&lt;a href=&quot;http://www.php.net/var_dump&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;var_dump&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$INPUT&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;foo&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;// expect a string&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// string(1) &amp;quot;3&amp;quot;&lt;/span&gt;
&amp;nbsp;
&lt;a href=&quot;http://www.php.net/var_dump&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;var_dump&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$INPUT&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;bar&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;// standard default&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// int(0)&lt;/span&gt;
&amp;nbsp;
&lt;a href=&quot;http://www.php.net/var_dump&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;var_dump&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$INPUT&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;bar&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;42&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;// setting an explicit default&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// int(42)&lt;/span&gt;
&amp;nbsp;
&lt;a href=&quot;http://www.php.net/var_dump&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;var_dump&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$INPUT&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;bool&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;foo&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;// we cast when reasonable&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// bool(true)&lt;/span&gt;
&amp;nbsp;
&lt;a href=&quot;http://www.php.net/var_dump&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;var_dump&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$INPUT&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;arr&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;foo&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;// we don&#039;t cast here&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// array(0) {&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// }&lt;/span&gt;
&amp;nbsp;
&lt;a href=&quot;http://www.php.net/var_dump&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;var_dump&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$INPUT&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;has&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;foo&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;// is set&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// bool(true)&lt;/span&gt;
&amp;nbsp;
&amp;nbsp;
&lt;span class=&quot;re0&quot;&gt;$_POST&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;foo&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;0&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;bar&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// now accessing $_POST and trying the third parameter &lt;/span&gt;
&amp;nbsp;
&lt;a href=&quot;http://www.php.net/var_dump&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;var_dump&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$INPUT&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;post&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;foo&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// int(0)&lt;/span&gt;
&amp;nbsp;
&lt;a href=&quot;http://www.php.net/var_dump&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;var_dump&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$INPUT&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;post&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;bar&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// int(-1)&lt;/span&gt;
&amp;nbsp;
&lt;a href=&quot;http://www.php.net/var_dump&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;var_dump&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$INPUT&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;post&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;foo&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// int(-1)&lt;/span&gt;
&amp;nbsp;
&lt;a href=&quot;http://www.php.net/var_dump&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;var_dump&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$INPUT&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;post&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;bar&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// int(-1)&lt;/span&gt;
&amp;nbsp;
&amp;nbsp;
&lt;span class=&quot;re0&quot;&gt;$_SERVER&lt;/span&gt; 
&amp;nbsp;
&lt;a href=&quot;http://www.php.net/var_dump&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;var_dump&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$INPUT&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;server&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;REMOTE_USER&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// string(8) &amp;quot;username&amp;quot;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u0440\u0438\u043c\u0435\u0440\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u0440\u0438\u043c\u0435\u0440\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;2588-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Fri, 03 Jan 2025 15:21:59 +0000</pubDate>
        </item>
        <item>
            <title>security</title>
            <link>https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:security&amp;rev=1735915699</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;правила_безопасности_для_авторов_плагинов&quot;&gt;Правила безопасности для авторов плагинов&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Создание &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:plugins&quot; class=&quot;wikilink1&quot; title=&quot;wiki:plugins&quot; data-wiki-id=&quot;wiki:plugins&quot;&gt;плагинов&lt;/a&gt; для DokuWiki очень просто даже для начинающих  &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:plugins&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:plugins&quot; data-wiki-id=&quot;wiki:devel:plugins&quot;&gt;программистов&lt;/a&gt; PHP. Чтобы убедиться, что ваш плагин не ставит под угрозу безопасность всей вики, на которой он установлен, вам следует следовать рекомендациям, изложенным на этой странице.
&lt;/p&gt;

&lt;p&gt;
&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/images/smileys/exclaim.svg&quot; class=&quot;icon smiley&quot; alt=&quot;:!:&quot; /&gt; Улучшение этой страницы всегда приветствуется. Она находится в очень сыром состоянии и должна быть расширена более подробной информацией, ссылками и примерами.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;краткое_содержание&quot;&gt;Краткое содержание&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Список наиболее распространенных проблем безопасности и способы их избежания можно найти на этой странице. Краткое резюме:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Межсайтовый скриптинг (XSS) — вставляет вредоносный код на веб-сайт для манипулирования сайтом в браузере пользователя.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Подделка межсайтовых запросов (CSRF) — уловки, позволяющие вам совершать неосознанные вредоносные действия на вашем сайте.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Удаленное включение кода – включает код на сервере, который там выполняется.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Утечка информации – отображается слишком много информации&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; SQL-инъекция – можно выполнить нежелательные запросы к вашим данным&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Также добавлено примечание о &lt;a href=&quot;#reporting_security_issues&quot; title=&quot;wiki:devel:security ↵&quot; class=&quot;wikilink1&quot;&gt;необходимости сообщать о проблемах безопасности &lt;/a&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u0440\u0430\u0432\u0438\u043b\u0430 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u0440\u043e\u0432 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u0440\u0430\u0432\u0438\u043b\u0430_\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438_\u0434\u043b\u044f_\u0430\u0432\u0442\u043e\u0440\u043e\u0432_\u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-2181&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;межсайтовый_скриптинг_xss&quot;&gt;Межсайтовый скриптинг (XSS)&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Это, вероятно, самая распространенная уязвимость, встречающаяся в плагинах DokuWiki.
&lt;/p&gt;

&lt;p&gt;
Cross Site Scripting относится к атаке, при которой вредоносный код JavaScript внедряется на веб-сайт. Это может использоваться для перенаправления невинных пользователей на вредоносные веб-сайты или для кражи аутентификационных cookie-файлов.
&lt;/p&gt;

&lt;p&gt;
Механизм плагинов DokuWiki дает разработчикам плагинов большую гибкость. В случае с плагинами синтаксиса, в частности, фреймворк дает плагинам возможность работать с сырым необработанным выводом. Это означает, что данные страницы вики, которые достигают вашего плагина, вообще не были обработаны. И не будет никакой дальнейшей обработки вывода после того, как он покинет ваш плагин.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;выход_из_режима_экранирования&quot;&gt;Выход из режима экранирования&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Как минимум, плагин должен гарантировать, что все выходные необработанные данные будут содержать все специальные символы &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt; , преобразованные в сущности &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt; с помощью функции &lt;a href=&quot;https://secure.php.net/htmlspecialchars()&quot; class=&quot;interwiki iw_phpfn&quot; title=&quot;https://secure.php.net/htmlspecialchars()&quot;&gt;htmlspecialchars()&lt;/a&gt;. DokuWiki предоставляет удобный ярлык &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=hsc&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;search definitions for hsc()&quot;&gt;hsc()&lt;/a&gt; для этой функции. Значения &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt;-адресов следует экранировать с помощью &lt;a href=&quot;https://secure.php.net/rawurlencode()&quot; class=&quot;interwiki iw_phpfn&quot; title=&quot;https://secure.php.net/rawurlencode()&quot;&gt;rawurlencode()&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
Кроме того, следует с подозрением относиться к любым данным вики, извлеченным и используемым внутри компании (например, именам пользователей).
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;проверка_входных_данных&quot;&gt;Проверка входных данных&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Всегда проверяйте все ваши входные данные. Используйте белые списки, фильтры, преобразования в точный тип данных, который вы имеете в виду, например, из числа, введенного как смешанное значение php, в целое число и т. д., чтобы убедиться, что у вас есть &lt;em class=&quot;u&quot;&gt;только&lt;/em&gt; разрешенные вами данные.
&lt;/p&gt;

&lt;p&gt;
Также ознакомьтесь с нашей главой об обработке &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:request_vars&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:request_vars&quot; data-wiki-id=&quot;wiki:devel:request_vars&quot;&gt;переменных запросов&lt;/a&gt;, таких как &lt;code&gt;_GET&lt;/code&gt;, &lt;code&gt;_POST&lt;/code&gt; или &lt;code&gt;_SERVER&lt;/code&gt;.
&lt;/p&gt;

&lt;/div&gt;

&lt;h5 id=&quot;смотрите_также&quot;&gt;Смотрите также:&lt;/h5&gt;
&lt;div class=&quot;level5&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://en.wikipedia.org/wiki/Cross-site scripting&quot; class=&quot;interwiki iw_wp&quot; title=&quot;https://en.wikipedia.org/wiki/Cross-site scripting&quot;&gt;Межсайтовый скриптинг&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/images/smileys/fixme.jpg&quot; class=&quot;icon smiley&quot; alt=&quot;FIXME&quot; /&gt;&lt;a href=&quot;http://ha.ckers.org/xss.html&quot; class=&quot;urlextern&quot; title=&quot;http://ha.ckers.org/xss.html&quot; rel=&quot;ugc nofollow&quot;&gt;Шпаргалка по XSS&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041c\u0435\u0436\u0441\u0430\u0439\u0442\u043e\u0432\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442\u0438\u043d\u0433 (XSS)&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043c\u0435\u0436\u0441\u0430\u0439\u0442\u043e\u0432\u044b\u0439_\u0441\u043a\u0440\u0438\u043f\u0442\u0438\u043d\u0433_xss&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;2182-5376&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit3&quot; id=&quot;типичные_примеры_уязвимостей&quot;&gt;Типичные примеры уязвимостей&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Ниже показаны некоторые очень распространенные проблемы. Примеры очень просты, чтобы сделать общую проблему понятной. Ваш плагин, вероятно, сложнее, но вам нужно отслеживать те же уязвимости.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;синтаксис_тела&quot;&gt;Синтаксис Тела&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Многие простые плагины синтаксиса принимают часть введенных пользователем данных и форматируют их в виде пользовательского &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt; .
&lt;/p&gt;

&lt;p&gt;
Пример: Вот плагин сокращенного синтаксиса, позволяющий выделить заданный ввод жирным шрифтом.
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; syntax_plugin_bold &lt;span class=&quot;kw2&quot;&gt;extends&lt;/span&gt; DokuWiki_Syntax_Plugin &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;// общие функции плагина опущены&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; connectTo&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;Lexer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addSpecialPattern&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;!!!.*?!!!&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;plugin_bold&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; handle&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$match&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$state&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$pos&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; Doku_Handler &lt;span class=&quot;re0&quot;&gt;$handler&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;substring&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$match&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; render&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$format&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; Doku_Renderer &lt;span class=&quot;re0&quot;&gt;$renderer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$data&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$format&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;xhtml&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$renderer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;doc&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;.=&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;b&amp;gt;&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$data&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;/b&amp;gt;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;  &lt;span class=&quot;co1&quot;&gt;// без экранирования&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Как вы можете видеть, необработанные входные данные, захваченные в шаблоне лексера, просто передаются в метод рендеринга, где экранирование вообще не выполняется. Злонамеренные пользователи могут вводить любой код JavaScript и &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt; , который они хотят.
&lt;/p&gt;

&lt;p&gt;
Решение простое: правильный побег.
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; syntax_plugin_bold &lt;span class=&quot;kw2&quot;&gt;extends&lt;/span&gt; DokuWiki_Syntax_Plugin &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;// общие функции плагина опущены&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; connectTo&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;Lexer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addSpecialPattern&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;!!!.*?!!!&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;plugin_bold&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; handle&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$match&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$state&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$pos&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; Doku_Handler &lt;span class=&quot;re0&quot;&gt;$handler&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;substring&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$match&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; render&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$format&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; Doku_Renderer &lt;span class=&quot;re0&quot;&gt;$renderer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$data&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$format&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;xhtml&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$renderer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;doc&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;.=&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;b&amp;gt;&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;a href=&quot;http://www.php.net/htmlspecialchars&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;htmlspecialchars&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$data&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;/b&amp;gt;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;//экранирование &lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4 id=&quot;формы&quot;&gt;Формы&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Когда ваш плагин предоставляет форму, очень часто требуется проверить вводимые данные и повторно отобразить форму с полученными данными пользователя в случае возникновения ошибки проверки.
&lt;/p&gt;

&lt;p&gt;
Пример: ниже показана форма, уязвимая для атаки XSS, поскольку она не экранирует правильно введенные пользователем данные:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&amp;lt;form action=&amp;quot;&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;q&amp;quot; value=&amp;quot;&lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$_REQUEST&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;q&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;?&amp;gt;&lt;/span&gt;&amp;quot; /&amp;gt; 
    &amp;lt;input type=&amp;quot;submit&amp;quot; /&amp;gt;                     //без экранирования
&amp;lt;/form&amp;gt;&lt;/pre&gt;

&lt;p&gt;
Предоставление данных &lt;code&gt;&amp;quot;&amp;gt;&amp;lt;script&amp;gt;alert(&amp;#039;bang&amp;#039;)&amp;lt;/script&amp;gt;&lt;/code&gt; в качестве входных данных пользователя приведет к эксплуатации уязвимости.
&lt;/p&gt;

&lt;p&gt;
Для исправления формы используйте функцию &lt;a href=&quot;https://secure.php.net/htmlspecialchars&quot; class=&quot;interwiki iw_phpfn&quot; title=&quot;https://secure.php.net/htmlspecialchars&quot;&gt;htmlspecialchars()&lt;/a&gt; или функцию DokuWiki shortcut &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:xref:hsc&quot; class=&quot;wikilink2&quot; title=&quot;wiki:xref:hsc&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:xref:hsc&quot;&gt;hsc()&lt;/a&gt;:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&amp;lt;form action=&amp;quot;&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;q&amp;quot; value=&amp;quot;&lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;echo&lt;/span&gt; hsc&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$_REQUEST&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;q&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;?&amp;gt;&lt;/span&gt;&amp;quot; /&amp;gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; /&amp;gt;                                      //экранирование
&amp;lt;/form&amp;gt;&lt;/pre&gt;

&lt;p&gt;
В целом рекомендуется не создавать формы вручную, а использовать &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:form&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:form&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:form&quot;&gt;библиотеку форм&lt;/a&gt; DokuWiki .
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;классы_и_другие_атрибуты&quot;&gt;Классы и другие атрибуты&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Часто плагины принимают несколько параметров и опций, которые используются для изменения выходных данных плагина.
&lt;/p&gt;

&lt;p&gt;
Представьте себе плагин, принимающий следующие входные данные для отображения окна сообщения:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;&amp;lt;msg warning&amp;gt;Do not believe anything!&amp;lt;/msg&amp;gt;&lt;/pre&gt;

&lt;p&gt;
В методе рендеринга этого синтаксиса может быть такой код:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$renderer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;doc&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;.=&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;div class=&amp;quot;msg_&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$class&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;quot;&amp;gt;&#039;&lt;/span&gt;  &lt;span class=&quot;co1&quot;&gt;//$class может быть чем угодно &lt;/span&gt;
                       &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;a href=&quot;http://www.php.net/htmlspecialchars&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;htmlspecialchars&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$message&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
                &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;/div&amp;gt;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;&lt;/pre&gt;

&lt;p&gt;
Как вы видите, само сообщение правильно экранировано, но класс — нет. Вместо экранирования может быть разумнее использовать белый список разрешенных классов с резервным вариантом по умолчанию::
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$allowed&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;notice&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;info&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;warning&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;error&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;   &lt;span class=&quot;co1&quot;&gt;// белый список &lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;&lt;a href=&quot;http://www.php.net/in_array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;in_array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$class&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$allowed&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;                         
    &lt;span class=&quot;re0&quot;&gt;$class&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;notice&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;// неизвестный ввод, вернуться к разумному значению по умолчанию&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$renderer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;doc&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;.=&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;div class=&amp;quot;msg_&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$class&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;quot;&amp;gt;&#039;&lt;/span&gt;
                       &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;a href=&quot;http://www.php.net/htmlspecialchars&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;htmlspecialchars&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$message&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
                &lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;/div&amp;gt;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4 id=&quot;входные_url-адреса&quot;&gt;входные URL-адреса&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Когда плагин принимает &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt;-адреса в качестве входных данных, необходимо убедиться, что пользователи не смогут передать &lt;code&gt;javascript://&lt;/code&gt; псевдо-протокол.
&lt;/p&gt;

&lt;p&gt;
Вот пример того, как может выглядеть очень простая проверка, позволяющая убедиться, что используются только &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt;-адреса http и https.
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// пустой URL при несоответствии протокола &lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;&lt;a href=&quot;http://www.php.net/preg_match&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;preg_match&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;/^https?:\/\//i&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$url&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$url&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0435_\u043f\u0440\u0438\u043c\u0435\u0440\u044b_\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;5377-11958&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;подделка_межсайтовых_запросов_csrf&quot;&gt;Подделка межсайтовых запросов (CSRF)&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Эта уязвимость часто появляется в плагинах из-за отсутствия понимания этой проблемы, ее часто путают с XSS.
&lt;/p&gt;

&lt;p&gt;
Подделка межсайтовых запросов относится к атаке, при которой вредоносный сайт обманывает браузер жертвы, запрашивая страницу на уязвимом сайте для выполнения нежелательного действия. Атака предполагает, что браузер жертвы имеет учетные данные для изменения чего-либо на уязвимом сайте.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;добавление_токена_безопасности&quot;&gt;Добавление токена безопасности&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
DokuWiki предлагает функции, которые помогут вам бороться с атаками CSRF. &lt;a href=&quot;https://codesearch.dokuwiki.org/xref/dokuwiki/inc/common.php?r=&amp;amp;mo=3231&amp;amp;fi=116#116&quot; class=&quot;urlextern&quot; title=&quot;https://codesearch.dokuwiki.org/xref/dokuwiki/inc/common.php?r=&amp;amp;mo=3231&amp;amp;fi=116#116&quot; rel=&quot;ugc nofollow&quot;&gt;getSecurityToken()&lt;/a&gt; создаст токен, который следует использовать для защиты любого аутентифицированного действия. Он должен быть включен в ссылки или формы, запускающие это действие. Все формы, созданные с помощью &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:form&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:form&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:form&quot;&gt;библиотеки форм&lt;/a&gt; будут иметь автоматически добавленные токены безопасности, для форм, созданных вручную, можно использовать функцию &lt;a href=&quot;https://codesearch.dokuwiki.org/xref/dokuwiki/inc/common.php?r=&amp;amp;mo=4438&amp;amp;fi=157#157&quot; class=&quot;urlextern&quot; title=&quot;https://codesearch.dokuwiki.org/xref/dokuwiki/inc/common.php?r=&amp;amp;mo=4438&amp;amp;fi=157#157&quot; rel=&quot;ugc nofollow&quot;&gt;formSecurityToken()&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
Вы как автор плагина несете ответственность за фактическую проверку токена перед выполнением авторизованных действий с использованием функции &lt;a href=&quot;https://codesearch.dokuwiki.org/xref/dokuwiki/inc/common.php?r=&amp;amp;mo=3783&amp;amp;fi=133#133&quot; class=&quot;urlextern&quot; title=&quot;https://codesearch.dokuwiki.org/xref/dokuwiki/inc/common.php?r=&amp;amp;mo=3783&amp;amp;fi=133#133&quot; rel=&quot;ugc nofollow&quot;&gt;checkSecurityToken()&lt;/a&gt;.
&lt;/p&gt;

&lt;/div&gt;

&lt;h5 id=&quot;see_also&quot;&gt;See also&lt;/h5&gt;
&lt;div class=&quot;level5&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://en.wikipedia.org/wiki/Cross Site Request Forgery&quot; class=&quot;interwiki iw_wp&quot; title=&quot;https://en.wikipedia.org/wiki/Cross Site Request Forgery&quot;&gt;Подделка межсайтовых запросов&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29&quot; class=&quot;urlextern&quot; title=&quot;https://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29&quot; rel=&quot;ugc nofollow&quot;&gt;Объяснение OWASP&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u043e\u0434\u0434\u0435\u043b\u043a\u0430 \u043c\u0435\u0436\u0441\u0430\u0439\u0442\u043e\u0432\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 (CSRF)&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u043e\u0434\u0434\u0435\u043b\u043a\u0430_\u043c\u0435\u0436\u0441\u0430\u0439\u0442\u043e\u0432\u044b\u0445_\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432_csrf&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:8,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;11959-14378&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit5&quot; id=&quot;типичный_пример_уязвимости&quot;&gt;Типичный пример уязвимости&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Ниже приведен простейший пример для начала. У вас может быть более сложный плагин для защиты, вот простой пример на основе формы.
&lt;/p&gt;

&lt;p&gt;
Представьте, что вы хотите узнать что-то, на что можно ответить «Да» или «Нет», у вас получится форма такого типа:
&lt;/p&gt;
&lt;pre class=&quot;code html4strict&quot;&gt;&lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/form.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;form&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;kw3&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;GET&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/input.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;input&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;kw3&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;radio&amp;quot;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;yn&amp;quot;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Yes&amp;quot;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/input.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;input&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;kw3&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;radio&amp;quot;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;yn&amp;quot;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;No&amp;quot;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/input.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;input&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;kw3&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;submit&amp;quot;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Answer&amp;quot;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/form.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;form&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Затем вы обрабатываете эту форму следующим образом:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;global&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$INPUT&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$INPUT&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;has&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;yn&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    do_something_with_yn&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$INPUT&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;yn&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Итак, пользователь подключен, чтобы ответить на этот вопрос, но он пока не знает ответа. Давайте уделим время размышлениям и просмотрим веб-страницы… Теперь пользователь посещает вредоносный веб-сайт, который знает или нет, что пользователь может быть подключен к вашему DokuWiki. На этом веб-сайте разработчик включил этот &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt;- тег изображения:
&lt;/p&gt;
&lt;pre class=&quot;code html4strict&quot;&gt;&lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/img.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;img&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;kw3&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;http://your.dokuwi.ki/formpage?yn=Yes&amp;quot;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Что тогда будет делать браузер пользователя?
&lt;/p&gt;

&lt;p&gt;
Браузер обработает это изображение как любое другое и отправит запрос на этот &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; . Ваш плагин увидит, что &lt;code&gt;$_GET[&amp;#039;yn&amp;#039;]&lt;/code&gt; установлено, и вызовет &lt;code&gt;do_something_with_yn()&lt;/code&gt; функцию.
&lt;/p&gt;

&lt;p&gt;
Это один из примеров CSRF. Теперь, как исправить эту дыру в безопасности?
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0439_\u043f\u0440\u0438\u043c\u0435\u0440_\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:8,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;14379-16501&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit6&quot; id=&quot;предотвращение_csrf-атак&quot;&gt;Предотвращение CSRF-атак&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Помните вашу форму выше? Давайте добавим в нее ввод:
&lt;/p&gt;
&lt;pre class=&quot;code html4strict&quot;&gt;&lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/form.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;form&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;kw3&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;GET&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/input.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;input&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;kw3&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;hidden&amp;quot;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;sectok&amp;quot;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;lt;?php getSecurityToken(); ?&amp;gt;&lt;/span&gt;&lt;/span&gt;&amp;quot; /&amp;gt;
    &lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/input.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;input&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;kw3&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;radio&amp;quot;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;yn&amp;quot;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Yes&amp;quot;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/input.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;input&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;kw3&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;radio&amp;quot;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;yn&amp;quot;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;No&amp;quot;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/input.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;input&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;kw3&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;submit&amp;quot;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Answer&amp;quot;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/form.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;form&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Видите первый ввод? Да? Хорошо. Теперь вам нужно проверить токен безопасности при получении формы, перед ее обработкой:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;global&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$INPUT&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$INPUT&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;has&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;yn&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; checkSecurityToken&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    do_something_with_yn&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$INPUT&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;yn&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Поскольку вредоносный веб-сайт никогда не найдет значение скрытого ввода «sectok», ваша форма больше не уязвима для CSRF.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Примечание&lt;/strong&gt;: Если токен безопасности недействителен, &lt;code&gt;checkSecurityToken()&lt;/code&gt; функция отображает сообщение, информирующее пользователя.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435 CSRF-\u0430\u0442\u0430\u043a&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435_csrf-\u0430\u0442\u0430\u043a&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:11,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;16502-17742&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit7&quot; id=&quot;удаленное_включение_кода&quot;&gt;Удаленное включение кода&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Эта атака позволяет злоумышленнику внедрить код (PHP) в ваше приложение. Это может произойти при включении файлов или использовании небезопасных функций операций, таких как &lt;a href=&quot;https://secure.php.net/eval()&quot; class=&quot;interwiki iw_phpfn&quot; title=&quot;https://secure.php.net/eval()&quot;&gt;eval()&lt;/a&gt; или &lt;a href=&quot;https://secure.php.net/system()&quot; class=&quot;interwiki iw_phpfn&quot; title=&quot;https://secure.php.net/system()&quot;&gt;system()&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Всегда фильтруйте любые входные данные&lt;/strong&gt;, которые будут использоваться для загрузки файлов или которые передаются в качестве аргумента внешним командам.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0423\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435_\u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435_\u043a\u043e\u0434\u0430&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:13,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;17743-18449&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit8&quot; id=&quot;утечка_информации&quot;&gt;Утечка информации&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Эта атака может привести к раскрытию файлов, которые обычно должны быть защищены &lt;abbr title=&quot;Access Control List&quot;&gt;ACL&lt;/abbr&gt; DokuWiki , или может раскрыть файлы на сервере (например, &lt;code&gt;/etc/passwd&lt;/code&gt;).
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Всегда фильтруйте любые входные данные,&lt;/strong&gt; которые будут использоваться для загрузки файлов или которые передаются в качестве аргумента внешним командам.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Всегда используйте функции проверки &lt;abbr title=&quot;Access Control List&quot;&gt;ACL&lt;/abbr&gt; DokuWiki при доступе к данным страницы.&lt;/strong&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0423\u0442\u0435\u0447\u043a\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0443\u0442\u0435\u0447\u043a\u0430_\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:13,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;18450-19192&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit9&quot; id=&quot;sql-инъекция&quot;&gt;SQL-инъекция&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Эта атака редко актуальна в DokuWiki, поскольку база данных не используется. Однако, если ваш плагин обращается к базе данных, всегда экранируйте все значения перед их использованием в операторах SQL.
&lt;/p&gt;

&lt;p&gt;
Дополнительная информация:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://en.wikipedia.org/wiki/SQL injection&quot; class=&quot;interwiki iw_wp&quot; title=&quot;https://en.wikipedia.org/wiki/SQL injection&quot;&gt;SQL-инъекция&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;SQL-\u0438\u043d\u044a\u0435\u043a\u0446\u0438\u044f&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;sql-\u0438\u043d\u044a\u0435\u043a\u0446\u0438\u044f&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:13,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;19193-19684&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit10&quot; id=&quot;сообщение_о_проблемах_безопасности&quot;&gt;Сообщение о проблемах безопасности&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Если у вас возникли проблемы с плагином, сообщите об этом автору плагина по электронной почте, при желании указав &lt;a href=&quot;mailto:&amp;#97;&amp;#110;&amp;#100;&amp;#105;&amp;#64;&amp;#115;&amp;#112;&amp;#108;&amp;#105;&amp;#116;&amp;#98;&amp;#114;&amp;#97;&amp;#105;&amp;#110;&amp;#46;&amp;#111;&amp;#114;&amp;#103;&quot; class=&quot;mail&quot; title=&quot;&amp;#97;&amp;#110;&amp;#100;&amp;#105;&amp;#64;&amp;#115;&amp;#112;&amp;#108;&amp;#105;&amp;#116;&amp;#98;&amp;#114;&amp;#97;&amp;#105;&amp;#110;&amp;#46;&amp;#111;&amp;#114;&amp;#103;&quot;&gt;Andi&lt;/a&gt; or the &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:mailinglist&quot; class=&quot;wikilink1&quot; title=&quot;wiki:mailinglist&quot; data-wiki-id=&quot;wiki:mailinglist&quot;&gt;список рассылки&lt;/a&gt; on CC.
&lt;/p&gt;

&lt;p&gt;
Дополнительно к &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:lugin:repository&quot; class=&quot;wikilink2&quot; title=&quot;wiki:lugin:repository&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:lugin:repository&quot;&gt;данным&lt;/a&gt; на странице плагина &lt;code&gt;securityissue&lt;/code&gt; следует добавить поле с кратким описанием проблемы . Это создаст красное предупреждающее поле и исключит плагин из основного списка плагинов.
&lt;/p&gt;

&lt;p&gt;
После устранения проблемы и выпуска новой версии это поле следует снова удалить.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0445 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435_\u043e_\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0445_\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:13,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;19685-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Fri, 03 Jan 2025 14:48:19 +0000</pubDate>
        </item>
        <item>
            <title>smileys.conf</title>
            <link>https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:smileys.conf&amp;rev=1736847951</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;smileysconf&quot;&gt;smileys.conf&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Используется для замены текстовых макросов графическим представлением. Также может использоваться для размещения других изображений &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:smileys&quot; class=&quot;wikilink1&quot; title=&quot;wiki:smileys&quot; data-wiki-id=&quot;wiki:smileys&quot;&gt;smileys&lt;/a&gt; внутри текстового потока.
&lt;/p&gt;

&lt;p&gt;
Текст заменяется, если он найден в исходном коде вики-страницы, другой синтаксис не требуется.
&lt;/p&gt;
&lt;pre class=&quot;file&quot;&gt;# Настроенные здесь смайлики будут заменены на
# настроенные изображения в каталоге смайликов

8-)         icon_cool.gif
8-O         icon_eek.gif
8-o         icon_eek.gif
:-(         icon_sad.gif
:-)         icon_smile.gif
=)          icon_smile2.gif
:-/         icon_doubt.gif
:-\         icon_doubt2.gif
:-?         icon_confused.gif
:-D         icon_biggrin.gif
:-P         icon_razz.gif
:-o         icon_surprised.gif
:-O         icon_surprised.gif
:-x         icon_silenced.gif
:-X         icon_silenced.gif
:-|         icon_neutral.gif
;-)         icon_wink.gif
m(          facepalm.gif
^_^         icon_fun.gif
:?:         icon_question.gif
:!:         icon_exclaim.gif
LOL         icon_lol.gif
FIXME       fixme.gif
DELETEME    delete.gif&lt;/pre&gt;

&lt;p&gt;
Или находится в репозитории git: &lt;code&gt;&lt;a href=&quot;https://github.com/dokuwiki/dokuwiki/blob/master/conf/smileys.conf&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/dokuwiki/dokuwiki/blob/master/conf/smileys.conf&quot; rel=&quot;ugc nofollow&quot;&gt;conf/smileys.conf&lt;/a&gt;&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
Администраторы Вики должны разместить свои смайлики &lt;code&gt;conf/smileys.local.conf&lt;/code&gt;, см. также &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:smileys#настройка_смайликов&quot; class=&quot;wikilink1&quot; title=&quot;wiki:smileys&quot; data-wiki-id=&quot;wiki:smileys&quot;&gt;Настройка смайликов&lt;/a&gt;.
&lt;/p&gt;

&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Tue, 14 Jan 2025 09:45:51 +0000</pubDate>
        </item>
        <item>
            <title>style.ini</title>
            <link>https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:style.ini&amp;rev=1693220085</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;шаблон_styleini&quot;&gt;Шаблон style.ini&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
The &lt;code&gt;style.ini&lt;/code&gt; is an &lt;a href=&quot;https://en.wikipedia.org/wiki/INI_file&quot; class=&quot;interwiki iw_wp&quot; title=&quot;https://en.wikipedia.org/wiki/INI_file&quot;&gt;ini file&lt;/a&gt; in each &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:template&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:template&quot; data-wiki-id=&quot;wiki:devel:template&quot;&gt;template&lt;/a&gt;&amp;#039;s directory&lt;sup&gt;&lt;a href=&quot;#fn__10&quot; id=&quot;fnt__10&quot; class=&quot;fn_top&quot;&gt;10)&lt;/a&gt;&lt;/sup&gt; configuring the generation of &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:css&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:css&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:css&quot;&gt;CSS&lt;/a&gt; styles. It has two sections: [stylesheets] and [replacements] described below.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0428\u0430\u0431\u043b\u043e\u043d style.ini&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0448\u0430\u0431\u043b\u043e\u043d_styleini&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-269&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;stylesheets&quot;&gt;[stylesheets]&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
This part defines which &lt;abbr title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/abbr&gt; files are loaded. Each line is defined as follow:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;cssfile.css = mode&lt;/pre&gt;

&lt;p&gt;
&lt;code&gt;cssfile.css&lt;/code&gt; is your file name and &lt;code&gt;mode&lt;/code&gt; is one of the supported output modes as described at &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:css#stylesheet_modes&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:css&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:css&quot;&gt;mode&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
The stylesheet can also be a &lt;code&gt;.less&lt;/code&gt; file. (See &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:less&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:less&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:less&quot;&gt;LESS&lt;/a&gt;).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;[stylesheets]&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;stylesheets&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;270-591&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;replacements&quot;&gt;[replacements]&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
DokuWiki&amp;#039;s &lt;abbr title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/abbr&gt; dispatcher is able to replace placeholders in the loaded stylesheets which are configured through the &lt;code&gt;[replacements]&lt;/code&gt; section in the templates &lt;code&gt;style.ini&lt;/code&gt;. This is especially useful for defining a color scheme once and reuse these colors in all files.
&lt;/p&gt;

&lt;p&gt;
These replacements can also be used as &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:less#accessing_styleini_placeholders&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:less&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:less&quot;&gt;LESS variables&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
The Styling Plugin let users preview and change the appearance of any template based on the defined replacements. See the &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=plugin:styling&quot; class=&quot;wikilink2&quot; title=&quot;plugin:styling&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;plugin:styling&quot;&gt;Styling Plugin&lt;/a&gt; for details.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;[replacements]&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;replacements&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;592-1159&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit4&quot; id=&quot;guaranteed_color_placeholders&quot;&gt;Guaranteed color placeholders&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
The following placeholders are the only ones that are safe to be used by plugins. All templates have to implement these at least, but are free to add more.
&lt;/p&gt;
&lt;div class=&quot;table sectionedit5&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;thead&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; placeholder variable        &lt;/th&gt;&lt;th class=&quot;col1 leftalign&quot;&gt; meaning                                                                                 &lt;/th&gt;
	&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;__background__&lt;/code&gt;      &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; main background color                                                                   &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;__background_alt__&lt;/code&gt;  &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; alternative background color (also used for the theme color in the &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=devel:manifest&quot; class=&quot;wikilink2&quot; title=&quot;devel:manifest&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;devel:manifest&quot;&gt;manifest&lt;/a&gt;)  &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;__background_neu__&lt;/code&gt;  &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; neutral background color                                                                &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;__border__&lt;/code&gt;          &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; border color                                                                            &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;__text__&lt;/code&gt;            &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; main text color                                                                         &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row6&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;__text_alt__&lt;/code&gt;        &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; alternative text color                                                                  &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row7&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;__text_neu__&lt;/code&gt;        &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; neutral text color                                                                      &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row8&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;__highlight__&lt;/code&gt;       &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; highlighted text color (&lt;strong&gt;new&lt;/strong&gt; since Adora Belle)                                      &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row9&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;__link__&lt;/code&gt;            &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; the general link color (&lt;strong&gt;new&lt;/strong&gt; since Greebo)                                           &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;1358-2577&amp;quot;} --&gt;
&lt;p&gt;
Template authors should generally try to reuse the placeholder names of the default template.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Guaranteed color placeholders&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;guaranteed_color_placeholders&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;1160-2673&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit6&quot; id=&quot;example&quot;&gt;Example&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
See for example the &lt;a href=&quot;https://github.com/selfthinker/dokuwiki_template_starter/blob/master/style.ini&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/selfthinker/dokuwiki_template_starter/blob/master/style.ini&quot; rel=&quot;ugc nofollow&quot;&gt;style.ini&lt;/a&gt; of the Starter template for an overview of the file. If your are a wiki admin who like to modify the style, please use a &lt;a href=&quot;#local_styleini&quot; title=&quot;wiki:devel:style.ini ↵&quot; class=&quot;wikilink1&quot;&gt;local style.ini&lt;/a&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Example&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;example&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;2674-2951&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit7&quot; id=&quot;local_styleini&quot;&gt;Local style.ini&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Loal changes can be stored in a local &lt;code&gt;style.ini&lt;/code&gt; at the location &lt;code&gt;conf/tpl/&amp;lt;tpl&amp;gt;/style.ini&lt;/code&gt;. (Where &lt;code&gt;&amp;lt;tpl&amp;gt;&lt;/code&gt; needs to be substituted with the name of the template folder. Just create it if it doesn&amp;#039;t exist.)
&lt;/p&gt;

&lt;p&gt;
This prevents losing those changes after an upgrade. The file still needs to include each section (i.e. &lt;code&gt;[stylesheets]&lt;/code&gt; or &lt;code&gt;[replacements]&lt;/code&gt;) and paths are relative to the added ini file.
&lt;/p&gt;

&lt;p&gt;
If you use the &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=plugin:styling&quot; class=&quot;media&quot; title=&quot;plugin:styling&quot; data-wiki-id=&quot;plugin:styling&quot;&gt;&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/exe/fetch.php?w=16&amp;amp;tok=7fc6d1&amp;amp;media=https%3A%2F%2Fraw.githubusercontent.com%2Fdokuwiki%2Fdokuwiki%2Fmaster%2Flib%2Fplugins%2Fstyling%2Fadmin.svg&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;16&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=plugin:styling&quot; class=&quot;wikilink2&quot; title=&quot;plugin:styling&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;plugin:styling&quot;&gt;Styling Plugin&lt;/a&gt; you can preview and change the replacement values via the admin interface, before it is stored in this file.
&lt;/p&gt;

&lt;p&gt;
Example:
&lt;/p&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=wiki:devel:style.ini&amp;amp;codeblock=0&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_ini&quot;&gt;conf/tpl/dokuwiki/style.ini&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code ini&quot;&gt;&lt;span class=&quot;re0&quot;&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;stylesheets&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;/span&gt;
extra.css  &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;re2&quot;&gt; all&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;re0&quot;&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;replacements&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;re1&quot;&gt;__text__&lt;/span&gt;        &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;#000&amp;quot;&lt;/span&gt;
&lt;span class=&quot;re1&quot;&gt;__site_width__&lt;/span&gt;  &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;100%&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Local style.ini&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;local_styleini&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;2952-&amp;quot;} --&gt;&lt;div class=&quot;footnotes&quot;&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__10&quot; id=&quot;fn__10&quot; class=&quot;fn_bot&quot;&gt;10)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;if the template supports it&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Mon, 28 Aug 2023 10:54:45 +0000</pubDate>
        </item>
        <item>
            <title>syntax_plugin_skeleton</title>
            <link>https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:syntax_plugin_skeleton&amp;rev=1736417126</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;скелет_синтаксического_плагина&quot;&gt;Скелет синтаксического плагина&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=wiki:devel:syntax_plugin_skeleton&amp;amp;codeblock=0&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_php&quot;&gt;syntax.php&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class=&quot;co4&quot;&gt;/**
 * Плагин Skeleton: отображает «Hello World!»
 *
 * Синтаксис: &amp;lt;TEST&amp;gt; — будет заменен на «Hello World!»
 *
 * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
 * @автор Кристофер Смит &amp;lt;chris@jalakai.co.uk&amp;gt;
 */&lt;/span&gt;
&amp;nbsp;
&amp;nbsp;
&lt;span class=&quot;co4&quot;&gt;/**
 * Все плагины DokuWiki для расширения механизма парсера/рендеринга
 * необходимо унаследовать от этого класса
 */&lt;/span&gt; 
&lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; syntax_plugin_test &lt;span class=&quot;kw2&quot;&gt;extends&lt;/span&gt; DokuWiki_Syntax_Plugin &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
   &lt;span class=&quot;co4&quot;&gt;/**
    * Получите тип синтаксиса, который определяет этот плагин.
    *
    * @параметр нет
    * @return String &amp;lt;tt&amp;gt;&#039;substition&#039;&amp;lt;/tt&amp;gt; (т. е. &#039;подстановка&#039;).
    * @общественность
    * @статичный
    */&lt;/span&gt; 
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; &lt;a href=&quot;http://www.php.net/gettype&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;getType&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;substition&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co4&quot;&gt;/**
     * Какой синтаксис мы допускаем (необязательно)
     */&lt;/span&gt; 
&lt;span class=&quot;co1&quot;&gt;//    function getAllowedTypes() {&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;//        return array();&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;//    }&lt;/span&gt;
&amp;nbsp;
   &lt;span class=&quot;co4&quot;&gt;/**
    * Определите, как этот плагин обрабатывается в отношении абзацев.
    *
    * &amp;lt;р&amp;gt;
    * Этот метод важен для правильного вложения XHTML. Он возвращает
    * одно из следующих значений:
    * &amp;lt;/р&amp;gt;
    * &amp;lt;дл&amp;gt;
    * &amp;lt;dt&amp;gt;normal&amp;lt;/dt&amp;gt;&amp;lt;dd&amp;gt;Плагин можно использовать внутри абзацев.&amp;lt;/dd&amp;gt;
    * &amp;lt;dt&amp;gt;блок&amp;lt;/dt&amp;gt;&amp;lt;dd&amp;gt;Открытые абзацы необходимо закрыть перед
    * вывод плагина.&amp;lt;/dd&amp;gt;
    * &amp;lt;dt&amp;gt;стек&amp;lt;/dt&amp;gt;&amp;lt;dd&amp;gt;Особый случай: плагин оборачивает другие абзацы.&amp;lt;/dd&amp;gt;
    * &amp;lt;/dl&amp;gt;
    * @параметр нет
    * @return String &amp;lt;tt&amp;gt;&#039;блок&#039;&amp;lt;/tt&amp;gt;.
    * @общественность
    * @статичный
    */&lt;/span&gt; 
&lt;span class=&quot;co1&quot;&gt;//    function getPType(){&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;//        return &#039;normal&#039;;&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;//    }&lt;/span&gt;
&amp;nbsp;
   &lt;span class=&quot;co4&quot;&gt;/** 
    * Где сортировать? 
    * 
    * @param none 
    * @return Integer &amp;lt;tt&amp;gt;6&amp;lt;/tt&amp;gt;. 
    * @public 
    * @static 
    */&lt;/span&gt; 
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; getSort&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;999&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&amp;nbsp;
   &lt;span class=&quot;co4&quot;&gt;/** 
    * Подключить шаблон поиска к лексеру. 
    * 
    * @param $aMode String Требуемый режим визуализации.
    * @return none 
    * @public 
    * @see render() 
    */&lt;/span&gt; 
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; connectTo&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
      &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;Lexer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addSpecialPattern&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;TEST&amp;gt;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;plugin_test&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;//      $this-&amp;gt;Lexer-&amp;gt;addEntryPattern(&#039;&amp;lt;TEST&amp;gt;&#039;,$mode,&#039;plugin_test&#039;);&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;//    function postConnect() {&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;//      $this-&amp;gt;Lexer-&amp;gt;addExitPattern(&#039;&amp;lt;/TEST&amp;gt;&#039;,&#039;plugin_test&#039;);&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;//    }&lt;/span&gt;
&amp;nbsp;
&amp;nbsp;
   &lt;span class=&quot;co4&quot;&gt;/** 
    * Обработчик для подготовки сопоставленных данных для процесса рендеринга. 
    * 
    * &amp;lt;p&amp;gt; 
    * Параметр &amp;lt;tt&amp;gt;$aState&amp;lt;/tt&amp;gt; задает тип шаблона 
    , * который вызвал вызов этого метода: 
    * &amp;lt;/p&amp;gt; 
    * &amp;lt;dl&amp;gt; 
    * &amp;lt;dt&amp;gt;DOKU_LEXER_ENTER&amp;lt;/dt&amp;gt; 
    * &amp;lt;dd&amp;gt;шаблон , установленный функцией &amp;lt;tt&amp;gt;addEntryPattern()&amp;lt;/tt&amp;gt;&amp;lt;/dd&amp;gt; * 
    &amp;lt;dt&amp;gt;DOKU_LEXER_MATCHED &amp;lt;/dt&amp;gt; * &amp;lt;dd&amp;gt; 
    шаблон, установленный функцией &amp;lt;tt&amp;gt;addPattern()&amp;lt;/tt&amp;gt;&amp;lt;/dd&amp;gt; 
    * &amp;lt;dt&amp;gt;DOKU_LEXER_EXIT &amp;lt;/dt&amp;gt; 
    * &amp;lt;dd&amp;gt;шаблон, установленный функцией &amp;lt;tt&amp;gt;addExitPattern()&amp;lt;/tt&amp;gt; &amp;lt;/dd&amp;gt; 
    * &amp;lt;dt&amp;gt;DOKU_LEXER_SPECIAL&amp;lt;/dt&amp;gt; 
    * &amp;lt;dd&amp;gt;шаблон, установленный функцией &amp;lt;tt&amp;gt;addSpecialPattern()&amp;lt;/tt&amp;gt;&amp;lt;/dd&amp;gt; 
    * &amp;lt;dt&amp;gt;DOKU_LEXER_UNMATCHED&amp;lt;/dt&amp;gt; 
    * &amp;lt;dd&amp;gt;обычный текст, встречающийся в режим синтаксиса плагина 
    , * который не соответствует ни одному шаблону.&amp;lt;/dd&amp;gt; 
    * &amp;lt;/dl&amp;gt; 
    * @param $aMatch String Текст, соответствующий шаблонам. 
    * @param $aState Integer Состояние лексера для сопоставления. 
    * @param $aPos Integer Позиция символа сопоставленного текста. 
    * @param $aHandler Object Ссылка на объект Doku_Handler. 
    * @return Integer Текущее состояние лексера для сопоставления. 
    * @public 
    * @see render() 
    * @static 
    */&lt;/span&gt; 
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; handle&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$match&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$state&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$pos&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; Doku_Handler &lt;span class=&quot;re0&quot;&gt;$handler&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;switch&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$state&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
          &lt;span class=&quot;kw1&quot;&gt;case&lt;/span&gt; DOKU_LEXER_ENTER &lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; 
            &lt;span class=&quot;kw1&quot;&gt;break&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
          &lt;span class=&quot;kw1&quot;&gt;case&lt;/span&gt; DOKU_LEXER_MATCHED &lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;break&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
          &lt;span class=&quot;kw1&quot;&gt;case&lt;/span&gt; DOKU_LEXER_UNMATCHED &lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;break&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
          &lt;span class=&quot;kw1&quot;&gt;case&lt;/span&gt; DOKU_LEXER_EXIT &lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;break&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
          &lt;span class=&quot;kw1&quot;&gt;case&lt;/span&gt; DOKU_LEXER_SPECIAL &lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;break&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
   &lt;span class=&quot;co4&quot;&gt;/** 
    * Обработка фактического создания выходных данных. 
    * 
    * &amp;lt;p&amp;gt; 
    * Метод проверяет заданный &amp;lt;tt&amp;gt;$aFormat&amp;lt;/tt&amp;gt; и возвращает
    * &amp;lt;tt&amp;gt;FALSE&amp;lt;/tt&amp;gt;, если формат не поддерживается. &amp;lt;tt&amp;gt;$aRenderer&amp;lt;/tt&amp;gt; 
    * содержит ссылку на объект рендерера, который в данный момент 
    * обрабатывает рендеринг. Содержимое &amp;lt;tt&amp;gt;$aData&amp;lt;/tt&amp;gt; является 
    * возвращаемым значением метода &amp;lt;tt&amp;gt;handle()&amp;lt;/tt&amp;gt;. 
    * &amp;lt;/p&amp;gt; 
    * @param $aFormat String Формат выходных данных для генерации. 
    * @param $aRenderer Object Ссылка на объект рендерера. 
    * @param $aData Array Данные, созданные методом &amp;lt;tt&amp;gt;handle()&amp;lt;/tt&amp;gt; 
    *. 
    * @return Boolean &amp;lt;tt&amp;gt;TRUE&amp;lt;/tt&amp;gt; при успешном рендеринге или 
    * &amp;lt;tt&amp;gt;FALSE&amp;lt;/tt&amp;gt; в противном случае. 
    * @public 
    * @see handle() 
    */&lt;/span&gt; 
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; render&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; Doku_Renderer &lt;span class=&quot;re0&quot;&gt;$renderer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$data&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;xhtml&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
            &lt;span class=&quot;re0&quot;&gt;$renderer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;doc&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;.=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Hello World!&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;            &lt;span class=&quot;co1&quot;&gt;// ptype = &#039;normal&#039;&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;//            $renderer-&amp;gt;doc .= &amp;quot;&amp;lt;p&amp;gt;Hello World!&amp;lt;/p&amp;gt;&amp;quot;;     // ptype = &#039;block&#039;&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0421\u043a\u0435\u043b\u0435\u0442 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u043b\u0430\u0433\u0438\u043d\u0430&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0441\u043a\u0435\u043b\u0435\u0442_\u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e_\u043f\u043b\u0430\u0433\u0438\u043d\u0430&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-6371&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;примечание&quot;&gt;Примечание:&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Имя этого плагина — &lt;code&gt;test&lt;/code&gt;. Это видно по имени класса: &lt;code&gt;syntax_plugin_test&lt;/code&gt; — все, что следует далее, &lt;code&gt;syntax_plugin_&lt;/code&gt; воспринимается как имя плагина.
&lt;/p&gt;

&lt;p&gt;
Поскольку имя плагина — &lt;code&gt;test&lt;/code&gt;, его нужно сохранить в  &lt;code&gt;lib/plugins/test&lt;/code&gt; чтобы DokuWiki автоматически распознал его. Его нужно сохранить как syntax.php
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435:&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;6372-6896&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;дополнения_и_файлы&quot;&gt;Дополнения и Файлы&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
см. также
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:plugin_programming_tips&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:plugin_programming_tips&quot; data-wiki-id=&quot;wiki:devel:plugin_programming_tips&quot;&gt;plugin_programming_tips&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.dokuwiki.org/devel:syntax_plugin_skeleton&quot; class=&quot;urlextern&quot; title=&quot;https://www.dokuwiki.org/devel:syntax_plugin_skeleton&quot; rel=&quot;ugc nofollow&quot;&gt;Ссылки на источник статьи&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:plugin_development_icon&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:plugin_development_icon&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:plugin_development_icon&quot;&gt;plugin_development_icon&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0414\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u0424\u0430\u0439\u043b\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f_\u0438_\u0444\u0430\u0439\u043b\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;6897-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Thu, 09 Jan 2025 10:05:26 +0000</pubDate>
        </item>
        <item>
            <title>syntax_plugins</title>
            <link>https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:syntax_plugins&amp;rev=1736451851</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;синтаксические_плагины&quot;&gt;Синтаксические плагины&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Синтаксические плагины — это плагины расширения синтаксиса «&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:dokuwiki&quot; class=&quot;wikilink1&quot; title=&quot;wiki:dokuwiki&quot; data-wiki-id=&quot;wiki:dokuwiki&quot;&gt;ДокуВики&lt;/a&gt;». Чтобы понять, что необходимо для регистрации нового синтаксиса в «ДокуВики», вы должны прочитать, как работает &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:parser&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:parser&quot; data-wiki-id=&quot;wiki:devel:parser&quot;&gt;парсер&lt;/a&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0435_\u043f\u043b\u0430\u0433\u0438\u043d\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-441&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;краткий_обзор&quot;&gt;Краткий обзор&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Для синтаксического плагина &lt;em&gt;example&lt;/em&gt; требуется объявить имя класса как &lt;code&gt;syntax_plugin_&amp;lt;example&amp;gt;&lt;/code&gt;, который расширяет класс &lt;code&gt;DokuWiki_Syntax_Plugin&lt;/code&gt;, определённый в файле &lt;code&gt;lib/plugins/syntax.php&lt;/code&gt;. Класс необходимо сохранить в файле с названием &lt;code&gt;lib/plugins/example/syntax.php&lt;/code&gt;. Для более подробной информации можно обратиться к статье о &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:plugin_file_structure&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:plugin_file_structure&quot; data-wiki-id=&quot;wiki:devel:plugin_file_structure&quot;&gt;структуре файлов плагина&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
Класс должен содержать как минимум следующие функции:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;del&gt;&lt;code&gt;getInfo()&lt;/code&gt; — возвращает хэш с информацией о плагине: автор, электропочта, дата, название, описание, ссылки.&lt;/del&gt;&lt;br/&gt;
&lt;strong&gt;Теперь вместо неё прилагается отдельный файл plugin.info.txt&lt;/strong&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;getType()&lt;/code&gt; — должен возвращать тип синтаксиса (см. &lt;a href=&quot;#синтаксические_типы&quot; title=&quot;wiki:devel:syntax_plugins ↵&quot; class=&quot;wikilink1&quot;&gt;ниже&lt;/a&gt;).&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;getSort()&lt;/code&gt; — возвращает число, по которому определяется, в каком порядке должны добавляться состояния, см. также  &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:parser#order_of_adding_modes_important&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:parser&quot; data-wiki-id=&quot;wiki:devel:parser&quot;&gt;parser, order of adding modes&lt;/a&gt; и &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:parser:getsort_list&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:parser:getsort_list&quot; data-wiki-id=&quot;wiki:devel:parser:getsort_list&quot;&gt;getSort list&lt;/a&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;connectTo($mode)&lt;/code&gt; — эта функция наследуется от класса Doku_Parser_Mode, определённого в &lt;code&gt;inc/parser/parser.php&lt;/code&gt;. Это место, где регистрируется регулярные выражения, необходимые для опознания вашего синтаксиса.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;handle($match, $state, $pos, Doku_Handler $handler)&lt;/code&gt; — функция для подготовки совпавшего синтаксиса для использования рендером.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;render($mode, Doku_Renderer $renderer, $data)&lt;/code&gt; — функция для отображения контента.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;br/&gt;

&lt;/p&gt;

&lt;p&gt;
Следующие дополнительные методы могут быть переопределены при необходимости:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;getPType()&lt;/code&gt; — определяет, как данный синтаксис размещается относительно параграфов&lt;sup&gt;&lt;a href=&quot;#fn__1&quot; id=&quot;fnt__1&quot; class=&quot;fn_top&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt;. Возвращает:&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;  &lt;code&gt;normal&lt;/code&gt; — (значение по умолчанию, используется, если метод не переопределяется) Плагин может использоваться внутри параграфов,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;block&lt;/code&gt; — Открытые параграфы должны быть закрыты до вывода плагина или &lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;stack&lt;/code&gt; — Специальный случай. Плагин обёртывает другие параграфы&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;getAllowedTypes()&lt;/code&gt; (значение по умолчанию: &lt;code&gt;array()&lt;/code&gt;) Должен вернуть массив &lt;a href=&quot;#синтаксические_типы&quot; title=&quot;wiki:devel:syntax_plugins ↵&quot; class=&quot;wikilink1&quot;&gt;типов состояний&lt;/a&gt;, которые могут быть включены в собственную разметку плагина.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;accepts($mode)&lt;/code&gt; — Эта функция говорит парсеру, допускает ли плагин синтаксическое состояние $mode в своей разметке. Поведение по умолчанию заключается в проверке наличия $mode в массиве состояний, хранящемся в унаследованном свойстве &lt;code&gt;allowedModes&lt;/code&gt;. &lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
При необходимости могут быть определены дополнительные функции. Рекомендуется добавлять впереди символ подчерка к названиям самостоятельно определённых функций для того, чтобы избежать возможных пересечений имён при дальнейшем развитии спецификации плагинов.   
&lt;br/&gt;

&lt;/p&gt;

&lt;p&gt;
Унаследованные свойства
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;allowedModes&lt;/code&gt; — начальное значение: пустой массив, унаследованный от  класса &lt;code&gt;Doku_Parser_Mode&lt;/code&gt;, определённого в &lt;code&gt;inc/parser/parser.php&lt;/code&gt;. Содержит список других синтаксических состояний, появление которых допустимо внутри собственного синтаксического состояния плагина (т. е. состояния, которые относятся к любым другим элементам разметки «ДокуВики», которые могут быть включены внутрь собственной разметки плагина). Обычно он автоматически заполняется функцией &lt;code&gt;accepts()&lt;/code&gt;, используя результаты &lt;code&gt;getAllowedTypes()&lt;/code&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041a\u0440\u0430\u0442\u043a\u0438\u0439 \u043e\u0431\u0437\u043e\u0440&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043a\u0440\u0430\u0442\u043a\u0438\u0439_\u043e\u0431\u0437\u043e\u0440&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;442-5673&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;синтаксические_типы&quot;&gt;Синтаксические типы&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
«ДокуВики» использует различные синтаксические типы для того, чтобы определить, какие синтаксические конструкции могут быть вставлены внутрь другой. Например, вы можете вставить текстовое форматирование внутрь таблицы. 
&lt;/p&gt;

&lt;p&gt;
Для того, чтобы интегрировать свой плагин в эту систему, нужно указать, какой тип он имеет и какие типы могут вставляться в него. В настоящий момент доступны следующие типы: 
&lt;/p&gt;
&lt;div class=&quot;table sectionedit4&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;thead&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Тип  &lt;/th&gt;&lt;th class=&quot;col1 leftalign&quot;&gt; Используется в…   &lt;/th&gt;&lt;th class=&quot;col2 leftalign&quot;&gt; Описание  &lt;/th&gt;
	&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; container &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; listblock, table, quote, hr &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Контейнеры — это сложные состояния, которые могут содержать много других состояний, но они не должны использоваться в таблицах и списках (состояние &lt;code&gt;hr&lt;/code&gt; нарушает общий принцип), поэтому они отнесены к этому типу. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; baseonly &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; header &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Некоторые состояния допустимы только внутри базового состояния. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; formatting &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; strong, emphasis, underline, monospace, subscript, superscript, deleted, footnote &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Состояния для изменения стиля текста (сноски (footnote) также можно рассматривать как стиль). &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; substition&lt;sup&gt;&lt;a href=&quot;#fn__2&quot; id=&quot;fnt__2&quot; class=&quot;fn_top&quot;&gt;2)&lt;/a&gt;&lt;/sup&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; acronym, smiley, wordblock, entity, camelcaselink, internallink, media, externallink, linebreak, emaillink, windowssharelink, filelink, notoc, nocache, multiplyentity, quotes, rss &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Состояния, в которых токен просто меняется на что-то; не могут содержать в себе другие состояния. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; protected &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; preformatted, code, file, php, html &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt;Состояния, имеющие начальный и конечный токены, но внутри которых не допустимы никакие другие состояния. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row6&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; disabled &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; unformatted &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Внутри этого состояния вики-разметка не отрабатывается, переносы строки и пробелы не сохраняются. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row7&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; paragraphs &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; eol &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Используется для отметки границ параграфов. &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;6452-8649&amp;quot;} --&gt;
&lt;p&gt;
Для описания того, что каждый из типов значит и какие другие классы форматирования зарегистрированы в них, читайте комментарии в файле  &lt;code&gt;inc/parser/parser.php&lt;/code&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0442\u0438\u043f\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0435_\u0442\u0438\u043f\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;5674-8927&amp;quot;} --&gt;
&lt;h1 class=&quot;sectionedit5&quot; id=&quot;руководстворазбор_синтаксического_плагина&quot;&gt;Руководство: разбор синтаксического плагина&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Цель данного руководства — разобрать концепции, касающиеся &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:syntax_plugins&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:syntax_plugins&quot; data-wiki-id=&quot;wiki:devel:syntax_plugins&quot;&gt;синтаксических плагинов&lt;/a&gt; «&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:dokuwiki&quot; class=&quot;wikilink1&quot; title=&quot;wiki:dokuwiki&quot; data-wiki-id=&quot;wiki:dokuwiki&quot;&gt;ДокуВики&lt;/a&gt;» и пройти шаги, связанные с написанием своего собственного плагина.
&lt;/p&gt;

&lt;p&gt;
Для тех, кто с особым нетерпением жаждет начать: возьмите копию плагина &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:syntax_plugin_skeleton&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:syntax_plugin_skeleton&quot; data-wiki-id=&quot;wiki:devel:syntax_plugin_skeleton&quot;&gt;syntax plugin skeleton&lt;/a&gt;. Это своего рода костяк — плагин, который выводит «Hello World!», когда встречает токен «&lt;code&gt;&amp;lt;TEST&amp;gt;&lt;/code&gt;» в статье вики. Начните наращивать на него «мясо».
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e: \u0440\u0430\u0437\u0431\u043e\u0440 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u043b\u0430\u0433\u0438\u043d\u0430&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u0440\u0430\u0437\u0431\u043e\u0440_\u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e_\u043f\u043b\u0430\u0433\u0438\u043d\u0430&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;8928-9805&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit6&quot; id=&quot;краткая_выжимка&quot;&gt;Краткая выжимка&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
состояния — modes
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Каждый отдельный элемент синтаксиса «ДокуВики», включая и ваш собственный плагин, имеет своё собственное состояние.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Похожие состояния группируются в &lt;a href=&quot;#типы_состояний&quot; title=&quot;wiki:devel:syntax_plugins ↵&quot; class=&quot;wikilink1&quot;&gt;типы состояний&lt;/a&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; «allowedTypes» каждого состояния определяет, какие другие синтаксические конструкции «ДокуВики» опознаются внутри собственной синтаксической конструкции этого состояния. Все состояния из «allowedTypes» допустимы.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; «Тип» состояния даёт понять другим состояниям, могут ли они допустить использование данного состояния внутри своего синтаксиса.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;strong&gt;handle&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Метод &lt;code&gt;&lt;a href=&quot;#метод_handle&quot; title=&quot;wiki:devel:syntax_plugins ↵&quot; class=&quot;wikilink1&quot;&gt;handle()&lt;/a&gt;&lt;/code&gt; вызывается, когда парсер решит, что столкнулся в содержимом статьи вики с куском, относящимся к синтаксису вашего состояния.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Параметр &lt;code&gt;$state&lt;/code&gt; говорит, какой тип шаблона из приписанных к вашему состоянию сработал. Если это просто обычный текст, то параметр &lt;code&gt;state&lt;/code&gt; будет установлен в &lt;code&gt;DOKU_LEXER_UNMATCHED&lt;/code&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Производите как можно больше обработки и принятия решений именно тут, оставляя как можно меньше на обработку методу &lt;code&gt;&lt;a href=&quot;#метод_render&quot; title=&quot;wiki:devel:syntax_plugins ↵&quot; class=&quot;wikilink1&quot;&gt;render()&lt;/a&gt;&lt;/code&gt;, потому что выдача метода handle кэшируется. This also means that you shouldn&amp;#039;t do any stuff here that mustn&amp;#039;t be cached.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;strong&gt;render&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Метод &lt;code&gt;render()&lt;/code&gt; выполняет инструкции отображения, которые применимы к синтаксическому состоянию плагина (и которые были созданы методом &lt;code&gt;handle()&lt;/code&gt; плагина.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Добавляйте содержание к выходному документу с помощью &lt;code&gt;$renderer-&amp;gt;doc .= &amp;#039;content&amp;#039;;&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Убедитесь, что любая выдача вашего плагина &lt;strong&gt;безопасна&lt;/strong&gt; (run raw wiki data through an entity conversion function). &lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Совершайте как можно меньше операций по обработке и принятию решений здесь, это всё следует делать в методе &lt;code&gt;handle()&lt;/code&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/images/smileys/exclaim.svg&quot; class=&quot;icon smiley&quot; alt=&quot;:!:&quot; /&gt; Нет никакой гарантии, что метод &lt;code&gt;render()&lt;/code&gt; будет вызван в то же время, что и метод &lt;code&gt;handle()&lt;/code&gt;. Инструкции, произведённые хэндлером, кэшируются и могут использоваться рендером в более позднее время. Единственный надёжный способ передать данные от &lt;code&gt;handle()&lt;/code&gt; к &lt;code&gt;render()&lt;/code&gt; — это использовать возвращаемый методом &lt;code&gt;handle()&lt;/code&gt; массив, который передаётся методу &lt;code&gt;render()&lt;/code&gt; в качестве параметра &lt;code&gt;$data&lt;/code&gt;. 
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041a\u0440\u0430\u0442\u043a\u0430\u044f \u0432\u044b\u0436\u0438\u043c\u043a\u0430&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043a\u0440\u0430\u0442\u043a\u0430\u044f_\u0432\u044b\u0436\u0438\u043c\u043a\u0430&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;9806-13335&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit7&quot; id=&quot;ключевые_концепции&quot;&gt;Ключевые концепции&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435_\u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;13336-13384&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit8&quot; id=&quot;состояния&quot;&gt;Состояния&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Состояния (более точно синтаксические состояния) — это основа, на которой базируется парсер «ДокуВики». Каждый отдельный элемент разметки «ДокуВики» имеет своё синтаксическое состояние. Например, существует состояние &lt;code&gt;strong&lt;/code&gt; для работы со &lt;strong&gt;strong&lt;/strong&gt;, состояние &lt;code&gt;superscript&lt;/code&gt; для работы с &lt;sup&gt;superscript&lt;/sup&gt;, состояние &lt;code&gt;table&lt;/code&gt; для работы таблицами и многие другие.
&lt;/p&gt;

&lt;p&gt;
Когда парсер сталкивается с разметкой, он попадает в соответствующее этой разметке синтаксическое состояние. Свойства и методы конкретного синтаксического состояния управляют тем, как ведёт себя парсер, пока он в этом состоянии, включая:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; какие другие состояния могут произойти;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; какие инструкции подготовить для рендера.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Ваш плагин добавит своё синтаксическое состояние к парсеру — это автоматически производится «ДокуВики», когда впервые загружает плагин, назначаемое имя — &lt;code&gt;plugin_&lt;/code&gt;+ имя директории плагина (которое является также именем класса плагина без префикса «&lt;code&gt;syntax_&lt;/code&gt;»). Затем, когда парсер сталкивается с разметкой, используемой вашим плагином, он (парсер) войдёт в это синтаксическое состояние. Пока он находится в этом состоянии, ваш плагин управляет тем, что может делать парсер.   
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;13385-15510&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit9&quot; id=&quot;типы_состояний&quot;&gt;Типы состояний&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Для упрощения синтаксические состояния, которые ведут себя одинаковым образом, были сгруппированы в несколько типов состояний — полный список может быть найден в разделе «&lt;a href=&quot;#синтаксические_типы&quot; title=&quot;wiki:devel:syntax_plugins ↵&quot; class=&quot;wikilink1&quot;&gt;Синтаксические плагины&lt;/a&gt;».
&lt;/p&gt;

&lt;p&gt;
Каждый тип состояний соотносится с ключом в массиве &lt;code&gt;$PARSER_MODES&lt;/code&gt;. Элемент этого массива, соответствующий каждому типу состояний, сам является массивом, который содержит все синтаксические состояния, относящиеся к этому типу. Например, в «чистой» «ДокуВики» без установленных плагинов элемент массива &lt;code&gt;$PARSER_MODES[&amp;#039;formatting&amp;#039;]&lt;/code&gt; содержит: strong, emphasis, underline, superscript, subscript, monospace, deleted и footnote.
&lt;/p&gt;

&lt;p&gt;
Когда плагин загружается в парсер, то через &lt;code&gt;getType()&lt;/code&gt; он запрашивается о типе состояния, к которому относится. Затем синтаксические состояния, относящиеся к плагину, добавляются в соответствующий массив &lt;code&gt;$PARSER_MODES&lt;/code&gt;.   
&lt;/p&gt;

&lt;p&gt;
&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/images/smileys/exclaim.svg&quot; class=&quot;icon smiley&quot; alt=&quot;:!:&quot; /&gt; Указанный вашим плагином тип состояний определяет, где в статье «ДокуВики» парсер будет опознавать разметку вашего плагин. Другие синтаксические состояния «ДокуВики» (также, как и плагины) не будут знать о вашем плагине, но они знают о различных типах состояний.
&lt;/p&gt;

&lt;p&gt;
Если они допускают конкретный тип состояний, он допускают все состояния этого типа, включая любые плагины, которые заявили этот тип состояний.
&lt;/p&gt;

&lt;p&gt;
Выберите тип состояний для своего плагина, сравнивая поведение своего плагина с поведением стандартных состояний «ДокуВики». Выберите тип, к которому относятся наиболее похожие состояния.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0422\u0438\u043f\u044b \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0442\u0438\u043f\u044b_\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;15511-18137&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit10&quot; id=&quot;допустимые_состояния&quot;&gt;Допустимые состояния&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Есть другие состояния, которые могут возникнуть внутри разметки вашего собственного состояния.
&lt;/p&gt;

&lt;p&gt;
Каждое синтаксическое состояние имеет собственный массив допустимых состояний, который говорит парсеру, какие именно другие синтаксические состояния будут опознаваться во время обработки состояния. То есть, если вы хотите, чтобы ваш плагин мог оказаться внутри разметки «**strong**», тогда состояние &lt;code&gt;strong&lt;/code&gt; должен включить состояние вашего плагина в свой массив «allowedModes». И если вы хотите позволить разметке &lt;code&gt;strong&lt;/code&gt; включаться внутрь разметки вашего плагина, то ваш плагин должен содержать &lt;code&gt;&amp;#039;strong&amp;#039;&lt;/code&gt; в своём массиве «allowModes».
&lt;/p&gt;

&lt;p&gt;
&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/images/smileys/exclaim.svg&quot; class=&quot;icon smiley&quot; alt=&quot;:!:&quot; /&gt; Ваш плагин собирает в массив «allowedModes» другие синтаксические состояния посредством типа состояний, объявляемого методом &lt;code&gt;getType()&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/images/smileys/exclaim.svg&quot; class=&quot;icon smiley&quot; alt=&quot;:!:&quot; /&gt; Ваш плагин сообщает парсеру, какие другие синтаксические состояния он допускает, декларируя (объявляя) их через метод &lt;code&gt;getAllowedTypes()&lt;/code&gt;.  
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0435_\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;18138-19816&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit11&quot; id=&quot;ptype&quot;&gt;PType&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
PType определяет, как парсеру работать с &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt;-элементами &amp;lt;p&amp;gt;, когда он имеет дело с вашим синтаксическим состоянием.
&lt;/p&gt;

&lt;p&gt;
Обычно в тот момент, когда парсер сталкивается с некоторой разметкой, имеется открытый &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt;-тэг параграфа. Парсеру необходимо знать, должен ли он закрыть этот тэг перед входом в ваше синтаксическое состояние и затем открыть другой параграф на выходе (&lt;code&gt;PType=&amp;#039;block&amp;#039;&lt;/code&gt; или &lt;code&gt;PType=&amp;#039;stack&amp;#039;&lt;/code&gt;) или парсер должен оставить параграф в покое (&lt;code&gt;PType=&amp;#039;normal&amp;#039;&lt;/code&gt;).
&lt;/p&gt;

&lt;p&gt;
PType также определяет будет ли параграф создаваться внутри вашего синтаксического состояния. И если будет - то как.
&lt;/p&gt;

&lt;p&gt;
Если &lt;code&gt;PType=&amp;#039;normal&amp;#039;&lt;/code&gt;, то параграф не будет создаваться вовсе. 
&lt;/p&gt;

&lt;p&gt;
Если &lt;code&gt;PType=&amp;#039;block&amp;#039;&lt;/code&gt;, то парсер закроет параграф перед входом в ваше синтаксическое состояние, и откроет новый параграф после выходы из вашего синтаксического состояния. Внутри вашего синтаксического состояния создание параграфов должно быть запрещено (см. &lt;a href=&quot;#допустимые_состояния&quot; title=&quot;wiki:devel:syntax_plugins ↵&quot; class=&quot;wikilink1&quot;&gt;&amp;quot;Допустимые состояния&amp;quot;&lt;/a&gt;), иначе открытый параграф закроется как обычно (как только встретятся два подряд или более newlines), и откроется новый. В результате, например, открывающий TAG &amp;lt;DIV&amp;gt; может оказаться внутри одного параграфа, а закрывающий &amp;lt;/DIV&amp;gt; внутри другого. Или ещё что-то.
&lt;/p&gt;

&lt;p&gt;
Если &lt;code&gt;PType=&amp;#039;stack&amp;#039;&lt;/code&gt;, то парсер:
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; закроет параграф перед входом в ваше синтаксическое состояние;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; откроет параграф после входа в ваше синтаксическое состояние;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; если внутри вашего синтаксического состояния разрешёно создавать параграфы (см. &lt;a href=&quot;#допустимые_состояния&quot; title=&quot;wiki:devel:syntax_plugins ↵&quot; class=&quot;wikilink1&quot;&gt;&amp;quot;Допустимые состояния&amp;quot;&lt;/a&gt;), то параграфы внутри вашего синтаксического состояния будут создаваться как обычно (как только встретятся два подряд или более newlines). Если не разрешено, то параграф так и останется открытым до выхода из вашего синтаксического состояния;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; перед выходом из вашего синтаксического состояния парсер закроет параграф (в этом месте он должен быть открыт, не зависимо от того, разрешено ли создавать параграфы внутри или нет);&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; после выходы из вашего синтаксического состояния парсер откроет новый параграф.&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
Для тех, кто знает &lt;abbr title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/abbr&gt;, возвращение &lt;code&gt;PType=&amp;#039;block&amp;#039;&lt;/code&gt; означает, что html, произведённый вашим плагином, будет похож на &lt;code&gt;display:block&lt;/code&gt;, а возвращение &lt;code&gt;PType=&amp;#039;normal&amp;#039;&lt;/code&gt; означает html, похожий на &lt;code&gt;display:inline&lt;/code&gt;.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;пример&quot;&gt;Пример&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Предполагается, что вы хорошо знакомы со стандартным шаблоном syntax plugin ENTRY ⇒ UNMATCHED ⇒ EXIT. В зависимости от значения PType &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; и &lt;code&gt;&amp;lt;/p&amp;gt;&lt;/code&gt; будут расставляться автоматически рендером в разных точках снаружи и внутри текста плагина. Поэтому вашему плагину не нужно заботиться об этих тэгах.
&lt;/p&gt;
&lt;div class=&quot;table sectionedit12&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;thead&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt;wikisyntax &lt;/th&gt;&lt;th class=&quot;col1&quot;&gt;PType=normal &lt;/th&gt;&lt;th class=&quot;col2&quot;&gt;PType=block &lt;/th&gt;&lt;th class=&quot;col3&quot;&gt;PType=stack &lt;/th&gt;
	&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;&lt;pre class=&quot;code&quot;&gt;foo
&amp;lt;plugin&amp;gt;text&amp;lt;/plugin&amp;gt;

bar&lt;/pre&gt;
&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;&lt;pre class=&quot;code html4strict&quot;&gt;&lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/p.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;p&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;foo
ENTRY(&amp;quot;&lt;span class=&quot;sc2&quot;&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;&amp;quot;)
UNMATCHED(&amp;quot;text&amp;quot;)
EXIT(&amp;quot;&lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;plugin&amp;gt;&lt;/span&gt;&amp;quot;)
&lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/p.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;p&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/p.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;p&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;bar&lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/p.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;p&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; &lt;pre class=&quot;code html4strict&quot;&gt;&lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/p.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;p&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;foo&lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/p.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;p&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;
ENTRY(&amp;quot;&lt;span class=&quot;sc2&quot;&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;&amp;quot;)
UNMATCHED(&amp;quot;text&amp;quot;)
EXIT(&amp;quot;&lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;plugin&amp;gt;&lt;/span&gt;&amp;quot;)
&lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/p.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;p&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;bar&lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/p.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;p&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; &lt;pre class=&quot;code html4strict&quot;&gt;&lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/p.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;p&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;foo&lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/p.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;p&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;
ENTRY(&amp;quot;&lt;span class=&quot;sc2&quot;&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;&amp;quot;)
&lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/p.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;p&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;
UNMATCHED(&amp;quot;text&amp;quot;)
&lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/p.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;p&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;
EXIT(&amp;quot;&lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;plugin&amp;gt;&lt;/span&gt;&amp;quot;)
&lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;a href=&quot;http://december.com/html/4/element/p.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;p&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;bar&lt;span class=&quot;sc2&quot;&gt;&amp;lt;&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;a href=&quot;http://december.com/html/4/element/p.html&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;p&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table1&amp;quot;,&amp;quot;secid&amp;quot;:12,&amp;quot;range&amp;quot;:&amp;quot;24300-24703&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;PType&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;ptype&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:11,&amp;quot;range&amp;quot;:&amp;quot;19817-24704&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit13&quot; id=&quot;порядковый_номер&quot;&gt;Порядковый номер&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Этот номер используется лексером&lt;sup&gt;&lt;a href=&quot;#fn__3&quot; id=&quot;fnt__3&quot; class=&quot;fn_top&quot;&gt;3)&lt;/a&gt;&lt;/sup&gt; для управления порядком, в котором он проверяет шаблоны синтаксических состояний на «сырых» (исходных) данных вики. Это важно только в том случае, если один и тот же участок данных попадает в шаблоны, относящиеся к двум или более состояниям. После проверки будет выбран шаблон, относящийся к состоянию с наименьшим порядковым номером.
&lt;/p&gt;

&lt;p&gt;
Вы можете использовать это свойство для написания плагина, который заменяет или расширяет «родной» хендлер «ДокуВики» для той же синтаксической конструкции. Примером является плагин «&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:plugin:code&quot; class=&quot;wikilink2&quot; title=&quot;wiki:plugin:code&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:plugin:code&quot;&gt;Code&lt;/a&gt;».
&lt;/p&gt;

&lt;p&gt;
Подробности о существующих порядковых номерах доступны для обоих &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:parser&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:parser&quot; data-wiki-id=&quot;wiki:devel:parser&quot;&gt;parser&lt;/a&gt; (&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:parser:getsort_list&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:parser:getsort_list&quot; data-wiki-id=&quot;wiki:devel:parser:getsort_list&quot;&gt;sort list&lt;/a&gt;).
&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/images/smileys/question.svg&quot; class=&quot;icon smiley&quot; alt=&quot;:?:&quot; /&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u044b\u0439 \u043d\u043e\u043c\u0435\u0440&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u044b\u0439_\u043d\u043e\u043c\u0435\u0440&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:13,&amp;quot;range&amp;quot;:&amp;quot;24705-26098&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit14&quot; id=&quot;шаблоны&quot;&gt;Шаблоны&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Парсер использует PHP-функции «preg»&lt;sup&gt;&lt;a href=&quot;#fn__4&quot; id=&quot;fnt__4&quot; class=&quot;fn_top&quot;&gt;4)&lt;/a&gt;&lt;/sup&gt;. Детальное объяснения регулярных выражений и их синтаксиса выходит за пределы этого руководства. Существует много хороших источников в интернете.
&lt;/p&gt;

&lt;p&gt;
Полный синтаксис «preg» не доступен для использования в конструировании шаблонов синтаксических плагинов. Ниже приведён список известных различий:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Шаблоны не окружаются разделителями.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Для использования вертикальной черты «|» при множественных альтернативах, сделайте их non-captured-группами, т. е. «(?:cat|dog)».&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Будьте очень осторожны с «заглядыванием назад». Парсер только пытается сравнить шаблон со следующим куском «ещё не проверенных» данных. Если вам нужно заглянуть в символы, которые уже участвовали в предыдущем сравнении с шаблоном, то этих символов там на самом деле не будет.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Флаги опций могут быть включены только как встроенные опции, т. е. &lt;code&gt;(?i)&lt;/code&gt;, &lt;code&gt;(?-i)&lt;/code&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;br/&gt;

&lt;/p&gt;

&lt;p&gt;
Парсер предоставляет плагину четыре функции для регистрации необходимых шаблонов. Каждая функция относится к шаблонам с разными смыслами.
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;специальные шаблоны&lt;/strong&gt; — &lt;code&gt;addSpecialPattern()&lt;/code&gt; — это шаблоны, которые используются, когда один шаблон — это всё, что нужно. В терминах парсера эти шаблоны представляют и вход в синтаксическое состояние плагина, и выход из этого синтаксического состояния, всё в одно сравнение. Обычно они используются в плагинах &lt;code&gt;substition&lt;/code&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;входные шаблоны&lt;/strong&gt; — &lt;code&gt;addEntryPattern()&lt;/code&gt; — шаблон, указывающий на начало данных, которые должны быть обработаны плагином. Обычно эти шаблоны должны включать в себя заглядывание вперёд для проверки существования выходного шаблона. Любой плагин, который регистрирует входной шаблон, также должен зарегистрировать выходной шаблон.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;выходные шаблоны&lt;/strong&gt; — &lt;code&gt;addExitPattern()&lt;/code&gt; — шаблон, указывающий на конец данных, которые должны быть обработаны плагином. Этот совпадение с этим шаблоном может произойти, только если было найдено совпадение с входным шаблоном&lt;sup&gt;&lt;a href=&quot;#fn__5&quot; id=&quot;fnt__5&quot; class=&quot;fn_top&quot;&gt;5)&lt;/a&gt;&lt;/sup&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;внутренние шаблоны&lt;/strong&gt; — &lt;code&gt;addPattern()&lt;/code&gt; — представляют специальный синтаксис, применимый к плагину, который может встретиться между входным и выходным шаблонами. Обычно это нужно только для достаточно сложных структур, например, таблиц и списков.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;br/&gt;

&lt;/p&gt;

&lt;p&gt;
Один плагин может добавить несколько шаблонов в парсер, включая более чем один шаблон одного типа.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Советы&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Используйте «нежадные» идентификаторы, т. е. &lt;code&gt;+?&lt;/code&gt; или &lt;code&gt;*?&lt;/code&gt; вместо &lt;code&gt;+&lt;/code&gt; или &lt;code&gt;*&lt;/code&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Будьте осторожны с использованием нескольких выходных шаблонов. Скорее всего сработает выход из состояния по первому встреченному выходному шаблону, даже если это будет не тот шаблон, который «увидел при заглядывании вперёд» входной шаблон. Необходимость нескольких выходных шаблонов может означать, что на самом деле вам нужны несколько плагинов.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; В ранних версиях «ДокуВики» лексер имел баг, не дававший использовать угловые скобки «&amp;lt;» или «&amp;gt;» в «заглядывающих вперёд» шаблонах. Этот баг был исправлен и угловые скобки теперь допустимы. Некоторые плагины всё ещё содержат шестнадцатеричные обозначения для угловых скобкок («\x3C», «\x3E») — такой приём позволял обойти баг. &lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0428\u0430\u0431\u043b\u043e\u043d\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0448\u0430\u0431\u043b\u043e\u043d\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:14,&amp;quot;range&amp;quot;:&amp;quot;26099-31726&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit15&quot; id=&quot;метод_handle&quot;&gt;Метод handle()&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Это часть вашего плагина, которая должна совершать всю работу. До того как «ДокуВики» выведет статью вики, он создаёт список инструкций для рендера. Метод &lt;code&gt;handle()&lt;/code&gt; плагина создаёт инструкции отображения для собственного синтаксического состояния. В некий более поздний момент они будут интерпретированы методом &lt;code&gt;render()&lt;/code&gt; плагина. Список инструкций кэшируется и может быть использован много раз, разумно максимально увеличить объём работы, совершаемой один раз этой функцией и максимально уменьшить объём работы, совершаемый много раз функцией &lt;code&gt;render()&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Параметр &lt;code&gt;$match&lt;/code&gt; — текст, который совпадает с шаблоном, или, в случае &lt;code&gt;DOKU_LEXER_UNMATCHED&lt;/code&gt;, непрерывный кусок обычного текста, который не совпал с каким-либо шаблоном.
&lt;/p&gt;

&lt;p&gt;
Параметр &lt;code&gt;$state&lt;/code&gt; — тип шаблона, из-за которого запустился вызов handle().
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;DOKU_LEXER_ENTER&lt;/code&gt; — шаблон установлен функцией addEntryPattern();&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;DOKU_LEXER_MATCHED&lt;/code&gt; — шаблон установлен функцией addPattern();&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;DOKU_LEXER_EXIT&lt;/code&gt; — шаблон установлен функцией addExitPattern();&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;DOKU_LEXER_SPECIAL&lt;/code&gt; — шаблон установлен функцией addSpecialPattern();&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;DOKU_LEXER_UNMATCHED&lt;/code&gt; — обычный текст, встреченный внутри синтаксического состояния плагина, который не совпал ни с одним шаблоном.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Параметр &lt;code&gt;$pos&lt;/code&gt; — позиция первого символа найденного текста.
&lt;/p&gt;

&lt;p&gt;
Параметр &lt;code&gt;&amp;amp;$handler&lt;/code&gt; — ссылка на объект &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=ru:devel:parser#обработчик&quot; class=&quot;wikilink2&quot; title=&quot;ru:devel:parser&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;ru:devel:parser&quot;&gt;Doku_Handler&lt;/a&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041c\u0435\u0442\u043e\u0434 handle()&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043c\u0435\u0442\u043e\u0434_handle&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:15,&amp;quot;range&amp;quot;:&amp;quot;31727-34042&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit16&quot; id=&quot;метод_render&quot;&gt;Метод render()&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Часть плагина, которая производит вывод окончательной веб-страницы или какой-либо другой поддерживаемый формат. Именно здесь плагин добавляет собственный вывод к уже созданным другими частями рендерера путём склейки со свойством &lt;code&gt;doc&lt;/code&gt; рендера. Т. е.:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;$renderer-&amp;gt;doc .= &amp;quot;некий вывод плагина...&amp;quot;;&lt;/pre&gt;

&lt;p&gt;
&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/images/smileys/exclaim.svg&quot; class=&quot;icon smiley&quot; alt=&quot;:!:&quot; /&gt; В любых сырых данных вики, которые передаются &lt;code&gt;render()&lt;/code&gt;, все спецсимволы должны быть преобразованы в элементы &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt;. Вы можете использовать PHP-функции &lt;code&gt;&lt;a href=&quot;http://uk.php.net/manual/en/function.htmlspecialchars.php&quot; class=&quot;urlextern&quot; title=&quot;http://uk.php.net/manual/en/function.htmlspecialchars.php&quot; rel=&quot;ugc nofollow&quot;&gt;htmlspecialchars()&lt;/a&gt;&lt;/code&gt;, &lt;code&gt;&lt;a href=&quot;http://uk.php.net/manual/en/function.htmlentities.php&quot; class=&quot;urlextern&quot; title=&quot;http://uk.php.net/manual/en/function.htmlentities.php&quot; rel=&quot;ugc nofollow&quot;&gt;htmlentities()&lt;/a&gt;&lt;/code&gt; или собственный метод &lt;code&gt;xmlEntities()&lt;/code&gt; рендера. Т. е.:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;$renderer-&amp;gt;doc .= $renderer-&amp;gt;_xmlEntities($text);&lt;/pre&gt;

&lt;p&gt;
Параметр &lt;code&gt;$mode&lt;/code&gt; — имя формата состояния финального вывода произведённого рендером. В настоящее время «ДокуВики» поддерживает только один формат вывода — &lt;code&gt;XHTML&lt;/code&gt; &lt;sup&gt;&lt;a href=&quot;#fn__6&quot; id=&quot;fnt__6&quot; class=&quot;fn_top&quot;&gt;6)&lt;/a&gt;&lt;/sup&gt;.
&lt;/p&gt;

&lt;p&gt;
Новые состояния могут быть представлены в &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:renderer_plugins&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:renderer_plugins&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:renderer_plugins&quot;&gt;плагинах рендера&lt;/a&gt;. Плагины должны производить вывод только для тех форматов, которые они поддерживают, это значит, что эта функция должна быть структурирована…
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;if ($mode == &amp;#039;xhtml&amp;#039;) {  // supported mode
  // code to generate XHTML output from instruction $data
}&lt;/pre&gt;

&lt;p&gt;
Параметр &lt;code&gt;$data&lt;/code&gt; — массив, содержащий инструкции, предварительно подготовленные собственным методом &lt;code&gt;handle()&lt;/code&gt; плагина. Эта функция должна интерпретировать инструкции и выдавать соответствующий вывод.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041c\u0435\u0442\u043e\u0434 render()&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043c\u0435\u0442\u043e\u0434_render&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:16,&amp;quot;range&amp;quot;:&amp;quot;34043-36698&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit17&quot; id=&quot;безопасность&quot;&gt;Безопасность&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Сырые данные вики, которые достигли вашего плагина, больше никогда не должны обрабатываться. Никакой дальнейшей обработки не производится над выводом после того, как он покидает плагин. Как минимум, плагин должен убедиться, что в выводе все спецсимволы &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt; заменены на &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt;-последовательности. Также к извлечённым и используемым внутри данным вики нужно относится с вниманием. См. также статью «&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:security&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:security&quot; data-wiki-id=&quot;wiki:devel:security&quot;&gt;Безопасность&lt;/a&gt;».
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:7,&amp;quot;secid&amp;quot;:17,&amp;quot;range&amp;quot;:&amp;quot;36699-37495&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit18&quot; id=&quot;локализация&quot;&gt;Локализация&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/images/smileys/fixme.jpg&quot; class=&quot;icon smiley&quot; alt=&quot;FIXME&quot; /&gt;
Смотрите статьи «&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:common_plugin_functions#локализация&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:common_plugin_functions&quot; data-wiki-id=&quot;wiki:devel:common_plugin_functions&quot;&gt;Локализация&lt;/a&gt;» и «&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:plugin_file_structure&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:plugin_file_structure&quot; data-wiki-id=&quot;wiki:devel:plugin_file_structure&quot;&gt;Структура файлов плагина&lt;/a&gt;».
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041b\u043e\u043a\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043b\u043e\u043a\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:7,&amp;quot;secid&amp;quot;:18,&amp;quot;range&amp;quot;:&amp;quot;37496-37735&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit19&quot; id=&quot;конфигурация&quot;&gt;Конфигурация&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Смотрите статью «&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:configuration&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:configuration&quot; data-wiki-id=&quot;wiki:devel:configuration&quot;&gt;Конфигурация&lt;/a&gt;».
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:7,&amp;quot;secid&amp;quot;:19,&amp;quot;range&amp;quot;:&amp;quot;37736-37850&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit20&quot; id=&quot;использование_css_и_javascript&quot;&gt;Использование CSS и JavaScript&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/images/smileys/fixme.jpg&quot; class=&quot;icon smiley&quot; alt=&quot;FIXME&quot; /&gt;
Смотрите статью «&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:plugin_file_structure&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:plugin_file_structure&quot; data-wiki-id=&quot;wiki:devel:plugin_file_structure&quot;&gt;Структура файлов плагина&lt;/a&gt;».
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 CSS \u0438 JavaScript&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435_css_\u0438_javascript&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:7,&amp;quot;secid&amp;quot;:20,&amp;quot;range&amp;quot;:&amp;quot;37851-38020&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit21&quot; id=&quot;добавление_кнопок_к_панели_инструментов&quot;&gt;Добавление кнопок к панели инструментов&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Для того, чтобы облегчить жизнь пользователям вики, которые установили ваш плагин, следует добавить кнопку в панель инструментов редактора.
&lt;/p&gt;

&lt;p&gt;
См. статьи:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:action_plugins#sample_action_plugin_2&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:action_plugins&quot; data-wiki-id=&quot;wiki:devel:action_plugins&quot;&gt;Плагины действий&lt;/a&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:toolbar&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:toolbar&quot; data-wiki-id=&quot;wiki:devel:toolbar&quot;&gt;Панель инструментов&lt;/a&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043d\u043e\u043f\u043e\u043a \u043a \u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435_\u043a\u043d\u043e\u043f\u043e\u043a_\u043a_\u043f\u0430\u043d\u0435\u043b\u0438_\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:7,&amp;quot;secid&amp;quot;:21,&amp;quot;range&amp;quot;:&amp;quot;38021-38520&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit22&quot; id=&quot;написание_своего_собственного_плагина&quot;&gt;Написание своего собственного плагина&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Ну хорошо, вы решили расширить синтаксис «ДокуВики» своим собственным плагином. Вам придётся разработать, каким будет ваша синтаксическая конструкция и как она будет отображаться в браузере пользователя. Теперь вам необходимо написать сам плагин.
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Примите решение, как назвать плагин. Возможно вы захотите проверить список &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=ru:plugins&quot; class=&quot;wikilink2&quot; title=&quot;ru:plugins&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;ru:plugins&quot;&gt;доступных плагинов&lt;/a&gt;, чтобы убедиться, что такое имя уже не используется.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; В своей собственной установке «ДокуВики» создайте собственную поддиректорию в директории &lt;code&gt;lib/plugins/&lt;/code&gt;. Эта директория должна называться также, как ваш плагин.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Создайте в новой директории файл &lt;code&gt;syntax.php&lt;/code&gt;. В качестве отправной точки, можете использовать &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:syntax_plugin_skeleton&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:syntax_plugin_skeleton&quot; data-wiki-id=&quot;wiki:devel:syntax_plugin_skeleton&quot;&gt;скелет плагина&lt;/a&gt;. Скопируйте его в свою директорию.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; Отредактируйте этот файл под свои нужды:&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; измените название класса, чтобы он был вида &lt;code&gt;syntax_plugin_&amp;lt;название вашего плагина&amp;gt;&lt;/code&gt;&lt;sup&gt;&lt;a href=&quot;#fn__7&quot; id=&quot;fnt__7&quot; class=&quot;fn_top&quot;&gt;7)&lt;/a&gt;&lt;/sup&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; измените метод &lt;code&gt;getInfo()&lt;/code&gt;, чтобы он выдавал информацию о вашем плагине;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; измените метод &lt;code&gt;getType()&lt;/code&gt;, чтобы он выдавал тип состояний, к которому относится ваш плагин;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; добавьте метод &lt;code&gt;getAllowedTypes()&lt;/code&gt; для сообщения всех типов состояний, которые ваш плагин может включать внутрь своей собственной синтаксической конструкции. Если ваш плагин не желает позволять какому-либо состоянию включаться в себя, он может быть выкинут;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; измените метод &lt;code&gt;getPType()&lt;/code&gt;, чтобы он выдавал PType, который относится к вашему плагин. Если это &lt;code&gt;&amp;#039;normal&amp;#039;&lt;/code&gt;, вы можете просто убрать этот метод;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; измените метод &lt;code&gt;getSort()&lt;/code&gt;, чтобы он выдавал уникальный номер, проверьте его в списке &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=ru:plugins&quot; class=&quot;wikilink2&quot; title=&quot;ru:plugins&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;ru:plugins&quot;&gt;плагинов&lt;/a&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; измените метод &lt;code&gt;connectTo()&lt;/code&gt;, чтобы зарегистрировать шаблон для опознавания вашего синтакиса;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; добавьте метод &lt;code&gt;postConnect()&lt;/code&gt;, если ваш синтаксис имеет второй шаблон, для того, чтобы указать, когда парсер должен покинуть ваше синтаксическое состояние.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Ну вот, простая часть работы сделана, теперь у вас есть плагин, которой скажет «Hello World!», когда встретит шаблон вашего синтаксиса. Самое время проверить его и убедиться, что шаблон работает как надо — посетите свою вики и создайте статью с синтаксической страницей своего плагина, сохраните её и убедитесь, что «Hello World!» действительно  показывается.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; Напишите свои собственные методы &lt;code&gt;handle()&lt;/code&gt; и &lt;code&gt;render()&lt;/code&gt;:&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; если у вас есть входной и выходной шаблоны, не забудьте обработать не совпавшие с шаблоном данные;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; относитесь к сырым данным вики с подозрением (вниманием) и убедитесь, что все спецсимволы прошли конвертор последовательностей.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Протестируйте и добавьте плагин на &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:plugins&quot; class=&quot;wikilink1&quot; title=&quot;wiki:plugins&quot; data-wiki-id=&quot;wiki:plugins&quot;&gt;страницу плагинов&lt;/a&gt; «ДокуВики».&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0432\u043e\u0435\u0433\u043e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043b\u0430\u0433\u0438\u043d\u0430&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435_\u0441\u0432\u043e\u0435\u0433\u043e_\u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e_\u043f\u043b\u0430\u0433\u0438\u043d\u0430&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:7,&amp;quot;secid&amp;quot;:22,&amp;quot;range&amp;quot;:&amp;quot;38521-43286&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit23&quot; id=&quot;пример_1-й_плагина_now&quot;&gt;Пример 1-й плагина — Now&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Когда синтаксическая конструкция этого плагина &lt;code&gt;[NOW]&lt;/code&gt; встречается в статье вики, текущая дата и время отображается в формате &lt;a href=&quot;http://www.faqs.org/rfcs/rfc2822&quot; class=&quot;urlextern&quot; title=&quot;http://www.faqs.org/rfcs/rfc2822&quot; rel=&quot;ugc nofollow&quot;&gt;RFC2822&lt;/a&gt;.
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Типом является &lt;code&gt;&amp;#039;substition&amp;#039;&lt;/code&gt;. Мы подставляем временую метку вместо токена &lt;code&gt;[NOW]&lt;/code&gt;, аналогично смайлам и акронимами. Они также относятся к типу состояний  &lt;code&gt;&amp;#039;substition&amp;#039;&lt;/code&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Заполнять «allowedTypes» не требуется, т. к. никакие другие синтаксические конструкции не могут появиться в конструкции &lt;code&gt;[NOW]&lt;/code&gt;. Т. о. нам не нужен метод &lt;code&gt;getAllowedTypes()&lt;/code&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; PType — &lt;code&gt;normal&lt;/code&gt; — это значение по умолчанию, поэтому нам не нужно определять  метод &lt;code&gt;getPType()&lt;/code&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Нет необходимости во входном и выходном шаблонами, только специальный шаблон, чтобы найти &lt;code&gt;[NOW]&lt;/code&gt;. Единственная вещь, с которой нужно быть осторожным, это то, что символы «[» и «]» имеют специальное значение в регулярных выражениях, поэтому нам нужно «выключить» (escape) их, создав шаблон &lt;code&gt;&amp;#039;\[NOW\]&amp;#039;&lt;/code&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; В нашем случае метод &lt;code&gt;handler()&lt;/code&gt; не должен ничего делать. Нам не нужно заботиться о специальных состояниях или дополнительных параметрах в нашем синтаксисе. Мы просто вернём пустой массив в качестве инструкций для рендера.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Всё, что нужно методу &lt;code&gt;render()&lt;/code&gt; — добавить штамп времени к текущей статье вики — &lt;code&gt;$renderer-&amp;gt;doc .= date(&amp;#039;r&amp;#039;);&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
И вот наш плагин завершён!
&lt;/p&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=wiki:devel:syntax_plugins&amp;amp;codeblock=7&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_php&quot;&gt;syntax.php&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class=&quot;co4&quot;&gt;/**
 * Plugin Now: Inserts a timestamp.
 * 
 * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
 * @author     Christopher Smith &amp;lt;chris@jalakai.co.uk&amp;gt;
 */&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// must be run within DokuWiki&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;&lt;a href=&quot;http://www.php.net/defined&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;defined&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;DOKU_INC&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/die&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;die&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;&lt;a href=&quot;http://www.php.net/defined&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;defined&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;DOKU_PLUGIN&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/define&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;define&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;DOKU_PLUGIN&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;DOKU_INC&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;lib/plugins/&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;require_once&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;DOKU_PLUGIN&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;syntax.php&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co4&quot;&gt;/**
 * All DokuWiki plugins to extend the parser/rendering mechanism
 * need to inherit from this class
 */&lt;/span&gt;
&lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; syntax_plugin_now &lt;span class=&quot;kw2&quot;&gt;extends&lt;/span&gt; DokuWiki_Syntax_Plugin &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; getInfo&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
      &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
        &lt;span class=&quot;st_h&quot;&gt;&#039;author&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;me&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;st_h&quot;&gt;&#039;email&#039;&lt;/span&gt;  &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;me@someplace.com&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;st_h&quot;&gt;&#039;date&#039;&lt;/span&gt;   &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;2005-07-28&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;st_h&quot;&gt;&#039;name&#039;&lt;/span&gt;   &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;Now Plugin&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;st_h&quot;&gt;&#039;desc&#039;&lt;/span&gt;   &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;Include the current date and time&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;st_h&quot;&gt;&#039;url&#039;&lt;/span&gt;    &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;http://www.dokuwiki.org/plugin:tutorial&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; &lt;a href=&quot;http://www.php.net/gettype&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;getType&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;substition&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; getSort&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; connectTo&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; 
        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;Lexer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addSpecialPattern&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;\[NOW\]&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;plugin_now&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; 
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; handle&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$match&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$state&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$pos&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$handler&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; 
        &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$match&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$state&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$pos&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; 
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; render&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$renderer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$data&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
      &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;xhtml&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
          &lt;span class=&quot;re0&quot;&gt;$renderer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;doc&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;.=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/date&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;date&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;r&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
          &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
      &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;sy1&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;p&gt;
Замечание: из-за способа, которым «ДокуВики» кэширует страницы, этот плагин будет отображать дату/время для момента, когда был создан кэш страницы. Вам нужно добавить на страницу макрос &lt;code&gt;~~NOCACHE~~&lt;/code&gt;,чтобы отображалось правильное время каждый раз, когда запрашивается страница.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u0440\u0438\u043c\u0435\u0440 1-\u0439 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u2014 Now&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u0440\u0438\u043c\u0435\u0440_1-\u0439_\u043f\u043b\u0430\u0433\u0438\u043d\u0430_now&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:7,&amp;quot;secid&amp;quot;:23,&amp;quot;range&amp;quot;:&amp;quot;43287-47417&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit24&quot; id=&quot;пример_2-й_плагина_color&quot;&gt;Пример 2-й плагина — Color&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Когда встретится синтаксическая конструкция плагина &lt;code&gt;&amp;lt;color somecolour/somebackgroundcolour&amp;gt;&lt;/code&gt; встречается в статье вики, цвет текста сменяется на «somecolour», а цвет фона — на «somebackgroundcolour»; и оба остаются такими, пока не встретится &lt;code&gt;&amp;lt;/color&amp;gt;&lt;/code&gt;.
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; То, что мы делаем, подобно тому, что делает состояние &lt;code&gt;strong&lt;/code&gt;, его тип — &amp;#039;formatting&amp;#039;, поэтому мы тоже должны использовать этот тип.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; «allowedTypes» должны быть inline состояния - &lt;code&gt;substition&lt;/code&gt;, &lt;code&gt;formatting&lt;/code&gt; и &lt;code&gt;disabled&lt;/code&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; PType — &lt;code&gt;normal&lt;/code&gt; — это значение по умолчанию, поэтому нам снова не нужен метод &lt;code&gt;getPType()&lt;/code&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Нам нужны входные и выходные шаблоны. Входной шаблон должен проверять, что есть и выходной шаблон, т. е. &lt;code&gt;&amp;#039;&amp;lt;color.*&amp;gt;(?=.*?&amp;lt;/color&amp;gt;)&amp;#039;&lt;/code&gt;. Выходной шаблон аналогично  &lt;code&gt;&amp;lt;/color&amp;gt;&lt;/code&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; Метод &lt;code&gt;handle()&lt;/code&gt; должен иметь дело с тремя состояниями: совпадающими с входным и выходным шаблонами и «несовпадающим» для промежуточного текста. &lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; Состояние &lt;code&gt;DOKU_LEXER_ENTER&lt;/code&gt; требует некоторой обработки для извлечения значений цветов текста и фона, они войдут в инструкцию для нашего рендера.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; Состояние &lt;code&gt;DOKU_LEXER_UNMATCHED&lt;/code&gt; не требует какой-либо обработки, но нам придётся передать «несовпадающий» текст (в параметре &lt;code&gt;$match&lt;/code&gt;) методу &lt;code&gt;render()&lt;/code&gt;, поэтому он войдёт в инструкцию для нашего рендера.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; Состояние &lt;code&gt;DOKU_LEXER_EXIT&lt;/code&gt; не требует какой-либо обработки и не имеет никаких особых данных, мы просто должны сделать выходную инструкцию для &lt;code&gt;render()&lt;/code&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; Методу &lt;code&gt;render()&lt;/code&gt; необходимо иметь дело с теми же тремя сотояниями, что и &lt;code&gt;handle()&lt;/code&gt;.&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;DOKU_LEXER_ENTER&lt;/code&gt; — отрыть тэг &lt;code&gt;span&lt;/code&gt; с указанием стиля, использующего значения цветов текста и фона.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;DOKU_LEXER_UNMATCHED&lt;/code&gt; — добавить «несовпавший» текст к выходному документу.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;DOKU_LEXER_EXIT&lt;/code&gt; — закрыть тэг &lt;code&gt;span&lt;/code&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Опять же, всё достаточно очевидно. И вот, что мы имеем:
&lt;/p&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=wiki:devel:syntax_plugins&amp;amp;codeblock=8&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_php&quot;&gt;syntax.php&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class=&quot;co4&quot;&gt;/**
 * Plugin Color: Sets new colors for text and background.
 * 
 * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
 * @author     Christopher Smith &amp;lt;chris@jalakai.co.uk&amp;gt;
 */&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// must be run within Dokuwiki&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;&lt;a href=&quot;http://www.php.net/defined&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;defined&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;DOKU_INC&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/die&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;die&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;&lt;a href=&quot;http://www.php.net/defined&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;defined&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;DOKU_PLUGIN&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/define&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;define&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;DOKU_PLUGIN&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;DOKU_INC&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;lib/plugins/&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;require_once&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;DOKU_PLUGIN&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;syntax.php&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co4&quot;&gt;/**
 * All DokuWiki plugins to extend the parser/rendering mechanism
 * need to inherit from this class
 */&lt;/span&gt;
&lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; syntax_plugin_color &lt;span class=&quot;kw2&quot;&gt;extends&lt;/span&gt; DokuWiki_Syntax_Plugin &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co4&quot;&gt;/**
     * return some info
     */&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; getInfo&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
            &lt;span class=&quot;st_h&quot;&gt;&#039;author&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;Christopher Smith&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;st_h&quot;&gt;&#039;email&#039;&lt;/span&gt;  &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;chris@jalakai.co.uk&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;st_h&quot;&gt;&#039;date&#039;&lt;/span&gt;   &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;2008-02-06&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;st_h&quot;&gt;&#039;name&#039;&lt;/span&gt;   &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;Color Plugin&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;st_h&quot;&gt;&#039;desc&#039;&lt;/span&gt;   &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;Changes text colour and background&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;st_h&quot;&gt;&#039;url&#039;&lt;/span&gt;    &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;http://www.dokuwiki.org/plugin:tutorial&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; &lt;a href=&quot;http://www.php.net/gettype&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;getType&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;formatting&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; getAllowedTypes&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;formatting&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;substition&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;disabled&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;   
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; getSort&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;158&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; connectTo&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;Lexer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addEntryPattern&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;color.*?&amp;gt;(?=.*?&amp;lt;/color&amp;gt;)&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;plugin_color&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; postConnect&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;Lexer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;addExitPattern&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;/color&amp;gt;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;plugin_color&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&amp;nbsp;
    &lt;span class=&quot;co4&quot;&gt;/**
     * Handle the match
     */&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; handle&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$match&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$state&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$pos&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$handler&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;switch&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$state&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
          &lt;span class=&quot;kw1&quot;&gt;case&lt;/span&gt; DOKU_LEXER_ENTER &lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;
                &lt;a href=&quot;http://www.php.net/list&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;list&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$color&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$background&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/preg_split&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;preg_split&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;/\//u&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;a href=&quot;http://www.php.net/substr&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;substr&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$match&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$color&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;_isValid&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$color&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$color&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;color:&lt;span class=&quot;es4&quot;&gt;$color&lt;/span&gt;;&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$background&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;_isValid&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$background&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$background&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;background-color:&lt;span class=&quot;es4&quot;&gt;$background&lt;/span&gt;;&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$state&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$color&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$background&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
          &lt;span class=&quot;kw1&quot;&gt;case&lt;/span&gt; DOKU_LEXER_UNMATCHED &lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;  &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$state&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$match&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
          &lt;span class=&quot;kw1&quot;&gt;case&lt;/span&gt; DOKU_LEXER_EXIT &lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;       &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$state&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co4&quot;&gt;/**
     * Create output
     */&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; render&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$renderer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$data&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$mode&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;xhtml&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
            &lt;a href=&quot;http://www.php.net/list&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;list&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$state&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$match&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$data&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;switch&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$state&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
              &lt;span class=&quot;kw1&quot;&gt;case&lt;/span&gt; DOKU_LEXER_ENTER &lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;      
                &lt;a href=&quot;http://www.php.net/list&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;list&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$color&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$background&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$match&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;re0&quot;&gt;$renderer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;doc&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;.=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;lt;span style=&#039;&lt;span class=&quot;es4&quot;&gt;$color&lt;/span&gt; &lt;span class=&quot;es4&quot;&gt;$background&lt;/span&gt;&#039;&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; 
                &lt;span class=&quot;kw1&quot;&gt;break&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
              &lt;span class=&quot;kw1&quot;&gt;case&lt;/span&gt; DOKU_LEXER_UNMATCHED &lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;  &lt;span class=&quot;re0&quot;&gt;$renderer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;doc&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;.=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$renderer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;_xmlEntities&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$match&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;break&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
              &lt;span class=&quot;kw1&quot;&gt;case&lt;/span&gt; DOKU_LEXER_EXIT &lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;       &lt;span class=&quot;re0&quot;&gt;$renderer&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;doc&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;.=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;break&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// validate color value $c&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;// this is cut price validation - only to ensure the basic format is correct and there is nothing harmful&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;// three basic formats  &amp;quot;colorname&amp;quot;, &amp;quot;#fff[fff]&amp;quot;, &amp;quot;rgb(255[%],255[%],255[%])&amp;quot;&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; _isValid&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$c&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$c&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/trim&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;trim&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$c&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;re0&quot;&gt;$pattern&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;/^\s*(
            ([a-zA-z]+)|                                #colorname - not verified
            (\#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))|        #colorvalue
            (rgb\(([0-9]{1,3}%?,){2}[0-9]{1,3}%?\))     #rgb triplet
            )\s*$/x&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/preg_match&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;preg_match&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$pattern&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$c&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;a href=&quot;http://www.php.net/trim&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;trim&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$c&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;sy1&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;p&gt;
Замечание: никаких проверок на корректность названий цветов или значения RGB не производилось.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u0440\u0438\u043c\u0435\u0440 2-\u0439 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u2014 Color&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u0440\u0438\u043c\u0435\u0440_2-\u0439_\u043f\u043b\u0430\u0433\u0438\u043d\u0430_color&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:8,&amp;quot;secid&amp;quot;:24,&amp;quot;range&amp;quot;:&amp;quot;47418-53967&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit25&quot; id=&quot;дополнения_и_файлы&quot;&gt;Дополнения и Файлы&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.dokuwiki.org/devel:syntax_plugins&quot; class=&quot;urlextern&quot; title=&quot;https://www.dokuwiki.org/devel:syntax_plugins&quot; rel=&quot;ugc nofollow&quot;&gt;Ссылка на оригинал статьи&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0414\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u0424\u0430\u0439\u043b\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f_\u0438_\u0444\u0430\u0439\u043b\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:9,&amp;quot;secid&amp;quot;:25,&amp;quot;range&amp;quot;:&amp;quot;53968-&amp;quot;} --&gt;&lt;div class=&quot;footnotes&quot;&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__1&quot; id=&quot;fn__1&quot; class=&quot;fn_bot&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;См. Doku_Handler_Block&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__2&quot; id=&quot;fn__2&quot; class=&quot;fn_bot&quot;&gt;2)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;Да, это неправильное написание, но мы не хотели бы его менять, чтобы избежать нарушения существующих плагинов. Иногда опечатки становятся стандартами, возьмите к примеру HTTP-заголовок «referer»&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__3&quot; id=&quot;fn__3&quot; class=&quot;fn_bot&quot;&gt;3)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;Lexer — часть парсера, анализируящая «сырую» (исходную) статью вики.&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__4&quot; id=&quot;fn__4&quot; class=&quot;fn_bot&quot;&gt;4)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;Совместимые с Perl регулярные выражения. Ссылка: &lt;a href=&quot;http://www.php.net/manual/en/ref.pcre.php&quot; class=&quot;urlextern&quot; title=&quot;http://www.php.net/manual/en/ref.pcre.php&quot; rel=&quot;ugc nofollow&quot;&gt;www.php.net/manual/en/ref.pcre.php&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__5&quot; id=&quot;fn__5&quot; class=&quot;fn_bot&quot;&gt;5)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;Криво переведено с англ.&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__6&quot; id=&quot;fn__6&quot; class=&quot;fn_bot&quot;&gt;6)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;Существует ещё специальное состояние &lt;code&gt;metadata&lt;/code&gt;, которое ничего не выводит, только собирает метаданные для страницы. Используйте его для вставки значений в массив метаданных.&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__7&quot; id=&quot;fn__7&quot; class=&quot;fn_bot&quot;&gt;7)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;Название не может содержать символов подчерка и должно совпадать с названием класса&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Thu, 09 Jan 2025 19:44:11 +0000</pubDate>
        </item>
        <item>
            <title>table_css</title>
            <link>https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:table_css&amp;rev=1724652241</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;таблицы_стилей_css&quot;&gt;Таблицы стилей CSS&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Многое в отображении «&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:dokuwiki&quot; class=&quot;wikilink1&quot; title=&quot;wiki:dokuwiki&quot; data-wiki-id=&quot;wiki:dokuwiki&quot;&gt;ДокуВики&lt;/a&gt;» контролируется через таблицы стилей &lt;abbr title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/abbr&gt;. «ДокуВики» сама по себе определяет очень ограниченный набор стилей. Остальные описания &lt;abbr title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/abbr&gt; берутся из используемых &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:template&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:template&quot; data-wiki-id=&quot;wiki:devel:template&quot;&gt;шаблонов&lt;/a&gt; и &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:plugins&quot; class=&quot;wikilink1&quot; title=&quot;wiki:plugins&quot; data-wiki-id=&quot;wiki:plugins&quot;&gt;плагинов&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
Все файлы &lt;abbr title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/abbr&gt; предоставляются через единый диспетчер в &lt;code&gt;lib/exe/css.php&lt;/code&gt;, который, кроме того, управляет кэшированием, заменами по маске и оптимизацией. Загрузка таблиц стилей производится (наряду с другими вещами) функцией &lt;code&gt;tpl_metaheaders()&lt;/code&gt;, так что не забывайте включить её в свой шаблон.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0422\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u0442\u0438\u043b\u0435\u0439 CSS&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0442\u0430\u0431\u043b\u0438\u0446\u044b_\u0441\u0442\u0438\u043b\u0435\u0439_css&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-990&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;режимы_таблиц_стилей&quot;&gt;Режимы таблиц стилей&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
«ДокуВики» знает о пяти типах режимов по умолчанию:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;screen&lt;/strong&gt; — этот режим используется при отображении страниц в окне веб-браузера;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;all&lt;/strong&gt; — применяется во всех режимах отображения;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;print&lt;/strong&gt; — определения отсюда будут использоваться при печати страницы;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;rtl&lt;/strong&gt; — определения из файлов &lt;code&gt;rtl&lt;/code&gt; будут загружены дополнительно, когда используется &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:localization&quot; class=&quot;wikilink1&quot; title=&quot;wiki:localization&quot; data-wiki-id=&quot;wiki:localization&quot;&gt;язык&lt;/a&gt; с написанием справа-налево;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;feed&lt;/strong&gt; — применяется для отображения &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:syndication&quot; class=&quot;wikilink1&quot; title=&quot;wiki:syndication&quot; data-wiki-id=&quot;wiki:syndication&quot;&gt;новостной ленты&lt;/a&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0420\u0435\u0436\u0438\u043c\u044b \u0442\u0430\u0431\u043b\u0438\u0446 \u0441\u0442\u0438\u043b\u0435\u0439&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0440\u0435\u0436\u0438\u043c\u044b_\u0442\u0430\u0431\u043b\u0438\u0446_\u0441\u0442\u0438\u043b\u0435\u0439&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;991-1872&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;таблицы_стилей_докувики&quot;&gt;Таблицы стилей «ДокуВики»&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
«ДокуВики» загружает таблицы стилей из 4-х источников в следующем порядке (таблицы стилей RTL добавляются в конце каждого шага):
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0422\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u0442\u0438\u043b\u0435\u0439 \u00ab\u0414\u043e\u043a\u0443\u0412\u0438\u043a\u0438\u00bb&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0442\u0430\u0431\u043b\u0438\u0446\u044b_\u0441\u0442\u0438\u043b\u0435\u0439_\u0434\u043e\u043a\u0443\u0432\u0438\u043a\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;1873-2167&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit4&quot; id=&quot;базовые_таблицы_стилей&quot;&gt;1. Базовые таблицы стилей&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Эти таблицы располагаются в &lt;code&gt;/lib/styles&lt;/code&gt;. Они определяют базовый стиль, вроде оформления сообщений об ошибках.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;1. \u0411\u0430\u0437\u043e\u0432\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u0442\u0438\u043b\u0435\u0439&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0431\u0430\u0437\u043e\u0432\u044b\u0435_\u0442\u0430\u0431\u043b\u0438\u0446\u044b_\u0441\u0442\u0438\u043b\u0435\u0439&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;2168-2421&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit5&quot; id=&quot;стили_плагинов&quot;&gt;2. Стили плагинов&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Плагины могут объявить свои собственные определения стиля, используя следующие файлы:
&lt;/p&gt;
&lt;div class=&quot;table sectionedit6&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;thead&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Режим       &lt;/th&gt;&lt;th class=&quot;col1 leftalign&quot;&gt; Файл &lt;abbr title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/abbr&gt;  &lt;/th&gt;
	&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; screen      &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; &lt;code&gt;style.css&lt;/code&gt; или &lt;code&gt;screen.css&lt;/code&gt;  &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; print       &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; &lt;code&gt;print.css&lt;/code&gt;  &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; all         &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;all.css&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; rtl         &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; &lt;code&gt;rtl.css&lt;/code&gt;    &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; feed        &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;feed.css&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;2625-2843&amp;quot;} --&gt;
&lt;p&gt;
Чтобы лучше сочетаться с цветовой схемой любого шаблона, авторы плагинов должны использовать &lt;a href=&quot;#гарантированные_цветовые_подстановки&quot; title=&quot;wiki:devel:table_css ↵&quot; class=&quot;wikilink1&quot;&gt;гарантированные цветовые подстановки&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/images/smileys/exclaim.svg&quot; class=&quot;icon smiley&quot; alt=&quot;:!:&quot; /&gt; Таблицы стилей плагина загружаются, даже если сам плагин не используется (но не если он &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:config:disableactions&quot; class=&quot;wikilink1&quot; title=&quot;wiki:config:disableactions&quot; data-wiki-id=&quot;wiki:config:disableactions&quot;&gt;выключен&lt;/a&gt;).
&lt;/p&gt;

&lt;p&gt;
&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/images/smileys/exclaim.svg&quot; class=&quot;icon smiley&quot; alt=&quot;:!:&quot; /&gt; Определённые здесь стили должны позаботиться о возможных конфликтах. Поэтому будьте осторожны при написании плагинов. Если возможно, добавляейте префиксы к названиям ваших стилей для избежания конфликтов.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;2. \u0421\u0442\u0438\u043b\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0441\u0442\u0438\u043b\u0438_\u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;2422-3696&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit7&quot; id=&quot;стили_шаблонов&quot;&gt;3. Стили шаблонов&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Таблицы стилей шаблонов загружаются из директории выбранного шаблона. «ДокуВики» читает &lt;code&gt;&lt;a href=&quot;#styleini&quot; title=&quot;wiki:devel:table_css ↵&quot; class=&quot;wikilink1&quot;&gt;style.ini&lt;/a&gt;&lt;/code&gt;, расположенный в директории шаблона и загружает все &lt;abbr title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/abbr&gt;, упомянутые в этом файле. Загрузка происходит в соответствии с &lt;a href=&quot;#режимы_таблиц_стилей&quot; title=&quot;wiki:devel:table_css ↵&quot; class=&quot;wikilink1&quot;&gt;текущим режимом&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
Дополнительно в файле &lt;code&gt;&lt;a href=&quot;#styleini&quot; title=&quot;wiki:devel:table_css ↵&quot; class=&quot;wikilink1&quot;&gt;style.ini&lt;/a&gt;&lt;/code&gt; определяются &lt;a href=&quot;#подстановки&quot; title=&quot;wiki:devel:table_css ↵&quot; class=&quot;wikilink1&quot;&gt;подстановки&lt;/a&gt;.
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; См. также: «&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:templates&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:templates&quot; data-wiki-id=&quot;wiki:devel:templates&quot;&gt;Разработка шаблонов&lt;/a&gt;»&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;3. \u0421\u0442\u0438\u043b\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0441\u0442\u0438\u043b\u0438_\u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;3697-4407&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit8&quot; id=&quot;пользовательские_стили&quot;&gt;4. Пользовательские стили&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Независимо от используемого шаблона, администратором вики могут быть определены  дополнительные стили с помощью следующих файлов &lt;abbr title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/abbr&gt; в директории &lt;code&gt;conf/&lt;/code&gt;:
&lt;/p&gt;
&lt;div class=&quot;table sectionedit9&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;thead&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Файл &lt;abbr title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/abbr&gt; в «&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:changes#релиз_2010-11-07a_муравьед&quot; class=&quot;wikilink1&quot; title=&quot;wiki:changes&quot; data-wiki-id=&quot;wiki:changes&quot;&gt;Муравьеде&lt;/a&gt;»         &lt;/th&gt;&lt;th class=&quot;col1&quot;&gt; Файл &lt;abbr title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/abbr&gt; после и до «Муравьеда»&lt;sup&gt;&lt;a href=&quot;#fn__11&quot; id=&quot;fnt__11&quot; class=&quot;fn_top&quot;&gt;11)&lt;/a&gt;&lt;/sup&gt; &lt;/th&gt;&lt;th class=&quot;col2&quot;&gt; Когда используется &lt;/th&gt;
	&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;conf/userstyle.css&lt;/code&gt;              &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; &lt;code&gt;conf/userstyle.css&lt;/code&gt;      &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Применяется во всех режимах отображения &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;conf/printstyle.css&lt;/code&gt;             &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; &lt;code&gt;conf/userprint.css&lt;/code&gt;      &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Применяется при отправке на печать &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;code&gt;conf/rtlstyle.css&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; &lt;code&gt;conf/userrtl.css&lt;/code&gt;        &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Применяется, если используется языковой интерфейс с написанием справа-налево (right-to-left) &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;conf/feedstyle.css&lt;/code&gt;              &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; &lt;code&gt;conf/userfeed.css&lt;/code&gt;       &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Applied when displaying the &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=syndication&quot; class=&quot;wikilink2&quot; title=&quot;syndication&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;syndication&quot;&gt;feed&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;conf/allstyle.css&lt;/code&gt;               &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; &lt;code&gt;conf/userall.css&lt;/code&gt;        &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Applied in all display modes &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table1&amp;quot;,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;4747-5704&amp;quot;} --&gt;
&lt;p&gt;
Это полезно для переопределения небольшой части стилей шаблона или плагина без возникновения проблем при их дальнейшем обновлении.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;4. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0441\u0442\u0438\u043b\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435_\u0441\u0442\u0438\u043b\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;4408-5950&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit10&quot; id=&quot;использование_id&quot;&gt;Использование ID&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Когда вы используете произвольный ID в вашем шаблоне для назначения стиля, убедитесь, что этот ID не конфликтует с уже имеющимися. В частности, убедитесь, что нет конфликта с автоматически назначаемыми ID для заголовков разделов. Простейший путь добиться этого — использовать два смежных символа подчерка (__) в вашем ID. Поскольку ID разделов всегда представляют собой допустимое &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:pagenames&quot; class=&quot;wikilink2&quot; title=&quot;wiki:pagenames&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:pagenames&quot;&gt;имя статьи&lt;/a&gt;, они никогда не будут содержать смежных подчерков. 
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 ID&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435_id&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;5951-6819&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit11&quot; id=&quot;styleini&quot;&gt;style.ini&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Файл &lt;code&gt;style.ini&lt;/code&gt; — это &lt;a href=&quot;https://en.wikipedia.org/wiki/INI_file&quot; class=&quot;interwiki iw_wp&quot; title=&quot;https://en.wikipedia.org/wiki/INI_file&quot;&gt;ini-файл&lt;/a&gt;. Он содержит два раздела:
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;style.ini&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;styleini&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:11,&amp;quot;range&amp;quot;:&amp;quot;6820-6952&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit12&quot; id=&quot;stylesheets&quot;&gt;[stylesheets]&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
В этой части определяется какие файлы &lt;abbr title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/abbr&gt; будут загружены. Каждая строка имеет вид:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;cssfile.css = mode&lt;/pre&gt;

&lt;p&gt;
&lt;strong&gt;cssfile.css&lt;/strong&gt; — имя вашего файла;  &lt;strong&gt;mode&lt;/strong&gt; — &lt;a href=&quot;#режимы_таблиц_стилей&quot; title=&quot;wiki:devel:table_css ↵&quot; class=&quot;wikilink1&quot;&gt;режим&lt;/a&gt;, к которому применяется файл.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;[stylesheets]&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;stylesheets&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:12,&amp;quot;range&amp;quot;:&amp;quot;6953-7325&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit13&quot; id=&quot;replacements&quot;&gt;[replacements]&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Диспетчер &lt;abbr title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/abbr&gt; «ДокуВики» способен заменять подстановки в загружаемый таблицах стилей, которые назначаются в разделе &lt;code&gt;[replacements]&lt;/code&gt; в файле &lt;code&gt;&lt;a href=&quot;#styleini&quot; title=&quot;wiki:devel:table_css ↵&quot; class=&quot;wikilink1&quot;&gt;style.ini&lt;/a&gt;&lt;/code&gt; шаблона. Это исключительно полезно для определения цветовых схем в одном месте и дальнейшем использовании их во всех других файлах. После этого смена цветовой схемы сводится к просто редактированию ini-файла.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;гарантированные_цветовые_подстановки&quot;&gt;Гарантированные цветовые подстановки&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Только следующие подстановки могут безопасно применяться в плагинах.
&lt;/p&gt;
&lt;div class=&quot;table sectionedit14&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;thead&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt;Переменная подстановки  &lt;/th&gt;&lt;th class=&quot;col1 leftalign&quot;&gt;Назначение  &lt;/th&gt;&lt;th class=&quot;col2 leftalign&quot;&gt;Значение в шаблоне по умолчанию  &lt;/th&gt;&lt;th class=&quot;col3 leftalign&quot;&gt;Название до 2006-08-05  &lt;/th&gt;
	&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt;&lt;code&gt;__background__&lt;/code&gt;		&lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt;основной цвет фона		&lt;/td&gt;&lt;td class=&quot;col2 leftalign&quot;&gt;&lt;code&gt;#fff&lt;/code&gt;		&lt;/td&gt;&lt;td class=&quot;col3 leftalign&quot;&gt;&lt;code&gt;__white__&lt;/code&gt;	&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt;&lt;code&gt;__background_alt__&lt;/code&gt;	&lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt;альтернативный цвет фона	&lt;/td&gt;&lt;td class=&quot;col2 leftalign&quot;&gt;&lt;code&gt;#dee7ec&lt;/code&gt;		&lt;/td&gt;&lt;td class=&quot;col3 leftalign&quot;&gt;&lt;code&gt;__medium__&lt;/code&gt;	&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt;&lt;code&gt;__background_neu__&lt;/code&gt;	&lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt;нейтральный цвет фона     	&lt;/td&gt;&lt;td class=&quot;col2 leftalign&quot;&gt;&lt;code&gt;#f5f5f5&lt;/code&gt;		&lt;/td&gt;&lt;td class=&quot;col3 leftalign&quot;&gt;&lt;code&gt;__darkgray__&lt;/code&gt;	&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt;&lt;code&gt;__border__&lt;/code&gt;		&lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt;цвет окантовки			&lt;/td&gt;&lt;td class=&quot;col2 leftalign&quot;&gt;&lt;code&gt;#8cacbb&lt;/code&gt;		&lt;/td&gt;&lt;td class=&quot;col3 leftalign&quot;&gt;&lt;code&gt;__dark__&lt;/code&gt;	&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt;&lt;code&gt;__text__&lt;/code&gt;		&lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt;основной цвет текста		&lt;/td&gt;&lt;td class=&quot;col2 leftalign&quot;&gt;&lt;code&gt;#000&lt;/code&gt;		&lt;/td&gt;&lt;td class=&quot;col3 leftalign&quot;&gt;&lt;code&gt;__black__&lt;/code&gt;	&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row6&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt;&lt;code&gt;__text_alt__&lt;/code&gt;		&lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt;альтернативный цвет текста	&lt;/td&gt;&lt;td class=&quot;col2 leftalign&quot;&gt;&lt;code&gt;#638c9c&lt;/code&gt;		&lt;/td&gt;&lt;td class=&quot;col3 leftalign&quot;&gt;&lt;code&gt;__darker__&lt;/code&gt;	&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row7&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt;&lt;code&gt;__text_neu__&lt;/code&gt;		&lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt;нейтральный  цвет текста	&lt;/td&gt;&lt;td class=&quot;col2 leftalign&quot;&gt;&lt;code&gt;#666&lt;/code&gt;		&lt;/td&gt;&lt;td class=&quot;col3 leftalign&quot;&gt;&lt;code&gt;__lightgray__&lt;/code&gt;	&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table2&amp;quot;,&amp;quot;secid&amp;quot;:14,&amp;quot;range&amp;quot;:&amp;quot;8211-9094&amp;quot;} --&gt;
&lt;p&gt;
Начиная с 2006-08-05 подстановки были переименованы, их названия стали более корректными семантически. Плагины и шаблоны, использующие подстановки написанные после этого, могут даже не адаптироваться к старым переменным, но всё же желательно это делать.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;другие_цветовые_подстановки_используемые_шаблоном_по_умолчанию&quot;&gt;Другие цветовые подстановки, используемые шаблоном по умолчанию&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Эти дополнительные подстановки используются в шаблоне по умолчанию. Другие шаблоны также могут использовать их, но не обязаны делать это.
&lt;/p&gt;
&lt;div class=&quot;table sectionedit15&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;thead&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt;Переменная подстановки  &lt;/th&gt;&lt;th class=&quot;col1 leftalign&quot;&gt;Назначение  &lt;/th&gt;&lt;th class=&quot;col2 leftalign&quot;&gt;Значение в шаблоне по умолчанию  &lt;/th&gt;&lt;th class=&quot;col3 leftalign&quot;&gt;Название до 2006-08-05  &lt;/th&gt;
	&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt;&lt;code&gt;__background_other__&lt;/code&gt;  &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt;другой цвет фона                                &lt;/td&gt;&lt;td class=&quot;col2 leftalign&quot;&gt;&lt;code&gt;#f7f9fa&lt;/code&gt;  &lt;/td&gt;&lt;td class=&quot;col3 leftalign&quot;&gt;&lt;code&gt;__lighter__&lt;/code&gt;  &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt;&lt;code&gt;__text_other__&lt;/code&gt;        &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt;другой цвет текста                              &lt;/td&gt;&lt;td class=&quot;col2 leftalign&quot;&gt;&lt;code&gt;#ccc&lt;/code&gt;     &lt;/td&gt;&lt;td class=&quot;col3 leftalign&quot;&gt;&lt;code&gt;__mediumgray__&lt;/code&gt;  &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt;(none, omitted)               &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt;-                                               &lt;/td&gt;&lt;td class=&quot;col2 leftalign&quot;&gt;&lt;code&gt;#eef3f8&lt;/code&gt;  &lt;/td&gt;&lt;td class=&quot;col3 leftalign&quot;&gt;&lt;code&gt;__light__&lt;/code&gt;  &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt;&lt;code&gt;__extern__&lt;/code&gt;            &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt;цвет ссылки                                     &lt;/td&gt;&lt;td class=&quot;col2 leftalign&quot;&gt;&lt;code&gt;#436976&lt;/code&gt;  &lt;/td&gt;&lt;td class=&quot;col3 leftalign&quot;&gt;(не менялось)    &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt;&lt;code&gt;__existing__&lt;/code&gt;          &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt;цвет для существующих внутренних ссылок         &lt;/td&gt;&lt;td class=&quot;col2 leftalign&quot;&gt;&lt;code&gt;#090&lt;/code&gt;     &lt;/td&gt;&lt;td class=&quot;col3 leftalign&quot;&gt;(не менялось)    &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row6&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt;&lt;code&gt;__missing__&lt;/code&gt;           &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt;цвет для несуществующих внутренних ссылок       &lt;/td&gt;&lt;td class=&quot;col2 leftalign&quot;&gt;&lt;code&gt;#f30&lt;/code&gt;     &lt;/td&gt;&lt;td class=&quot;col3 leftalign&quot;&gt;(не менялось)    &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row7&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt;&lt;code&gt;__highlight__&lt;/code&gt;         &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt;цвет для подсвечивания найденых кусков текста   &lt;/td&gt;&lt;td class=&quot;col2 leftalign&quot;&gt;&lt;code&gt;#ff9&lt;/code&gt;     &lt;/td&gt;&lt;td class=&quot;col3 leftalign&quot;&gt;(не менялось)    &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table3&amp;quot;,&amp;quot;secid&amp;quot;:15,&amp;quot;range&amp;quot;:&amp;quot;9940-11112&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;[replacements]&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;replacements&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:13,&amp;quot;range&amp;quot;:&amp;quot;7326-&amp;quot;} --&gt;&lt;div class=&quot;footnotes&quot;&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__11&quot; id=&quot;fn__11&quot; class=&quot;fn_bot&quot;&gt;11)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;changed back on 2011-02-26&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Mon, 26 Aug 2024 06:04:01 +0000</pubDate>
        </item>
        <item>
            <title>template_info</title>
            <link>https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:template_info&amp;rev=1739203029</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;информация_о_шаблоне&quot;&gt;Информация о шаблоне&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Каждый шаблон должен предоставить некоторую базовую информацию о себе. Это делается с помощью файла с именем, &lt;code&gt;template.info.txt&lt;/code&gt; расположенного в &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:templates#directory_layout&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:templates&quot; data-wiki-id=&quot;wiki:devel:templates&quot;&gt;каталоге шаблона &lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
Вот пример того, как должен выглядеть такой файл.
&lt;/p&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=wiki:devel:template_info&amp;amp;codeblock=0&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_txt&quot;&gt;lib/tpl/example/template.info.txt&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code&quot;&gt;base     example
author   My Full Name
email    me@example.com
date     2012-09-08
name     Example Template
desc     This is just an Example of how a template description looks like
url      https://www.dokuwiki.org/template:example&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;
&lt;div class=&quot;table sectionedit2&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;thead&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Параметр &lt;/th&gt;&lt;th class=&quot;col1&quot;&gt; Описание &lt;/th&gt;
	&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; base      &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Техническое имя шаблона. &lt;strong&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=plugin:extension&quot; class=&quot;wikilink2&quot; title=&quot;plugin:extension&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;plugin:extension&quot;&gt;Extension Manager&lt;/a&gt; установит его в этот каталог.&lt;/strong&gt;&lt;sup&gt;&lt;a href=&quot;#fn__12&quot; id=&quot;fnt__12&quot; class=&quot;fn_top&quot;&gt;12)&lt;/a&gt;&lt;/sup&gt;. См. также &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:templates#template_naming_conventions&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:templates&quot; data-wiki-id=&quot;wiki:devel:templates&quot;&gt;соглашения об именовании шаблонов&lt;/a&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; author    &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Полное имя автора шаблона &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; email     &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Электронная почта для связи с автором шаблона по поводу этого шаблона &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; date      &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Дата последнего обновления этого шаблона в формате ГГГГ-ММ-ДД. Не забудьте обновить это, когда будете обновлять свой шаблон! &lt;sup&gt;&lt;a href=&quot;#fn__13&quot; id=&quot;fnt__13&quot; class=&quot;fn_top&quot;&gt;13)&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; name      &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Удобочитаемое имя шаблона &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row6&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; desc      &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Описание того, что делает шаблон и как он выглядит&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row7&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; url       &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt;-адрес , по которому можно получить более подробную информацию о шаблоне &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;765-2514&amp;quot;} --&gt;
&lt;/div&gt;
&lt;div class=&quot;footnotes&quot;&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__12&quot; id=&quot;fn__12&quot; class=&quot;fn_bot&quot;&gt;12)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;&lt;strong&gt;Важно иметь уникальное базовое значение поля (т. е. имя шаблона), иначе уже существующий шаблон с таким именем может быть перезаписан.&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__13&quot; id=&quot;fn__13&quot; class=&quot;fn_bot&quot;&gt;13)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;&lt;strong&gt;Эта дата должна быть равна дате «Последнее обновление» на странице шаблонов в репозитории.&lt;/strong&gt; Это необходимо для автоматической маркировки обновлений, используемой Extension Manager, представленной в выпуске Ponder Stibbons&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Mon, 10 Feb 2025 15:57:09 +0000</pubDate>
        </item>
        <item>
            <title>template</title>
            <link>https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:template&amp;rev=1724524562</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;шаблоны&quot;&gt;Шаблоны&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Вид «Докувики» может быть изменён при помощи шаблонов (другое название — скины или темы). Ниже представлен список доступных шаблонов. Дополнительная информация доступна по ссылкам ниже:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:install&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:install&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:install&quot;&gt;установка «Докувики»&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:devel:templates&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:devel:templates&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:devel:templates&quot;&gt;создание собственного шаблона&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:faq&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:faq&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:faq&quot;&gt;ЧаВО по шаблонам&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0428\u0430\u0431\u043b\u043e\u043d\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0448\u0430\u0431\u043b\u043e\u043d\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-557&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;установка_шаблона&quot;&gt;Установка шаблона&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Установить шаблон очень легко. Просто распакуйте архив с шаблоном (обычно .zip или .tgz) в &lt;code&gt;lib/tpl/&lt;/code&gt; &lt;sup&gt;&lt;a href=&quot;#fn__1&quot; id=&quot;fnt__1&quot; class=&quot;fn_top&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt;.
&lt;/p&gt;

&lt;p&gt;
Затем в настройках вики выберите установленный шаблон.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0448\u0430\u0431\u043b\u043e\u043d\u0430&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430_\u0448\u0430\u0431\u043b\u043e\u043d\u0430&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;558-1038&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;создание_шаблона&quot;&gt;Создание шаблона&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Если вы создали шаблон, которым хотите поделиться с остальными, — добавьте его в список, создав новую страницу в пространстве имён &lt;code&gt;template&lt;/code&gt;, например, перейдя по ссылке:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;http://www.dokuwiki.org/template:&amp;lt;название_вашего_шаблона&amp;gt; &lt;/pre&gt;

&lt;p&gt;
Пожалуйста, всегда указывайте имя автора шаблона, информацию о совместимости с различными версиями «&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:dokuwiki&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:dokuwiki&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:dokuwiki&quot;&gt;ДокуВики&lt;/a&gt;» и дату последнего изменения.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Замечание разработчикам шаблонов:&lt;/strong&gt; пожалуйста, вносите приемлемое описание ключевых функциональных возможностей и отличительных качеств вашего шаблона. Также, приветствуются достаточно большие для просмотра снимки экрана (пример есть в «&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=template:monobook&quot; class=&quot;wikilink2&quot; title=&quot;template:monobook&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;template:monobook&quot;&gt;Монобуке&lt;/a&gt;»).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435_\u0448\u0430\u0431\u043b\u043e\u043d\u0430&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;1039-2236&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;доступные_шаблоны&quot;&gt;Доступные шаблоны&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.dokuwiki.org/ru:template#Поиск шаблонов&quot; class=&quot;urlextern&quot; title=&quot;https://www.dokuwiki.org/ru:template#Поиск шаблонов&quot; rel=&quot;ugc nofollow&quot;&gt;Поиск шаблонов&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Если вы хотите, чтобы шаблон другого проекта портировали в «&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:dokuwiki&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:dokuwiki&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:dokuwiki&quot;&gt;ДокуВики&lt;/a&gt;», обратитесь на подфорум  &lt;a href=&quot;http://forum.dokuwiki.org/forum/20&quot; class=&quot;urlextern&quot; title=&quot;http://forum.dokuwiki.org/forum/20&quot; rel=&quot;ugc nofollow&quot;&gt;Template Wishlist&lt;/a&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435_\u0448\u0430\u0431\u043b\u043e\u043d\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;2237-&amp;quot;} --&gt;&lt;div class=&quot;footnotes&quot;&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__1&quot; id=&quot;fn__1&quot; class=&quot;fn_bot&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;Если в архиве нет самой папки, нужно создать &lt;code&gt;lib/tpl/&amp;lt;templatename&amp;gt;&lt;/code&gt; и распаковать туда архив.&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Sat, 24 Aug 2024 18:36:02 +0000</pubDate>
        </item>
        <item>
            <title>templates</title>
            <link>https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:templates&amp;rev=1739202620</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;разработка_шаблонов_докувики&quot;&gt;Разработка шаблонов «Докувики»&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://wwoss.direct.quickconnect.to/lib/images/smileys/exclaim.svg&quot; class=&quot;icon smiley&quot; alt=&quot;:!:&quot; /&gt; Страница нуждается в переработке. За точной информацией обращайтесь к &lt;a href=&quot;https://www.dokuwiki.org/devel:templates&quot; class=&quot;urlextern&quot; title=&quot;https://www.dokuwiki.org/devel:templates&quot; rel=&quot;ugc nofollow&quot;&gt;английской версии страницы&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
Вы можете менять дизайн «&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:dokuwiki&quot; class=&quot;wikilink1&quot; title=&quot;wiki:dokuwiki&quot; data-wiki-id=&quot;wiki:dokuwiki&quot;&gt;Докувики&lt;/a&gt;» по своему усмотрению, создав новый шаблон, который представляет собой несколько PHP- и &lt;abbr title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/abbr&gt;-файлов, сохранённых в каталоге и помещённых в &lt;code&gt;&amp;lt;dokuwiki&amp;gt;/lib/tpl/&lt;/code&gt; (в действительности, шаблон написан на &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt;, а PHP используется только для вставки контента).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u00ab\u0414\u043e\u043a\u0443\u0432\u0438\u043a\u0438\u00bb&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430_\u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432_\u0434\u043e\u043a\u0443\u0432\u0438\u043a\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-821&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;начало_работы&quot;&gt;Начало работы&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Проще всего создать новый шаблон, взяв в качестве отправной точки уже существующий. Лучше всего подойдет шаблон «default», так как он содержит все необходимые части шаблона и следует стандартам составления шаблонов «Докувики». Название шаблона (каталога) следует писать в нижнем регистре без символов точки и подчеркивания.
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Скопируйте стандартный шаблон &lt;code&gt;lib/tpl/default&lt;/code&gt; в каталог, где будет хранится ваш шаблон, например &lt;code&gt;lib/tpl/mytemplate&lt;/code&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Выберите новый шаблон на странице «Управление»;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Ознакомьтесь с файлами шаблона (см. «&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:templates#структура_каталогов&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:templates&quot; data-wiki-id=&quot;wiki:devel:templates&quot;&gt;Структуру каталогов&lt;/a&gt;»);&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Посмотрите, как «Докувики» обрабатывает &lt;abbr title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/abbr&gt; с помощью &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:css&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:css&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:css&quot;&gt;диспетчера CSS&lt;/a&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Обработка конфигурационных параметров аналогична &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:common_plugin_functions&quot; class=&quot;wikilink2&quot; title=&quot;wiki:common_plugin_functions&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:common_plugin_functions&quot;&gt;плагинам&lt;/a&gt;. Используйте &lt;code&gt;tpl_getConf(&amp;lt;setting&amp;gt;)&lt;/code&gt; для получения параметров шаблона.&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041d\u0430\u0447\u0430\u043b\u043e \u0440\u0430\u0431\u043e\u0442\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043d\u0430\u0447\u0430\u043b\u043e_\u0440\u0430\u0431\u043e\u0442\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;822-2320&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;структура_каталогов&quot;&gt;Структура каталогов&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Шаблоны должны иметь следующую структуру директорий (все пути указаны относительно каталога шаблона). Файлы &lt;abbr title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/abbr&gt; определены в &lt;code&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:style.ini&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:style.ini&quot; data-wiki-id=&quot;wiki:devel:style.ini&quot;&gt;style.ini&lt;/a&gt;&lt;/code&gt;, но вам следует предоставить как минимум два файла: один основной, другой для вывода на печать.
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;&amp;lt;dokuwiki&amp;gt;/lib/tpl/&amp;lt;template&amp;gt;/&lt;/code&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;&amp;lt;filename&amp;gt;.css&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:templates:main.php&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:templates:main.php&quot; data-wiki-id=&quot;wiki:devel:templates:main.php&quot;&gt;main.php&lt;/a&gt;&lt;/code&gt; (&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:templates:main.php&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:templates:main.php&quot; data-wiki-id=&quot;wiki:devel:templates:main.php&quot;&gt;англ.&lt;/a&gt;) — главный файл разметки шаблона «Докувики»&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:templates:detail.php&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:templates:detail.php&quot; data-wiki-id=&quot;wiki:devel:templates:detail.php&quot;&gt;detail.php&lt;/a&gt;&lt;/code&gt; (&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:templates:detail.php&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:templates:detail.php&quot; data-wiki-id=&quot;wiki:devel:templates:detail.php&quot;&gt;англ.&lt;/a&gt;) — страница подробного описания изображения&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:templates:mediamanager.php&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:templates:mediamanager.php&quot; data-wiki-id=&quot;wiki:devel:templates:mediamanager.php&quot;&gt;mediamanager.php&lt;/a&gt;&lt;/code&gt; (&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:templates:mediamanager.php&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:templates:mediamanager.php&quot; data-wiki-id=&quot;wiki:devel:templates:mediamanager.php&quot;&gt;англ.&lt;/a&gt;) — медиаменеджер&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;images/&lt;/code&gt; — все используемые в шаблоне изображения&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;conf/&lt;/code&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;default.php&lt;/code&gt; — &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:configuration#настройки_по_умолчанию&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:configuration&quot; data-wiki-id=&quot;wiki:devel:configuration&quot;&gt;стандартные настройки&lt;/a&gt; (см. &lt;code&gt;&lt;a href=&quot;#tpl_getconf&quot; title=&quot;wiki:devel:templates ↵&quot; class=&quot;wikilink1&quot;&gt;tpl_getConf&lt;/a&gt;&lt;/code&gt;)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;metadata.php&lt;/code&gt; — &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:configuration#метаданные_настроек&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:configuration&quot; data-wiki-id=&quot;wiki:devel:configuration&quot;&gt;конфигурационные метаданные&lt;/a&gt; (см. &lt;code&gt;&lt;a href=&quot;#tpl_getconf&quot; title=&quot;wiki:devel:templates ↵&quot; class=&quot;wikilink1&quot;&gt;tpl_getConf()&lt;/a&gt;&lt;/code&gt;)&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level2 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;lang/&lt;/code&gt; — языковые файлы&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;&amp;lt;код языка&amp;gt;/lang.php&lt;/code&gt; — локализованные строки, используемые в шаблоне&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;&amp;lt;код языка&amp;gt;/settings.php&lt;/code&gt; — локализованные строки, используемые на странице настроек «Докувики»&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;style.ini&lt;/code&gt; — см. &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:style.ini&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:style.ini&quot; data-wiki-id=&quot;wiki:devel:style.ini&quot;&gt;style.ini&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;favicon.ico&lt;/code&gt; – (можно перезаписать, загрузив другой в корневое или вики-пространство имен при использовании &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=tpl_favicon&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for tpl_favicon()&quot;&gt;tpl_favicon()&lt;/a&gt; is used)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;template.info.txt&lt;/code&gt; &lt;strong&gt;– Требуется&lt;/strong&gt; текстовый файл с  &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:template_info&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:template_info&quot; data-wiki-id=&quot;wiki:devel:template_info&quot;&gt;информацией о шаблоне&lt;/a&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Обработка параметров конфигурации аналогична &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:common_plugin_functions&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:common_plugin_functions&quot; data-wiki-id=&quot;wiki:devel:common_plugin_functions&quot;&gt;плагинам &lt;/a&gt;. Используйте &lt;code&gt;tpl_getConf(&amp;lt;setting&amp;gt;)&lt;/code&gt; для получения пользовательских настроек шаблона. Сохраненные локальные настройки хранятся в глобальном &lt;code&gt;conf/local.php&lt;/code&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u0432&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430_\u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u0432&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;2321-5038&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;объяснение_внутренних_механизмов&quot;&gt;Объяснение внутренних механизмов&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435_\u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445_\u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;5039-5111&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit5&quot; id=&quot;функции&quot;&gt;Функции&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Список доступных функций вы можете найти здесь: &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=inc%20template.php&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for inc/template.php&quot;&gt;API documentation&lt;/a&gt;. Самые важные приведены ниже.
&lt;/p&gt;

&lt;p&gt;
* &lt;strong&gt;&lt;code&gt;&lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=tpl_content&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for tpl_content()&quot;&gt;tpl_content()&lt;/a&gt;&lt;/code&gt;&lt;/strong&gt;
Эта функция выводит тело страницы, другими словами, всё содержимое страницы, включая &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:toc&quot; class=&quot;wikilink1&quot; title=&quot;wiki:toc&quot; data-wiki-id=&quot;wiki:toc&quot;&gt;содержание&lt;/a&gt; (&lt;abbr title=&quot;Table of Contents&quot;&gt;TOC&lt;/abbr&gt;). Вы можете отключить вывод содержания вызовом функции с параметром &lt;code&gt;false&lt;/code&gt;:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;tpl_content&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw4&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Такой приём может использоваться для размещения содержания в другой части экрана. См. функцию &lt;code&gt;&lt;a href=&quot;#tpl_toc&quot; title=&quot;wiki:devel:templates ↵&quot; class=&quot;wikilink1&quot;&gt;tpl_toc()&lt;/a&gt;&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
* &lt;strong&gt;&lt;code&gt;&lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=tpl_toc&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for tpl_toc()&quot;&gt;tpl_toc()&lt;/a&gt;&lt;/code&gt;&lt;/strong&gt;
По умолчанию, функция &lt;code&gt;&lt;a href=&quot;#tpl_content&quot; title=&quot;wiki:devel:templates ↵&quot; class=&quot;wikilink1&quot;&gt;tpl_content()&lt;/a&gt;&lt;/code&gt; сама позаботится о выводе &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:toc&quot; class=&quot;wikilink1&quot; title=&quot;wiki:toc&quot; data-wiki-id=&quot;wiki:toc&quot;&gt;содержания&lt;/a&gt;, приводя его в актуальное состояние. Если ваш шаблон использует боковую колонку или более сложную компоновку, у вас может появится желание разместить содержание независимо от содержимого страницы. Это можно сделать функцией &lt;code&gt;tpl_toc()&lt;/code&gt;. При её использовании важно запретить автоматическое размещение содержания вызовом функции &lt;code&gt;tpl_content()&lt;/code&gt; с аргументом &lt;code&gt;false&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Пример:&lt;/strong&gt;
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&amp;lt;div id=&amp;quot;content&amp;quot;&amp;gt;
    &lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt; tpl_content&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw4&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;?&amp;gt;&lt;/span&gt;
&amp;lt;/div&amp;gt;
&amp;nbsp;
&amp;lt;div id=&amp;quot;sidebar&amp;quot;&amp;gt;
    &lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt; tpl_toc&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;?&amp;gt;&lt;/span&gt;
&amp;lt;/div&amp;gt;&lt;/pre&gt;

&lt;p&gt;
Функция &lt;code&gt;tpl_toc()&lt;/code&gt; формирует содержание на основе трёх различных источников: глобальной переменной &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:environment#toc&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:environment&quot; data-wiki-id=&quot;wiki:devel:environment&quot;&gt;$TOC&lt;/a&gt;, &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:metadata&quot; class=&quot;wikilink2&quot; title=&quot;wiki:metadata&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:metadata&quot;&gt;метаданных&lt;/a&gt; страницы  или метода &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:admin_plugins&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:admin_plugins&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:admin_plugins&quot;&gt;административных плагинов&lt;/a&gt; &lt;code&gt;getTOC()&lt;/code&gt;. В случае, когда нет доступных &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:metadata&quot; class=&quot;wikilink2&quot; title=&quot;wiki:metadata&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:metadata&quot;&gt;метаданных&lt;/a&gt; старых ревизий или предварительных просмотров, &lt;code&gt;tpl_toc()&lt;/code&gt; может использовать только глобальную переменную &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:environment#toc&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:environment&quot; data-wiki-id=&quot;wiki:devel:environment&quot;&gt;$TOC&lt;/a&gt;. Если же &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:environment#toc&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:environment&quot; data-wiki-id=&quot;wiki:devel:environment&quot;&gt;$TOC&lt;/a&gt; перезаписана формирователем страницы, то &lt;code&gt;tpl_toc()&lt;/code&gt; будет работать только при условии её вызова &lt;strong&gt;после&lt;/strong&gt; &lt;code&gt;tpl_content()&lt;/code&gt;. Если подобное невозможно разметке вашего шаблона, вы можете использовать буферизацию вывода для обхода этой проблемы.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Пример:&lt;/strong&gt;
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;// помещает содержимое страницы в буфер для последующего использования&lt;/span&gt;
    &lt;a href=&quot;http://www.php.net/ob_start&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;ob_start&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    tpl_content&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw4&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$buffer&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/ob_get_clean&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;ob_get_clean&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;sy1&quot;&gt;?&amp;gt;&lt;/span&gt;
&amp;nbsp;
&amp;lt;div id=&amp;quot;sidebar&amp;quot;&amp;gt;
    &lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt; tpl_toc&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;?&amp;gt;&lt;/span&gt;
&amp;lt;/div&amp;gt;
&amp;nbsp;
&amp;lt;div id=&amp;quot;content&amp;quot;&amp;gt;
    &lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$buffer&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;?&amp;gt;&lt;/span&gt;
&amp;lt;/div&amp;gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;&lt;code&gt;&lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=tpl_getConf&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for tpl_getConf()&quot;&gt;tpl_getConf(&amp;#039;key&amp;#039;)&lt;/a&gt;&lt;/code&gt;&lt;/strong&gt; &lt;br/&gt;
Функция используется для доступа к &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:configuration&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:configuration&quot; data-wiki-id=&quot;wiki:devel:configuration&quot;&gt;конфигурационным параметрам&lt;/a&gt; из шаблона.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;&lt;code&gt;&lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=tpl_getLang&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for tpl_getLang()&quot;&gt;tpl_getLang(&amp;#039;key&amp;#039;)&lt;/a&gt;&lt;/code&gt;&lt;/strong&gt; &lt;br/&gt;
Эта функция используется для доступа к локализованным строкам шаблона. Подробности см. в документации по разработке &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:localization&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:localization&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:localization&quot;&gt;localization&lt;/a&gt; development documentation.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Кроме того, доступно множество других полезных функций шаблона. Пожалуйста, посмотрите в &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=inc%20template.php&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for inc/template.php&quot;&gt;документации API&lt;/a&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0424\u0443\u043d\u043a\u0446\u0438\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0444\u0443\u043d\u043a\u0446\u0438\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;5112-9187&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit6&quot; id=&quot;глобальные_переменные_и_константы&quot;&gt;Глобальные переменные и константы&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Полный список глобальных переменных и констант вы можете найти на странице «&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:environment&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:environment&quot; data-wiki-id=&quot;wiki:devel:environment&quot;&gt;Окружение&lt;/a&gt;».
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0413\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435_\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435_\u0438_\u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;9188-9454&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit7&quot; id=&quot;автоматизация_служебных_операций&quot;&gt;Автоматизация служебных операций&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Почти в самом конце страницы &lt;code&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:templates:main.php&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:templates:main.php&quot; data-wiki-id=&quot;wiki:devel:templates:main.php&quot;&gt;main.php&lt;/a&gt;&lt;/code&gt; стандартного шаблона вы можете увидеть вызов функции &lt;code&gt;tpl_indexerWebBug()&lt;/code&gt;. Данная функция генерирует &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt;-тег &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt;, который является результатом запроса к скрипту &lt;code&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:indexer&quot; class=&quot;wikilink2&quot; title=&quot;wiki:indexer&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:indexer&quot;&gt;lib/exe/taskrunner.php&lt;/a&gt;&lt;/code&gt;. Эта необходимая составляющая часть «Докувики» выполняет важные служебные функции, обеспечивающие правильную работу системы. Все шаблоны должны включать в себя эту функцию, без неё работа вики может быть нарушена (к примеру, &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:search&quot; class=&quot;wikilink2&quot; title=&quot;wiki:search&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:search&quot;&gt;поисковые индексы&lt;/a&gt; перестанут создаваться)
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f_\u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0445_\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;9455-10454&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit8&quot; id=&quot;класс_dokuwiki&quot;&gt;Класс «dokuwiki»&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Следует добавить класс &lt;code&gt;dokuwiki&lt;/code&gt; к некоторым «окружающим контент» элементам (либо вокруг всего текста, либо по крайней мере, вокруг &lt;code&gt;tpl_content()&lt;/code&gt;) в каждом из шаблонов &lt;code&gt;main.php&lt;/code&gt;, &lt;code&gt;detail.php&lt;/code&gt; и &lt;code&gt;mediamanager.php&lt;/code&gt;. Это необходимо для того, чтобы быть уверенным в том, что стили «Докувики» не пересекаются с другими стилями при интеграции с существующим сайтом, содержащим потенциально конфликтующие &lt;abbr title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/abbr&gt;. 
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041a\u043b\u0430\u0441\u0441 \u00abdokuwiki\u00bb&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043a\u043b\u0430\u0441\u0441_dokuwiki&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;10455-11187&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit9&quot; id=&quot;включаемые_блоки&quot;&gt;Включаемые блоки&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Включаемые блоки — простой путь добавления различного статического контента в вашу «Докувики» без создания собственного &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:template&quot; class=&quot;wikilink1&quot; title=&quot;wiki:template&quot; data-wiki-id=&quot;wiki:template&quot;&gt;шаблона&lt;/a&gt;. Вы можете использовать их для добавления стандартного заголовка или логотипа компании на каждую страницу, либо же для размещения информации об отказе от ответственности внизу страницы.
&lt;/p&gt;

&lt;p&gt;
Стандартный шаблон «Докувики» ищет файлы со специальными именами в каталоге &lt;code&gt;lib/tpl/default/&lt;/code&gt; и просто включает их в определённые места при отображении страницы. Вы вольны добавить любой &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt;-код в эти файлы. Конечно, работать это будет лишь при использовании &lt;em&gt;стандартного&lt;/em&gt; шаблона.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Совет&lt;/strong&gt; для PHP-разработчиков: вам, вероятно, будет приятно узнать, что в этих файлах можно использовать и PHP-скрипты.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u0435 \u0431\u043b\u043e\u043a\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u0435_\u0431\u043b\u043e\u043a\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;11188-12555&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit10&quot; id=&quot;доступные_блоки&quot;&gt;Доступные блоки&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Все файлы размещаются в каталоге &lt;code&gt;lib/tpl/default/&lt;/code&gt;
&lt;/p&gt;
&lt;div class=&quot;table sectionedit11&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;thead&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Имя файла           &lt;/th&gt;&lt;th class=&quot;col1 leftalign&quot;&gt; Позиция включения     &lt;/th&gt;
	&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;meta.html&lt;/code&gt;       &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Внутри &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt;-тега &amp;lt;head&amp;gt;, используйте для подключения дополнительных таблиц стилей или метазаголовков &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;topheader.html&lt;/code&gt;  &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; В самом верху страницы, сразу после тега &amp;lt;body&amp;gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;header.html&lt;/code&gt;     &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Выше верхней синей панели, ниже названия страницы и заголовка вики &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;code&gt;pageheader.html&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Ниже полоски посещенных страниц, выше основного содержания страницы &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;code&gt;pagefooter.html&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Выше нижней голубой панели, ниже отметки о последнем изменении &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row6&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;footer.html&lt;/code&gt;     &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; В самом низу страницы, перед тегом &amp;lt;/body&amp;gt; &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;secid&amp;quot;:11,&amp;quot;range&amp;quot;:&amp;quot;12680-13616&amp;quot;} --&gt;
&lt;p&gt;
«Докувики» поставляется с образцом файла &lt;code&gt;footer.html&lt;/code&gt;, содержащим кнопки лицензии «Creative Commons RDF».
&lt;a href=&quot;https://www.dokuwiki.org/wiki:devel:templates&quot; class=&quot;urlextern&quot; title=&quot;https://www.dokuwiki.org/wiki:devel:templates&quot; rel=&quot;ugc nofollow&quot;&gt;https://www.dokuwiki.org/wiki:devel:templates&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435_\u0431\u043b\u043e\u043a\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;12556-13834&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit12&quot; id=&quot;дополнения_и_файлы&quot;&gt;Дополнения и Файлы&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
К сожалению новый шаблон если имеет ширину страницы &amp;gt; 75em то таблицы в в настройке конфигурации не войдут в размер шаблона. Так как это отдельный плаген и для него отдельный стиль. Для того чтобы его изменить необходимо в файле &amp;lt;dokuwiki&amp;gt;/lib/plugins/config/style.css править значение width в следующих строках кода:
&lt;/p&gt;
&lt;pre class=&quot;code css&quot;&gt;&lt;span class=&quot;re0&quot;&gt;#config__manager&lt;/span&gt; td input&lt;span class=&quot;re1&quot;&gt;.edit&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;re3&quot;&gt;30em&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;#config__manager&lt;/span&gt; td &lt;span class=&quot;re1&quot;&gt;.input&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;re3&quot;&gt;30.8em&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;#config__manager&lt;/span&gt; td select&lt;span class=&quot;re1&quot;&gt;.edit&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;#config__manager&lt;/span&gt; td textarea&lt;span class=&quot;re1&quot;&gt;.edit&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;re3&quot;&gt;27.5em&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;re3&quot;&gt;4em&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
заменить на следующие значения:
&lt;/p&gt;
&lt;pre class=&quot;code css&quot;&gt;&lt;span class=&quot;re0&quot;&gt;#config__manager&lt;/span&gt; td input&lt;span class=&quot;re1&quot;&gt;.edit&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;re3&quot;&gt;20em&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;#config__manager&lt;/span&gt; td &lt;span class=&quot;re1&quot;&gt;.input&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;re3&quot;&gt;20.8em&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;#config__manager&lt;/span&gt; td select&lt;span class=&quot;re1&quot;&gt;.edit&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;#config__manager&lt;/span&gt; td textarea&lt;span class=&quot;re1&quot;&gt;.edit&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;auto&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;re3&quot;&gt;4em&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Боковая панель Aside справа&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&amp;lt;dokuwiki&amp;gt;/lib/tpl/starter/css/structure.css
&lt;/p&gt;
&lt;pre class=&quot;code css&quot;&gt;&lt;span class=&quot;re0&quot;&gt;#dokuwiki__site&lt;/span&gt; &lt;span class=&quot;re1&quot;&gt;.wrapper&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;relative&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;re0&quot;&gt;#dokuwiki__aside&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; __sidebar_width__&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;float&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;right&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;coMULTI&quot;&gt;/* по умолчанию слева (float: left;) */&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;relative&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;block&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;kw5&quot;&gt;dir&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;rtl&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;#dokuwiki__aside&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;float&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;right&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0414\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u0424\u0430\u0439\u043b\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f_\u0438_\u0444\u0430\u0439\u043b\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:12,&amp;quot;range&amp;quot;:&amp;quot;13835-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Mon, 10 Feb 2025 15:50:20 +0000</pubDate>
        </item>
        <item>
            <title>toolbar</title>
            <link>https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:toolbar&amp;rev=1736495556</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;панель_инструментов&quot;&gt;Панель инструментов&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Панель &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:toolbar&quot; class=&quot;wikilink1&quot; title=&quot;wiki:toolbar&quot; data-wiki-id=&quot;wiki:toolbar&quot;&gt;инструментов&lt;/a&gt; делает DokuWiki простым в использовании даже для новичков. Иногда вам может понадобиться расширить панель инструментов еще одной кнопкой. Эта страница расскажет вам немного о том, как работает панель инструментов и как ее расширить.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u0430\u043d\u0435\u043b\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u0430\u043d\u0435\u043b\u044c_\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-530&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;how_the_toolbar_is_built_and_cached&quot;&gt;How the toolbar is built (and cached)&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
The toolbar is completely built through &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:javascript&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:javascript&quot; data-wiki-id=&quot;wiki:devel:javascript&quot;&gt;JavaScript&lt;/a&gt;. Which buttons the toolbar contains, is read from an array called &lt;code&gt;toolbar&lt;/code&gt;. This array is initialized in &lt;code&gt;/lib/exe/js.php&lt;/code&gt;. This is simply done by converting the PHP array structure defined in &lt;code&gt;&lt;strong&gt;inc/toolbar.php&lt;/strong&gt;&lt;/code&gt; to JavaScript using JSON.
&lt;/p&gt;

&lt;p&gt;
This means the toolbar gets cached like any other JavaScript in DokuWiki. Whenever you do changes affecting the toolbar you should invalidate DokuWiki&amp;#039;s &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:caching&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:caching&quot; data-wiki-id=&quot;wiki:devel:caching&quot;&gt;cache&lt;/a&gt; (eg. &lt;code&gt;touch conf/local.php&lt;/code&gt;) and refresh your browser cache while editing a page (Hit Shift/Ctrl-Reload and ignore the post warning). 
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;How the toolbar is built (and cached)&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;how_the_toolbar_is_built_and_cached&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;531-1194&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit3&quot; id=&quot;the_toolbar_array&quot;&gt;The toolbar array&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
The mentioned &lt;code&gt;toolbar&lt;/code&gt; array contains one entry per button. The order of the entries defines the position of the button, with the first entry defining the most left button.
&lt;/p&gt;

&lt;p&gt;
Each entry is an associative array itself, defining the behavior of the button. The following table explains the available fields for the entries.
&lt;/p&gt;
&lt;div class=&quot;table sectionedit4&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;thead&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Name &lt;/th&gt;&lt;th class=&quot;col1&quot;&gt; Description &lt;/th&gt;
	&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;code&gt;type&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; button action type: &lt;br/&gt;
&lt;code&gt;format&lt;/code&gt; ⇒ wiki markup &lt;br/&gt;
&lt;code&gt;mediapopup&lt;/code&gt; ⇒ popup window &lt;br/&gt;
&lt;code&gt;picker&lt;/code&gt; ⇒ picker menu &lt;br/&gt;
&lt;code&gt;signature&lt;/code&gt; ⇒ signature generation and insertion &lt;br/&gt;
e.g. &lt;code&gt;yourtype&lt;/code&gt; ⇒ looks for your custom action function &lt;code&gt;addBtnActionYourtype&lt;/code&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;code&gt;title&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; title of the button, displayed on mouseover &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;code&gt;icon&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; icon to use for the button (based in &lt;code&gt;DOKUBASE/lib/images/toolbar/&lt;/code&gt;)&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;code&gt;key&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; (optional) Hotkey for the button, a value of &lt;code&gt;n&lt;/code&gt; here would result in the button being pressed when the user presses &lt;code&gt;ALT + n&lt;/code&gt; in his browser. (See also the &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=accesskeys&quot; class=&quot;wikilink2&quot; title=&quot;accesskeys&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;accesskeys&quot;&gt;access keys&lt;/a&gt; used by DokuWiki) &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;code&gt;class&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; (optional) classname for styling buttons &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row6&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;code&gt;id&lt;/code&gt;    &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; (optional) id added to button, and with a postfix to icon e.g. &lt;code&gt;&amp;lt;id&amp;gt;_ico&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row7&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot; colspan=&quot;2&quot;&gt; &lt;code&gt;format&lt;/code&gt; type specific parameters  &lt;/th&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row8&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;code&gt;open&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; opening tag of wiki markup to insert, cursor will be placed between opening and closing tag &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row9&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;code&gt;sample&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; example input to be placed between opening and closing tag, will be automatically selected to be overwritten on first input &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row10&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;code&gt;close&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; closing tag of the wiki markup to insert, cursor will be placed between opening and closing tag &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row11&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;code&gt;insert&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; wiki markup to insert (for full substitutions) &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row12&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot; colspan=&quot;2&quot;&gt; &lt;code&gt;mediapopup&lt;/code&gt; type specific parameters  &lt;/th&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row13&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;code&gt;url&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; of the popup to open &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row14&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;code&gt;name&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; internal name of the popup to open &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row15&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;code&gt;options&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; additional options for the popup window (comma-separated name-value-pairs valid as parameters for the JS function &lt;code&gt;window.open&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row16&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot; colspan=&quot;2&quot;&gt; &lt;code&gt;picker&lt;/code&gt; type specific parameters  &lt;/th&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row17&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;code&gt;list&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; list of insertable items. can either be an associative array (with the item to insert as the key and an image located in &lt;code&gt;icobase&lt;/code&gt; to use as the value) or just a simple array (with the text-items to insert directly displayed) &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row18&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;code&gt;icobase&lt;/code&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; subdirectory for item images (based in &lt;code&gt;DOKUBASE/lib/images/&lt;/code&gt;). &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;1549-3472&amp;quot;} --&gt;
&lt;p&gt;
A look at &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=inc%20toolbar.php&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;search definitions for inc/toolbar.php&quot;&gt;inc/toolbar.php&lt;/a&gt; should give you enough examples of what can be defined. Because the array is simply translated from PHP to JavaScript, the above description applies to the PHP array as well as to the resulting JavaScript array from which the toolbar is finally built.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;The toolbar array&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;the_toolbar_array&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;1195-3761&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;extending_the_toolbar&quot;&gt;Extending the Toolbar...&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
The toolbar can be customized in two ways - via JavaScript or PHP. Which method you choose basically depends on your skills and familiarity with the language at hand. For the PHP approach, you will always need to write a plugin, the JavaScript method can be used from a &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:javascript&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:javascript&quot; data-wiki-id=&quot;wiki:devel:javascript&quot;&gt;userscript&lt;/a&gt; as well.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Extending the Toolbar...&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;extending_the_toolbar&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;3762-4105&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit6&quot; id=&quot;using_php&quot;&gt;...using PHP&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
To extend the toolbar from your plugin you need to write a &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=devel:action_plugin&quot; class=&quot;wikilink2&quot; title=&quot;devel:action_plugin&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;devel:action_plugin&quot;&gt;Action Plugin&lt;/a&gt; which registers as a handler for the &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=devel:event:toolbar_define&quot; class=&quot;wikilink2&quot; title=&quot;devel:event:toolbar_define&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;devel:event:toolbar_define&quot;&gt;TOOLBAR_DEFINE&lt;/a&gt; event with an AFTER advice. Your handler function will receive the toolbar array as described earlier.
&lt;/p&gt;

&lt;p&gt;
Create your button structure according to the above information and add it to the received event data.-function in &lt;code&gt;inc/toolbar.php&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Example:
&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; register&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;Doku_Event_Handler &lt;span class=&quot;re0&quot;&gt;$controller&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$controller&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;register_hook&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;TOOLBAR_DEFINE&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;AFTER&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;insert_button&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// ...&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co4&quot;&gt;/**
 * Inserts a toolbar button
 */&lt;/span&gt;
&lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; insert_button&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;Doku_Event &lt;span class=&quot;re0&quot;&gt;$event&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$param&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$event&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
        &lt;span class=&quot;st_h&quot;&gt;&#039;type&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;format&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;st_h&quot;&gt;&#039;title&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;getLang&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;abutton&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;st_h&quot;&gt;&#039;icon&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;../../plugins/example/abutton.png&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;st_h&quot;&gt;&#039;open&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;abutton&amp;gt;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;st_h&quot;&gt;&#039;close&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;&amp;lt;/abutton&amp;gt;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;st_h&quot;&gt;&#039;block&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Try to use &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=plugin:custombuttons&quot; class=&quot;wikilink2&quot; title=&quot;plugin:custombuttons&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;plugin:custombuttons&quot;&gt;custombuttons&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;...using PHP&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;using_php&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;4106-5089&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit7&quot; id=&quot;using_javascript&quot;&gt;...using JavaScript&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Adding a button using &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:javascript&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:javascript&quot; data-wiki-id=&quot;wiki:devel:javascript&quot;&gt;JavaScript&lt;/a&gt; is similar to doing it in PHP. You just extend the &lt;code&gt;toolbar&lt;/code&gt; array.
&lt;/p&gt;

&lt;p&gt;
Because user and plugin scripts will be loaded on all requests, but the toolbar is initialized on editing only, you need to make sure the toolbar array does exist first. Do this by checking if &lt;code&gt;window.toolbar&lt;/code&gt; is defined. If it is, you can add your button at the end of the array.
&lt;/p&gt;
&lt;pre class=&quot;code javascript&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;typeof&lt;/span&gt; window.&lt;span class=&quot;me1&quot;&gt;toolbar&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;!==&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;undefined&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    toolbar&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;toolbar.&lt;span class=&quot;me1&quot;&gt;length&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        type&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;format&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        title&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;A Button&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        icon&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;abutton.png&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;// located in lib/images/toolbar/&lt;/span&gt;
        key&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        open&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;lt;abutton&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        sample&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Text between the tags&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        close&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;lt;/abutton&amp;gt;&amp;quot;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Here is another example defining a picker dropdown (assumes plugin context):
&lt;/p&gt;
&lt;pre class=&quot;code javascript&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;typeof&lt;/span&gt; window.&lt;span class=&quot;me1&quot;&gt;toolbar&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;!==&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;undefined&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;var&lt;/span&gt; notes_arr &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;co1&quot;&gt;//&#039;insertion string as key&#039; : &#039;[path/]filename.extension of the icon&#039;&lt;/span&gt;
        &lt;span class=&quot;st0&quot;&gt;&#039;&amp;lt;note&amp;gt;&amp;lt;/note&amp;gt;&lt;span class=&quot;es0&quot;&gt;\\&lt;/span&gt;n&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;           &lt;span class=&quot;st0&quot;&gt;&#039;note.png&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;st0&quot;&gt;&#039;&amp;lt;note tip&amp;gt;&amp;lt;/note&amp;gt;&lt;span class=&quot;es0&quot;&gt;\\&lt;/span&gt;n&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;       &lt;span class=&quot;st0&quot;&gt;&#039;tip.png&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;st0&quot;&gt;&#039;&amp;lt;note important&amp;gt;&amp;lt;/note&amp;gt;&lt;span class=&quot;es0&quot;&gt;\\&lt;/span&gt;n&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;important.png&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;st0&quot;&gt;&#039;&amp;lt;note warning&amp;gt;&amp;lt;/note&amp;gt;&lt;span class=&quot;es0&quot;&gt;\\&lt;/span&gt;n&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;   &lt;span class=&quot;st0&quot;&gt;&#039;warning.png&#039;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    toolbar&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;toolbar.&lt;span class=&quot;me1&quot;&gt;length&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        type&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;picker&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        title&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; LANG.&lt;span class=&quot;me1&quot;&gt;plugins&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;note&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;note_tb_title&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;// localisation&lt;/span&gt;
        icon&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;../../plugins/note/images/toolbar.png&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;  &lt;span class=&quot;co1&quot;&gt;//where in lib/images/toolbar/ the images are located&lt;/span&gt;
        key&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;n&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;//access key&lt;/span&gt;
        list&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; notes_arr&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        icobase&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;../plugins/note/images/toolbar&amp;quot;&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;// subdir of lib/images/ where images can be found.&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
You can register a simple global onclick function for your button by sticking to the naming convention &lt;code&gt;tb_&amp;lt;yourButtonType&amp;gt;&lt;/code&gt;. Here is an example for the &lt;code&gt;insert&lt;/code&gt; type from &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=lib%20scripts%20toolbar.js&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for lib/scripts/toolbar.js&quot;&gt;lib/scripts/toolbar.js&lt;/a&gt;
&lt;/p&gt;
&lt;pre class=&quot;code javascript&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;function&lt;/span&gt; tb_insert&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;btn&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; props&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; edid&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    insertAtCarret&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;edid&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;fixtxt&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;props.&lt;span class=&quot;me1&quot;&gt;insert&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    pickerClose&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Some notes:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Be aware of the default locations of the images: &lt;code&gt;lib/images/toolbar/&lt;/code&gt; and &lt;code&gt;lib/images/&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; The available options for access keys depends on the &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=accesskeys&quot; class=&quot;wikilink2&quot; title=&quot;accesskeys&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;accesskeys&quot;&gt;access keys&lt;/a&gt; used by DokuWiki and the whether they are reserved by a browser or operation system as short cut. There are many differences.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; More about &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=devel:localization#javascript_localization&quot; class=&quot;wikilink2&quot; title=&quot;devel:localization&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;devel:localization&quot;&gt;javascript localization&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;...using JavaScript&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;using_javascript&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;5090-7457&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit8&quot; id=&quot;dynamic_data&quot;&gt;Dynamic Data&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
The above methods work well for adding static buttons that add static data. When you need to do something more dynamic like adding the current date, you can not simply extend the &lt;code&gt;toolbar&lt;/code&gt; array. Instead, you need to dynamically add your button into the DOM using &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:javascript&quot; class=&quot;wikilink1&quot; title=&quot;wiki:devel:javascript&quot; data-wiki-id=&quot;wiki:devel:javascript&quot;&gt;JavaScript&lt;/a&gt;. 
&lt;/p&gt;

&lt;p&gt;
The files &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=lib%20scripts%20edit.js&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for lib/scripts/edit.js&quot;&gt;lib/scripts/edit.js&lt;/a&gt;, &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=lib%20scripts%20toolbar.js&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for lib/scripts/toolbar.js&quot;&gt;lib/scripts/toolbar.js&lt;/a&gt; and &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=&amp;amp;path=lib%20scripts%20linkwiz.js&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;search definitions for lib/scripts/linkwiz.js&quot;&gt;lib/scripts/linkwiz.js&lt;/a&gt; contains some useful functions to help you with this.
&lt;/p&gt;

&lt;p&gt;
When adding to the &lt;code&gt;toolbar&lt;/code&gt; array you must set a custom value for &lt;code&gt;type&lt;/code&gt;.  You must use characters that are valid in a function name and should capitalize on the first character.  When the toolbar is constructed it looks at the value of &lt;code&gt;type&lt;/code&gt; and appends it to the string &lt;code&gt;addBtnAction&lt;/code&gt; before calling your code.  So if you set &lt;code&gt;type&lt;/code&gt; to &lt;code&gt;Click&lt;/code&gt; the toolbar will call &lt;code&gt;addBtnActionClick&lt;/code&gt;.  This is an important note because if two plugins use the same &lt;code&gt;type&lt;/code&gt; they will conflict with each other and cause strange behavior (such as both buttons doing the exact same thing).
&lt;/p&gt;

&lt;p&gt;
The returned string is «the id for in aria-control». This is explained further in &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/windows/apps/hh767301.aspx&quot; class=&quot;urlextern&quot; title=&quot;http://msdn.microsoft.com/en-us/library/windows/apps/hh767301.aspx&quot; rel=&quot;ugc nofollow&quot;&gt;Accessible Rich Internet Applications&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
Here is an example partly from the toolbar picker:
&lt;/p&gt;
&lt;pre class=&quot;code javascript&quot;&gt;&lt;span class=&quot;coMULTI&quot;&gt;/**
 * With the first function we create a new button type called Click
 * 
 * the function name must be addBtnAction&amp;lt;Your type name&amp;gt;
 * in our case it is addBtnActionClick
 *
 * in the other function we simply use the simple toolbar method with the new type
 * 
 * you can easily extend it to complex scripts like the link wizard etc
 */&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;coMULTI&quot;&gt;/**
 * Add button action for your toolbar button
 *
 * @param  {jQuery}   $btn  Button element to add the action to
 * @param  {Array}    props Associative array of button properties
 * @param  {string}   edid  ID of the editor textarea
 * @return {string}   If button should be appended return the id for in aria-controls, 
 *                    otherwise an empty string
 */&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;function&lt;/span&gt; addBtnActionClick&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;$btn&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; props&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; edid&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;// initialize stuff if required&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;// ...&lt;/span&gt;
&amp;nbsp;
    $btn.&lt;span class=&quot;me1&quot;&gt;click&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;co1&quot;&gt;// your click handler&lt;/span&gt;
        alert&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;hey you clicked me&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;click&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// add a new toolbar button, but first check if there is a toolbar&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;typeof&lt;/span&gt; window.&lt;span class=&quot;me1&quot;&gt;toolbar&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;!==&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;undefined&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    window.&lt;span class=&quot;me1&quot;&gt;toolbar&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;window.&lt;span class=&quot;me1&quot;&gt;toolbar&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;length&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        type&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Click&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;// we have a new type that links to the function&lt;/span&gt;
        title&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Hey Click me!&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        icon&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;../../plugins/click/clickme.png&amp;quot;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Dynamic Data&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;dynamic_data&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;7458-10078&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit9&quot; id=&quot;tips&quot;&gt;Tips&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; If you don&amp;#039;t want to append your button at the end of the toolbar, you just need to insert your data into the &lt;code&gt;toolbar&lt;/code&gt; array at the position where you want your button, shifting the other buttons to the right.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; There are some &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=devel:javascript#predefined_global_variables&quot; class=&quot;wikilink2&quot; title=&quot;devel:javascript&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;devel:javascript&quot;&gt;predefined global variables&lt;/a&gt; available which you can access from your Javascript. For example JSINFO contains the page id and namespace, usage: &lt;code&gt;JSINFO.namespace&lt;/code&gt;. This might be handy when doing some more dynamic stuff.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Important&lt;/strong&gt;: If the button does not appear, expire the cache of your DokuWiki by saving your config in the Config Manager or touching the &lt;code&gt;conf/local.php&lt;/code&gt; of your wiki AND delete your browser cache (Ctrl+F5 or Ctrl+R)! Then reload the editor page and your button should appear.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;

&lt;h4 id=&quot;removing_buttons&quot;&gt;Removing Buttons&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
If you want to remove some of the toolbar buttons, you can do so by adding the following code into &lt;code&gt;/conf/userscript.js&lt;/code&gt;. Note that this is not in any function, simply append this code to the end of the file:
&lt;/p&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?do=export_code&amp;amp;id=wiki:devel:toolbar&amp;amp;codeblock=5&quot; title=&quot;Скачать фрагмент кода&quot; class=&quot;mediafile mf_js&quot;&gt;/conf/userscript.js&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code javascript&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;typeof&lt;/span&gt; window.&lt;span class=&quot;me1&quot;&gt;toolbar&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;!==&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;undefined&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
   &lt;span class=&quot;kw1&quot;&gt;var&lt;/span&gt; blacklist &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Bold Text&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Italic Text&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Underlined Text&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Monospaced Text&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Strike-through Text&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; 
   &lt;span class=&quot;st0&quot;&gt;&amp;quot;Same Level Headline&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Lower Headline&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Higher Headline&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Select Headline&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Internal Link&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;External Link&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; 
   &lt;span class=&quot;st0&quot;&gt;&amp;quot;Horizontal Rule&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Add Images and other files (opens in a new window)&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Smileys&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Special Chars&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Insert Signature&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    window.&lt;span class=&quot;me1&quot;&gt;toolbar&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; window.&lt;span class=&quot;me1&quot;&gt;toolbar&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;filter&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;elem&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; jQuery.&lt;span class=&quot;me1&quot;&gt;inArray&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;elem.&lt;span class=&quot;me1&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; blacklist&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;p&gt;
This is from my personal wiki where I removed almost all the buttons. You can figure out what the title of your button is by running the following snippet in a javascript console:
&lt;/p&gt;
&lt;pre class=&quot;code javascript&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;i &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; window.&lt;span class=&quot;me1&quot;&gt;toolbar&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; console.&lt;span class=&quot;me1&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;toolbar&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;i&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Then take the string and append it to the &amp;#039;blacklist&amp;#039; array in the code.
&lt;/p&gt;

&lt;p&gt;
See also the &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=plugin:toolbuttondel&quot; class=&quot;wikilink2&quot; title=&quot;plugin:toolbuttondel&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;plugin:toolbuttondel&quot;&gt;toolbuttondel&lt;/a&gt; plugin for removing toolbar items.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Tips&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;tips&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:5,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;10079-12073&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit10&quot; id=&quot;css_spritemap&quot;&gt;CSS Spritemap&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
If you need to reduce the number of server requests for downloading micro-icons, you can use the following style fix.&lt;br/&gt;

&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; 15 icons of the 20 in the &lt;code&gt;/lib/images/toolbar/&lt;/code&gt; folder are used in a constant order and can be combined into a vertical ribbon named &lt;strong&gt;spritemap&lt;/strong&gt;.&lt;/div&gt;
&lt;ol&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; You can take the finished spritemap &lt;a href=&quot;https://comicslate.org/lib/images/toolbar/toolbar.png&quot; class=&quot;urlextern&quot; title=&quot;https://comicslate.org/lib/images/toolbar/toolbar.png&quot; rel=&quot;ugc nofollow&quot;&gt;here&lt;/a&gt; and put it in &lt;code&gt;/lib/images/toolbar/&lt;/code&gt; named as &lt;code&gt;toolbar.png&lt;/code&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;abbr title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/abbr&gt; used to show a certain point on spritemap.&lt;/div&gt;
&lt;ol&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; Add the following &lt;abbr title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/abbr&gt; rules to your local style file &lt;code&gt;/conf/userstyle.less&lt;/code&gt; or template&amp;#039;s style file &lt;code&gt;/lib/tpl/&amp;lt;name&amp;gt;/css/design.less&lt;/code&gt;:&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;code css&quot;&gt;&lt;span class=&quot;re0&quot;&gt;#tool__bar&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
	&lt;span class=&quot;kw2&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kw5&quot;&gt;nth-of-type&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kw5&quot;&gt;nth-of-type&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kw5&quot;&gt;nth-of-type&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kw5&quot;&gt;nth-of-type&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kw5&quot;&gt;nth-of-type&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;kw2&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kw5&quot;&gt;nth-of-type&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kw5&quot;&gt;nth-of-type&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kw5&quot;&gt;nth-of-type&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kw5&quot;&gt;nth-of-type&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kw5&quot;&gt;nth-of-type&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;kw2&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kw5&quot;&gt;nth-of-type&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;11&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kw5&quot;&gt;nth-of-type&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;12&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kw5&quot;&gt;nth-of-type&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;13&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kw5&quot;&gt;nth-of-type&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;14&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kw5&quot;&gt;nth-of-type&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;15&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
		&lt;span class=&quot;kw1&quot;&gt;background&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;co2&quot;&gt;/lib/images/toolbar/toolbar.png&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;kw1&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;re3&quot;&gt;16px&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;kw1&quot;&gt;margin&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;re3&quot;&gt;4px&lt;/span&gt; &lt;span class=&quot;re3&quot;&gt;7px&lt;/span&gt; &lt;span class=&quot;re3&quot;&gt;3px&lt;/span&gt; &lt;span class=&quot;re3&quot;&gt;3px&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;kw1&quot;&gt;vertical-align&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;middle&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;kw1&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;re3&quot;&gt;16px&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
		img &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
			&lt;span class=&quot;kw1&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;none&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
	&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
	&lt;span class=&quot;kw2&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kw5&quot;&gt;nth-of-type&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;background-position&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
	&lt;span class=&quot;kw2&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kw5&quot;&gt;nth-of-type&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;background-position&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;re3&quot;&gt;-16px&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
	&lt;span class=&quot;kw2&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kw5&quot;&gt;nth-of-type&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;background-position&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;re3&quot;&gt;-32px&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
	&lt;span class=&quot;kw2&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kw5&quot;&gt;nth-of-type&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;background-position&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;re3&quot;&gt;-48px&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
	&lt;span class=&quot;kw2&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kw5&quot;&gt;nth-of-type&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;background-position&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;re3&quot;&gt;-64px&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
	&lt;span class=&quot;kw2&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kw5&quot;&gt;nth-of-type&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;background-position&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;re3&quot;&gt;-80px&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
	&lt;span class=&quot;kw2&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kw5&quot;&gt;nth-of-type&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;background-position&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;re3&quot;&gt;-96px&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
	&lt;span class=&quot;kw2&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kw5&quot;&gt;nth-of-type&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;background-position&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;re3&quot;&gt;-112px&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
	&lt;span class=&quot;kw2&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kw5&quot;&gt;nth-of-type&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;background-position&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;re3&quot;&gt;-128px&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
	&lt;span class=&quot;kw2&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kw5&quot;&gt;nth-of-type&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;background-position&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;re3&quot;&gt;-144px&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
	&lt;span class=&quot;kw2&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kw5&quot;&gt;nth-of-type&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;11&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;background-position&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;re3&quot;&gt;-160px&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
	&lt;span class=&quot;kw2&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kw5&quot;&gt;nth-of-type&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;12&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;background-position&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;re3&quot;&gt;-176px&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
	&lt;span class=&quot;kw2&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kw5&quot;&gt;nth-of-type&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;13&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;background-position&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;re3&quot;&gt;-192px&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
	&lt;span class=&quot;kw2&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kw5&quot;&gt;nth-of-type&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;14&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;background-position&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;re3&quot;&gt;-208px&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
	&lt;span class=&quot;kw2&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;kw5&quot;&gt;nth-of-type&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;15&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;background-position&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;re3&quot;&gt;-224px&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Maybe one day this fix will be obsolete due to the introduction of spritemap in the Dokuwiki.
&lt;br/&gt;
 см. также &lt;a href=&quot;https://www.dokuwiki.org/devel:toolbar&quot; class=&quot;urlextern&quot; title=&quot;https://www.dokuwiki.org/devel:toolbar&quot; rel=&quot;ugc nofollow&quot;&gt;https://www.dokuwiki.org/devel:toolbar&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;CSS Spritemap&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;css_spritemap&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:7,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;12074-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Fri, 10 Jan 2025 07:52:36 +0000</pubDate>
        </item>
        <item>
            <title>xmlrpc</title>
            <link>https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:xmlrpc&amp;rev=1736926140</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;xml-rpc&quot;&gt;XML-RPC&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
XML-RPC is one of the available protocols to access DokuWiki&amp;#039;s &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:remote_api&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:remote_api&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:remote_api&quot;&gt;Remote API&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
The &lt;abbr title=&quot;Application Programming Interface&quot;&gt;API&lt;/abbr&gt; implements the &lt;a href=&quot;http://www.jspwiki.org/wiki/WikiRPCInterface2&quot; class=&quot;urlextern&quot; title=&quot;http://www.jspwiki.org/wiki/WikiRPCInterface2&quot; rel=&quot;ugc nofollow&quot;&gt;Wiki RPC Interface 2.0 Specifications&lt;/a&gt; (&lt;a href=&quot;https://web.archive.org/web/20130526043929/http://www.jspwiki.org/wiki/WikiRPCInterface2&quot; class=&quot;urlextern&quot; title=&quot;https://web.archive.org/web/20130526043929/http://www.jspwiki.org/wiki/WikiRPCInterface2&quot; rel=&quot;ugc nofollow&quot;&gt;web.archive.org&lt;/a&gt;) in the &lt;code&gt;wiki.*&lt;/code&gt; namespace and adds additional DokuWiki specific calls in the &lt;code&gt;dokuwiki.*&lt;/code&gt; namespace. 
&lt;/p&gt;

&lt;p&gt;
Plugins can add their own calls to the &lt;abbr title=&quot;Application Programming Interface&quot;&gt;API&lt;/abbr&gt; using &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=devel:remote_plugins&quot; class=&quot;wikilink2&quot; title=&quot;devel:remote_plugins&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;devel:remote_plugins&quot;&gt;Remote Plugin components&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
Note: there is also a &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:jsonrpc&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:jsonrpc&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:jsonrpc&quot;&gt;JSON-RPC&lt;/a&gt; &lt;abbr title=&quot;Application Programming Interface&quot;&gt;API&lt;/abbr&gt; which provides the same functionality but is based on JSON rather XML.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;XML-RPC&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;xml-rpc&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-654&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;get_it_working&quot;&gt;Get It Working&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Set the &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=config:remote&quot; class=&quot;wikilink2&quot; title=&quot;config:remote&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;config:remote&quot;&gt;remote&lt;/a&gt; option to enable XML-RPC in the Configuration Settings «Authentication» section&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Set the &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=config:remoteuser&quot; class=&quot;wikilink2&quot; title=&quot;config:remoteuser&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;config:remoteuser&quot;&gt;remoteuser&lt;/a&gt; option with a mix of comma separated «usernames,groups» &lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; For security reasons it&amp;#039;s safer to allow access to the XML-RPC over HTTPS only. DokuWiki&amp;#039;s &lt;code&gt;.htaccess.dist&lt;/code&gt; contains some rewrite rules to do that.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; You might need to install an XML package like &lt;code&gt;php-xml&lt;/code&gt; (on debian)&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Get It Working&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;get_it_working&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;655-1113&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;accessing_the_xml-rpc_interface&quot;&gt;Accessing The XML-RPC Interface&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
You can access the XML-RPC interface via the following URLs:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;http://&amp;lt;your wiki/domain/ip&amp;gt;/lib/exe/xmlrpc.php&lt;/pre&gt;

&lt;p&gt;
or
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;https://&amp;lt;your wiki/domain/ip&amp;gt;/lib/exe/xmlrpc.php&lt;/pre&gt;

&lt;p&gt;
Here are some &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=devel:xmlrpc:clients&quot; class=&quot;wikilink2&quot; title=&quot;devel:xmlrpc:clients&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;devel:xmlrpc:clients&quot;&gt;Samples of Clients using the XML-RPC Api&lt;/a&gt; to test with
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Accessing The XML-RPC Interface&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;accessing_the_xml-rpc_interface&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;1114-1419&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;sample_xml_requests&quot;&gt;Sample XML Requests&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
You should use an XML-RPC library instead of hand-crafting your requests.
&lt;/p&gt;

&lt;p&gt;
Here is an example of how to post to the &lt;abbr title=&quot;Application Programming Interface&quot;&gt;API&lt;/abbr&gt;:
&lt;/p&gt;
&lt;pre class=&quot;code xml&quot;&gt;POST /RPC2 HTTP/1.0
User-Agent: Frontier/5.1.2 (WinNT)
Host: betty.userland.com
Content-Type: text/xml
Content-length: 181
&amp;nbsp;
&lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;?xml&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;version&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;1.0&amp;quot;&lt;/span&gt;&lt;span class=&quot;re2&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;methodCall&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;methodName&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;examples.getStateName&lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/methodName&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;params&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;param&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; 
            &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;value&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
                &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;i4&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;41&lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/i4&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
            &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/value&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/param&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; 
    &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/params&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; 
&lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/methodCall&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre class=&quot;code xml&quot;&gt;&lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;?xml&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;version&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;1.0&amp;quot;&lt;/span&gt;&lt;span class=&quot;re2&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;methodCall&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;methodName&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;dokuwiki.getVersion&lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/methodName&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/methodCall&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
example put page
&lt;/p&gt;
&lt;pre class=&quot;code xml&quot;&gt;&lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;?xml&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;version&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;1.0&amp;quot;&lt;/span&gt;&lt;span class=&quot;re2&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;methodCall&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;methodName&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;wiki.putPage&lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/methodName&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;params&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;param&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; 
            &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;value&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
                &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;string&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;myputpage  
                &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/string&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
            &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/value&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/param&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; 
        &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;param&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; 
            &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;value&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
                &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;string&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;This is my page content&lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/string&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
            &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/value&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/param&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;param&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; 
            &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;value&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
                &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;struct&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
                    &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;member&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
                        &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;name&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;sum&lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/name&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
                        &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;value&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;string&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Spiceworks&lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/string&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/value&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
                    &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/member&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
                    &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;member&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
                        &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;name&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;minor&lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/name&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
                        &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;value&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;boolean&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;True&lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/boolean&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/value&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
                    &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/member&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
                &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/struct&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
            &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/value&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/param&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; 
    &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/params&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; 
&lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/methodCall&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Sample XML Requests&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;sample_xml_requests&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;1420-2956&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;available_functions&quot;&gt;Available Functions&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Functions are listed in the following format:
&lt;/p&gt;
&lt;div class=&quot;table sectionedit6&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Name         &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; The name of the function                                             &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Parameters   &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; A list of parameters to pass to the function                         &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Data         &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; The type of the returned data                                        &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Description  &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Short explanation what the function does                             &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Since        &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; The DokuWiki (and XML-RPC &lt;abbr title=&quot;Application Programming Interface&quot;&gt;API&lt;/abbr&gt; Version) this function was introduced  &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;3035-3474&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Available Functions&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;available_functions&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;2957-3475&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit7&quot; id=&quot;dokuwikigetpagelist&quot;&gt;dokuwiki.getPagelist&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit8&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Name        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;dokuwiki.getPagelist&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Parameters  &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (string) namespace, (array) options &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Data        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (array) list of page items &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Description &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; Lists all pages within a given namespace. The options are passed directly to &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=search_allpages&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for search_allpages()&quot;&gt;search_allpages()&lt;/a&gt;. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Since       &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; 2009-03-06 (1) &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table1&amp;quot;,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;3507-3804&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;dokuwiki.getPagelist&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;dokuwikigetpagelist&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;3476-3805&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit9&quot; id=&quot;dokuwikigetversion&quot;&gt;dokuwiki.getVersion&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit10&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Name        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;dokuwiki.getVersion&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Parameters  &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; - &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Data        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (string) version number &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Description &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; Returns the DokuWiki version of the remote Wiki. &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table2&amp;quot;,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;3836-4006&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;dokuwiki.getVersion&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;dokuwikigetversion&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;3806-4007&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit11&quot; id=&quot;dokuwikigettime&quot;&gt;dokuwiki.getTime&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit12&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Name        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;dokuwiki.getTime&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Parameters  &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; - &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Data        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (int) timestamp &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Description &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; Returns the current time at the remote wiki server as Unix timestamp. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Since       &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; 2009-03-06 (1) &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table3&amp;quot;,&amp;quot;secid&amp;quot;:12,&amp;quot;range&amp;quot;:&amp;quot;4035-4248&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;dokuwiki.getTime&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;dokuwikigettime&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:11,&amp;quot;range&amp;quot;:&amp;quot;4008-4249&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit13&quot; id=&quot;dokuwikigetxmlrpcapiversion&quot;&gt;dokuwiki.getXMLRPCAPIVersion&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit14&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Name        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;dokuwiki.getXMLRPCAPIVersion&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Parameters  &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; - &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Data        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (int) version number &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Description &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; Returns the XML RPC interface version of the remote Wiki. This is DokuWiki implementation specific and independent of the supported standard &lt;abbr title=&quot;Application Programming Interface&quot;&gt;API&lt;/abbr&gt; version returned by wiki.getRPCVersionSupported. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Since       &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; 2009-03-06 (1) &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table4&amp;quot;,&amp;quot;secid&amp;quot;:14,&amp;quot;range&amp;quot;:&amp;quot;4289-4643&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;dokuwiki.getXMLRPCAPIVersion&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;dokuwikigetxmlrpcapiversion&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:13,&amp;quot;range&amp;quot;:&amp;quot;4250-4644&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit15&quot; id=&quot;dokuwikilogin&quot;&gt;dokuwiki.login&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit16&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Name        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;dokuwiki.login&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Parameters  &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (string) user, (string) password &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Data        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (boolean) login successful &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Description &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; Uses the provided credentials to execute a login and will set cookies. This can be used to make authenticated requests afterwards. Your client needs to support cookie handling. Alternatively use HTTP basic auth credentials. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Since       &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; 2009-03-06 (1) &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table5&amp;quot;,&amp;quot;secid&amp;quot;:16,&amp;quot;range&amp;quot;:&amp;quot;4670-5077&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;dokuwiki.login&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;dokuwikilogin&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:15,&amp;quot;range&amp;quot;:&amp;quot;4645-5077&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit17&quot; id=&quot;dokuwikisearch&quot;&gt;dokuwiki.search&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit18&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Name        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;dokuwiki.search&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Parameters  &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (string) a query string as described on &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=search&quot; class=&quot;wikilink2&quot; title=&quot;search&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;search&quot;&gt;search&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Data        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (array) associative array with matching pages similar to what is returned by &lt;code&gt;dokuwiki.getPagelist&lt;/code&gt;, snippets are provided for the first 15 results &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Description &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; Performs a fulltext search. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Since       &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; 2010-02-28 (3) &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table6&amp;quot;,&amp;quot;secid&amp;quot;:18,&amp;quot;range&amp;quot;:&amp;quot;5105-5459&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;dokuwiki.search&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;dokuwikisearch&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:17,&amp;quot;range&amp;quot;:&amp;quot;5078-5460&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit19&quot; id=&quot;dokuwikigettitle&quot;&gt;dokuwiki.getTitle&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit20&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Name        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;dokuwiki.getTitle&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Parameters  &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; - &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Data        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (string) the title of the wiki &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Description &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; Returns the title of the wiki. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Since       &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; 2010-04-18 (4) &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table7&amp;quot;,&amp;quot;secid&amp;quot;:20,&amp;quot;range&amp;quot;:&amp;quot;5490-5680&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;dokuwiki.getTitle&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;dokuwikigettitle&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:19,&amp;quot;range&amp;quot;:&amp;quot;5461-5681&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit21&quot; id=&quot;dokuwikiappendpage&quot;&gt;dokuwiki.appendPage&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit22&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Name        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;dokuwiki.appendPage &lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Parameters  &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (string) &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=pagename&quot; class=&quot;wikilink2&quot; title=&quot;pagename&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;pagename&quot;&gt;pagename&lt;/a&gt;, (string) raw Wiki text, (array) attrs&lt;br/&gt;
Where &lt;code&gt;attrs&lt;/code&gt; can contain the following:&lt;br/&gt;
&lt;pre class=&quot;code&quot;&gt;$attrs[&amp;#039;sum&amp;#039;] = (string) change summary
$attrs[&amp;#039;minor&amp;#039;] = (boolean) minor&lt;/pre&gt;
&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Data        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (boolean) &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Description &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; Appends text to a Wiki Page. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Since       &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; 2010-11-20 (5) &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table8&amp;quot;,&amp;quot;secid&amp;quot;:22,&amp;quot;range&amp;quot;:&amp;quot;5712-6077&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;dokuwiki.appendPage&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;dokuwikiappendpage&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:21,&amp;quot;range&amp;quot;:&amp;quot;5682-6078&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit23&quot; id=&quot;dokuwikisetlocks&quot;&gt;dokuwiki.setLocks&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit24&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Name        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;dokuwiki.setLocks&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Parameters  &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (array) list of two lists of page ids &lt;pre class=&quot;code&quot;&gt;[
    &amp;#039;lock&amp;#039; =&amp;gt; [...], 
    &amp;#039;unlock&amp;#039; =&amp;gt; [...]
]&lt;/pre&gt;
&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Data        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (array) array with 4 lists of pageids &lt;pre class=&quot;code&quot;&gt;[
    &amp;#039;locked&amp;#039; =&amp;gt; [...], 
    &amp;#039;lockfail&amp;#039; =&amp;gt; [...], 
    &amp;#039;unlocked&amp;#039; =&amp;gt; [...], 
    &amp;#039;unlockfail&amp;#039; =&amp;gt; [...]
]&lt;/pre&gt;
&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Description &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; Allows you to lock or unlock a whole bunch of pages at once. Useful when you are about to do an operation over multiple pages. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Since       &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; 2009-03-06 (1) &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table9&amp;quot;,&amp;quot;secid&amp;quot;:24,&amp;quot;range&amp;quot;:&amp;quot;6108-6617&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;dokuwiki.setLocks&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;dokuwikisetlocks&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:23,&amp;quot;range&amp;quot;:&amp;quot;6079-6618&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit25&quot; id=&quot;dokuwikicreateuser&quot;&gt;dokuwiki.createUser&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit26&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Name        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;dokuwiki.createUser&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Parameters  &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (array) parameters, where &lt;code&gt;parameters&lt;/code&gt; can contain:  &lt;pre class=&quot;code&quot;&gt;$params =  [
                &amp;#039;user&amp;#039; =&amp;gt; &amp;#039;username&amp;#039;,
                &amp;#039;password&amp;#039; =&amp;gt; &amp;#039;password1&amp;#039;,
                &amp;#039;name&amp;#039; =&amp;gt; &amp;#039;User Name&amp;#039;,
                &amp;#039;mail&amp;#039; =&amp;gt; &amp;#039;user@example.com&amp;#039;,
                &amp;#039;groups&amp;#039; =&amp;gt; [
                    &amp;#039;user&amp;#039;,
                    &amp;#039;test&amp;#039;
                ],
                &amp;#039;notify&amp;#039; =&amp;gt; false
            ]&lt;/pre&gt;
&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Data        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (bool) true if the user is created &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Description &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; Create a user. Returns 400 range &lt;a href=&quot;#xml-rpc_error_codes&quot; title=&quot;wiki:devel:xmlrpc ↵&quot; class=&quot;wikilink1&quot;&gt;error codes&lt;/a&gt; if input is not accepted.&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Since       &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; 2022-06-24 &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table10&amp;quot;,&amp;quot;secid&amp;quot;:26,&amp;quot;range&amp;quot;:&amp;quot;6650-7303&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;dokuwiki.createUser&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;dokuwikicreateuser&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:6,&amp;quot;secid&amp;quot;:25,&amp;quot;range&amp;quot;:&amp;quot;6619-7305&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit27&quot; id=&quot;dokuwikideleteusers&quot;&gt;dokuwiki.deleteUsers&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit28&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Name        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;dokuwiki.deleteUsers&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Parameters  &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (array) list of usernames to delete &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Data        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (bool) true if the users were deleted &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Description &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; Allows you to delete one or more users. Useful to implement GDPR right to be forgotten tools. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Since       &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; 2018-05-24 &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table11&amp;quot;,&amp;quot;secid&amp;quot;:28,&amp;quot;range&amp;quot;:&amp;quot;7338-7631&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;dokuwiki.deleteUsers&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;dokuwikideleteusers&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:7,&amp;quot;secid&amp;quot;:27,&amp;quot;range&amp;quot;:&amp;quot;7306-7632&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit29&quot; id=&quot;wikigetrpcversionsupported&quot;&gt;wiki.getRPCVersionSupported&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit30&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Name        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;wiki.getRPCVersionSupported&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Parameters  &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; - &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Data        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (string) version number &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Description &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; Returns 2 with the supported RPC &lt;abbr title=&quot;Application Programming Interface&quot;&gt;API&lt;/abbr&gt; version. &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table12&amp;quot;,&amp;quot;secid&amp;quot;:30,&amp;quot;range&amp;quot;:&amp;quot;7671-7846&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;wiki.getRPCVersionSupported&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;wikigetrpcversionsupported&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:7,&amp;quot;secid&amp;quot;:29,&amp;quot;range&amp;quot;:&amp;quot;7633-7847&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit31&quot; id=&quot;wikiaclcheck&quot;&gt;wiki.aclCheck&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit32&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Name        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;wiki.aclCheck&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Parameters  &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (string) &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=pagename&quot; class=&quot;wikilink2&quot; title=&quot;pagename&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;pagename&quot;&gt;pagename&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Data        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (int) Permissions of given wiki page &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Description &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; Returns the permission of the given wikipage. &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table13&amp;quot;,&amp;quot;secid&amp;quot;:32,&amp;quot;range&amp;quot;:&amp;quot;7872-8067&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;wiki.aclCheck&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;wikiaclcheck&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:7,&amp;quot;secid&amp;quot;:31,&amp;quot;range&amp;quot;:&amp;quot;7848-8068&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit33&quot; id=&quot;wikigetpage&quot;&gt;wiki.getPage&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit34&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Name        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;wiki.getPage&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Parameters  &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (string) &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=pagename&quot; class=&quot;wikilink2&quot; title=&quot;pagename&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;pagename&quot;&gt;pagename&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Data        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (string) raw Wiki text &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Description &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; Returns the raw Wiki text for a page. &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table14&amp;quot;,&amp;quot;secid&amp;quot;:34,&amp;quot;range&amp;quot;:&amp;quot;8092-8264&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;wiki.getPage&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;wikigetpage&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:7,&amp;quot;secid&amp;quot;:33,&amp;quot;range&amp;quot;:&amp;quot;8069-8265&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit35&quot; id=&quot;wikigetpageversion&quot;&gt;wiki.getPageVersion&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit36&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Name        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;wiki.getPageVersion&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Parameters  &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (string) &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=pagename&quot; class=&quot;wikilink2&quot; title=&quot;pagename&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;pagename&quot;&gt;pagename&lt;/a&gt;, (int) Timestamp &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Data        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (string) raw Wiki text &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Description &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; Returns the raw Wiki text for a specific revision of a Wiki page. &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table15&amp;quot;,&amp;quot;secid&amp;quot;:36,&amp;quot;range&amp;quot;:&amp;quot;8296-8520&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;wiki.getPageVersion&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;wikigetpageversion&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:7,&amp;quot;secid&amp;quot;:35,&amp;quot;range&amp;quot;:&amp;quot;8266-8521&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit37&quot; id=&quot;wikigetpageversions&quot;&gt;wiki.getPageVersions&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit38&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Name         &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; &lt;code&gt;wiki.getPageVersions&lt;/code&gt;                                                                                                                                                                                                                                                               &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Parameters   &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; (string) &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=pagename&quot; class=&quot;wikilink2&quot; title=&quot;pagename&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;pagename&quot;&gt;pagename&lt;/a&gt;, (int) offset                                                                                                                                                                                                                                                   &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Data         &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; (array) each array item holds the following data: &lt;br/&gt;
&lt;br/&gt;
&lt;pre class=&quot;code&quot;&gt;$data[&amp;#039;user&amp;#039;] = username
$data[&amp;#039;ip&amp;#039;] = ip address
$data[&amp;#039;type&amp;#039;] = type of change
$data[&amp;#039;sum&amp;#039;] = summary
$data[&amp;#039;modified&amp;#039;] =  modification date as IXR_Date Object
$data[&amp;#039;version&amp;#039;] = page version as timestamp&lt;/pre&gt;
&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Description  &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Returns the available versions of a Wiki page. The number of pages in the result is controlled via the &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=config:recent&quot; class=&quot;wikilink2&quot; title=&quot;config:recent&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;config:recent&quot;&gt;recent&lt;/a&gt; configuration setting. The offset can be used to list earlier versions in the history.  &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table16&amp;quot;,&amp;quot;secid&amp;quot;:38,&amp;quot;range&amp;quot;:&amp;quot;8553-9673&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;wiki.getPageVersions&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;wikigetpageversions&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:7,&amp;quot;secid&amp;quot;:37,&amp;quot;range&amp;quot;:&amp;quot;8522-9674&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit39&quot; id=&quot;wikigetpageinfo&quot;&gt;wiki.getPageInfo&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit40&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Name        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;wiki.getPageInfo&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Parameters  &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (string) &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=pagename&quot; class=&quot;wikilink2&quot; title=&quot;pagename&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;pagename&quot;&gt;pagename&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Data        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (array) an array containing the following data: &lt;br/&gt;
&lt;br/&gt;
&lt;pre class=&quot;code&quot;&gt;$data[&amp;#039;name&amp;#039;] = [[:pagename]]
$data[&amp;#039;lastModified&amp;#039;] = modification date as IXR_Date Object
$data[&amp;#039;author&amp;#039;] = author of the Wiki page.
$data[&amp;#039;version&amp;#039;] = page version as timestamp&lt;/pre&gt;
&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Description &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; Returns information about a Wiki page. &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table17&amp;quot;,&amp;quot;secid&amp;quot;:40,&amp;quot;range&amp;quot;:&amp;quot;9702-10103&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;wiki.getPageInfo&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;wikigetpageinfo&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:8,&amp;quot;secid&amp;quot;:39,&amp;quot;range&amp;quot;:&amp;quot;9675-10104&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit41&quot; id=&quot;wikigetpageinfoversion&quot;&gt;wiki.getPageInfoVersion&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit42&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Name        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;wiki.getPageInfoVersion&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Parameters  &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (string) &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=pagename&quot; class=&quot;wikilink2&quot; title=&quot;pagename&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;pagename&quot;&gt;pagename&lt;/a&gt;, (int) timestamp &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Data        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (array) an array containing the following data: &lt;br/&gt;
&lt;br/&gt;
&lt;pre class=&quot;code&quot;&gt;$data[&amp;#039;name&amp;#039;] = [[:pagename]]
$data[&amp;#039;lastModified&amp;#039;] = modification date as UTC timestamp
$data[&amp;#039;author&amp;#039;] = author of the Wiki page.
$data[&amp;#039;version&amp;#039;] = page version as timestamp&lt;/pre&gt;
&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Description &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; Returns information about a specific version of a Wiki page. &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table18&amp;quot;,&amp;quot;secid&amp;quot;:42,&amp;quot;range&amp;quot;:&amp;quot;10139-10584&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;wiki.getPageInfoVersion&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;wikigetpageinfoversion&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:9,&amp;quot;secid&amp;quot;:41,&amp;quot;range&amp;quot;:&amp;quot;10105-10585&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit43&quot; id=&quot;wikigetpagehtml&quot;&gt;wiki.getPageHTML&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit44&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Name        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;wiki.getPageHTML&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Parameters  &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (string) &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=pagename&quot; class=&quot;wikilink2&quot; title=&quot;pagename&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;pagename&quot;&gt;pagename&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Data        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (string) rendered &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Description &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; Returns the rendered XHTML body of a Wiki page. &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table19&amp;quot;,&amp;quot;secid&amp;quot;:44,&amp;quot;range&amp;quot;:&amp;quot;10613-10799&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;wiki.getPageHTML&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;wikigetpagehtml&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:10,&amp;quot;secid&amp;quot;:43,&amp;quot;range&amp;quot;:&amp;quot;10586-10800&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit45&quot; id=&quot;wikigetpagehtmlversion&quot;&gt;wiki.getPageHTMLVersion&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit46&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Name        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;wiki.getPageHTMLVersion&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Parameters  &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (string) &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=pagename&quot; class=&quot;wikilink2&quot; title=&quot;pagename&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;pagename&quot;&gt;pagename&lt;/a&gt;, (int) timestamp &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Data        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (string) rendered &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Description &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; Returns the rendered &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt; of a specific version of a Wiki page. &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table20&amp;quot;,&amp;quot;secid&amp;quot;:46,&amp;quot;range&amp;quot;:&amp;quot;10835-11061&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;wiki.getPageHTMLVersion&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;wikigetpagehtmlversion&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:10,&amp;quot;secid&amp;quot;:45,&amp;quot;range&amp;quot;:&amp;quot;10801-11062&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit47&quot; id=&quot;wikiputpage&quot;&gt;wiki.putPage&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit48&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Name        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;wiki.putPage&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Parameters  &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (string) &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=pagename&quot; class=&quot;wikilink2&quot; title=&quot;pagename&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;pagename&quot;&gt;pagename&lt;/a&gt;, (string) raw Wiki text, (array) attrs&lt;br/&gt;
Where &lt;code&gt;attrs&lt;/code&gt; can contain the following:&lt;br/&gt;
&lt;pre class=&quot;code&quot;&gt;$attrs[&amp;#039;sum&amp;#039;] = (string) change summary
$attrs[&amp;#039;minor&amp;#039;] = (boolean) minor&lt;/pre&gt;
&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Data        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (boolean) &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Description &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; Saves a Wiki Page. &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table21&amp;quot;,&amp;quot;secid&amp;quot;:48,&amp;quot;range&amp;quot;:&amp;quot;11086-11400&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;wiki.putPage&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;wikiputpage&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:10,&amp;quot;secid&amp;quot;:47,&amp;quot;range&amp;quot;:&amp;quot;11063-11401&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit49&quot; id=&quot;wikilistlinks&quot;&gt;wiki.listLinks&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit50&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Name        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;wiki.listLinks&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Parameters  &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (string) &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=pagename&quot; class=&quot;wikilink2&quot; title=&quot;pagename&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;pagename&quot;&gt;pagename&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Data        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (array) each array item holds the following data: &lt;br/&gt;
&lt;br/&gt;
&lt;pre class=&quot;code&quot;&gt;$data[&amp;#039;type&amp;#039;] = local/extern
$data[&amp;#039;page&amp;#039;] = the wiki page (or the complete URL if extern)
$data[&amp;#039;href&amp;#039;] = the complete URL&lt;/pre&gt;
&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Description &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; Returns a list of all links contained in a Wiki page. &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table22&amp;quot;,&amp;quot;secid&amp;quot;:50,&amp;quot;range&amp;quot;:&amp;quot;11427-11788&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;wiki.listLinks&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;wikilistlinks&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:11,&amp;quot;secid&amp;quot;:49,&amp;quot;range&amp;quot;:&amp;quot;11402-11789&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit51&quot; id=&quot;wikigetallpages&quot;&gt;wiki.getAllPages&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit52&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Name        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;wiki.getAllPages&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Parameters  &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; - &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Data        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (array) One item for each page, each item containing the following data: &lt;br/&gt;
&lt;br/&gt;
&lt;pre class=&quot;code&quot;&gt;$data[&amp;#039;id&amp;#039;] = id of the page
$data[&amp;#039;perms&amp;#039;] = integer denoting the permissions on the page
$data[&amp;#039;size&amp;#039;] = size in bytes
$data[&amp;#039;lastModified&amp;#039;] = dateTime object of last modification date&lt;/pre&gt;
&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Description &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; Returns a list of all Wiki pages in the remote Wiki. &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table23&amp;quot;,&amp;quot;secid&amp;quot;:52,&amp;quot;range&amp;quot;:&amp;quot;11817-12243&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;wiki.getAllPages&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;wikigetallpages&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:12,&amp;quot;secid&amp;quot;:51,&amp;quot;range&amp;quot;:&amp;quot;11790-12244&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit53&quot; id=&quot;wikigetbacklinks&quot;&gt;wiki.getBackLinks&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit54&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Name        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;wiki.getBackLinks&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Parameters  &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (string) &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=pagename&quot; class=&quot;wikilink2&quot; title=&quot;pagename&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;pagename&quot;&gt;pagename&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Data        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (array) &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Description &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; Returns a list of &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=backlinks&quot; class=&quot;wikilink2&quot; title=&quot;backlinks&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;backlinks&quot;&gt;backlinks&lt;/a&gt; of a Wiki page. &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table24&amp;quot;,&amp;quot;secid&amp;quot;:54,&amp;quot;range&amp;quot;:&amp;quot;12273-12446&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;wiki.getBackLinks&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;wikigetbacklinks&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:13,&amp;quot;secid&amp;quot;:53,&amp;quot;range&amp;quot;:&amp;quot;12245-12447&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit55&quot; id=&quot;wikigetrecentchanges&quot;&gt;wiki.getRecentChanges&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit56&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Name        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;wiki.getRecentChanges&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Parameters  &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (int) timestamp &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Data        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (array) each array item holds the following data: &lt;br/&gt;
&lt;br/&gt;
&lt;pre class=&quot;code&quot;&gt;$data[&amp;#039;name&amp;#039;] = page id
$data[&amp;#039;lastModified&amp;#039;] =  modification date as UTC timestamp
$data[&amp;#039;author&amp;#039;] = author
$data[&amp;#039;version&amp;#039;] = page version as timestamp&lt;/pre&gt;
&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Description &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; Returns a list of recent changes since given timestamp.&lt;br/&gt;
As stated in &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=recent_changes&quot; class=&quot;wikilink2&quot; title=&quot;recent_changes&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;recent_changes&quot;&gt;recent_changes&lt;/a&gt;: Only the most recent change for each page is listed, regardless of how many times that page was changed. &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table25&amp;quot;,&amp;quot;secid&amp;quot;:56,&amp;quot;range&amp;quot;:&amp;quot;12480-13013&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;wiki.getRecentChanges&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;wikigetrecentchanges&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:13,&amp;quot;secid&amp;quot;:55,&amp;quot;range&amp;quot;:&amp;quot;12448-13014&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit57&quot; id=&quot;wikigetrecentmediachanges&quot;&gt;wiki.getRecentMediaChanges&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit58&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Name        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;wiki.getRecentMediaChanges&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Parameters  &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (int) timestamp &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Data        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (array) each array item holds the following data: &lt;br/&gt;
&lt;br/&gt;
&lt;pre class=&quot;code&quot;&gt;$data[&amp;#039;name&amp;#039;] = media id
$data[&amp;#039;lastModified&amp;#039;] =  modification date as UTC timestamp
$data[&amp;#039;author&amp;#039;] = author
$data[&amp;#039;version&amp;#039;] = page version as timestamp
$data[&amp;#039;perms&amp;#039;] = media permissions
$data[&amp;#039;size&amp;#039;] = media size in bytes&lt;/pre&gt;
&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Description &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; Returns a list of recent changed media since given timestamp. &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table26&amp;quot;,&amp;quot;secid&amp;quot;:58,&amp;quot;range&amp;quot;:&amp;quot;13052-13527&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;wiki.getRecentMediaChanges&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;wikigetrecentmediachanges&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:14,&amp;quot;secid&amp;quot;:57,&amp;quot;range&amp;quot;:&amp;quot;13015-13528&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit59&quot; id=&quot;wikigetattachments&quot;&gt;wiki.getAttachments&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit60&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Name        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;wiki.getAttachments&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Parameters  &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (String) namespace, (array) options &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Data        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (array) each array item holds the following data: &lt;br/&gt;
&lt;br/&gt;
&lt;pre class=&quot;code&quot;&gt;$data[&amp;#039;id&amp;#039;] = media id
$data[&amp;#039;file&amp;#039;] = name of the file
$data[&amp;#039;size&amp;#039;] = size in bytes
$data[&amp;#039;mtime&amp;#039;] = upload date as a timestamp
$data[&amp;#039;lastModified&amp;#039;] =  modification date as XML-RPC Date object
$data[&amp;#039;isimg&amp;#039;] = true if file is an image, false otherwise
$data[&amp;#039;writable&amp;#039;] = true if file is writable, false otherwise
$data[&amp;#039;perms&amp;#039;] = permissions of file&lt;/pre&gt;
&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Description &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; Returns a list of media files in a given namespace. The options are passed directly to &lt;a href=&quot;https://codesearch.dokuwiki.org/search?project=dokuwiki&amp;amp;defs=search_media&amp;amp;path=&quot; class=&quot;interwiki plugin_xref&quot; title=&quot;view definition for search_media()&quot;&gt;search_media()&lt;/a&gt;. &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table27&amp;quot;,&amp;quot;secid&amp;quot;:60,&amp;quot;range&amp;quot;:&amp;quot;13559-14225&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;wiki.getAttachments&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;wikigetattachments&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:15,&amp;quot;secid&amp;quot;:59,&amp;quot;range&amp;quot;:&amp;quot;13529-14226&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit61&quot; id=&quot;wikigetattachment&quot;&gt;wiki.getAttachment&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit62&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Name        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;wiki.getAttachment&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Parameters  &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (String) id &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Data        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (string) the data of the file, encoded in base64 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Description &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; Returns the binary data of a media file. &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table28&amp;quot;,&amp;quot;secid&amp;quot;:62,&amp;quot;range&amp;quot;:&amp;quot;14256-14452&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;wiki.getAttachment&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;wikigetattachment&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:16,&amp;quot;secid&amp;quot;:61,&amp;quot;range&amp;quot;:&amp;quot;14227-14453&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit63&quot; id=&quot;wikigetattachmentinfo&quot;&gt;wiki.getAttachmentInfo&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit64&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Name        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;wiki.getAttachmentInfo&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Parameters  &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (String) id &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Data        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (array) an array containing the following information about the file: &lt;br/&gt;
&lt;br/&gt;
&lt;pre class=&quot;code&quot;&gt;$data[&amp;#039;size&amp;#039;] = size in bytes
$data[&amp;#039;lastModified&amp;#039;] = modification date as XML-RPC Date object&lt;/pre&gt;
&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Description &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; Returns information about a media file. &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table29&amp;quot;,&amp;quot;secid&amp;quot;:64,&amp;quot;range&amp;quot;:&amp;quot;14487-14821&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;wiki.getAttachmentInfo&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;wikigetattachmentinfo&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:16,&amp;quot;secid&amp;quot;:63,&amp;quot;range&amp;quot;:&amp;quot;14454-14822&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit65&quot; id=&quot;wikiputattachment&quot;&gt;wiki.putAttachment&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit66&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Name        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;wiki.putAttachment&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Parameters  &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (String) id, (base64) data, (array) params&lt;br/&gt;
Available parameters are: &lt;pre class=&quot;code&quot;&gt;$params[&amp;#039;ow&amp;#039;] = true if file is to overwrite an already
existing media object of the given id.&lt;/pre&gt;
&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Data        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Description &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; Uploads a file as a given media id. &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table30&amp;quot;,&amp;quot;secid&amp;quot;:66,&amp;quot;range&amp;quot;:&amp;quot;14852-15161&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;wiki.putAttachment&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;wikiputattachment&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:17,&amp;quot;secid&amp;quot;:65,&amp;quot;range&amp;quot;:&amp;quot;14823-15162&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit67&quot; id=&quot;wikideleteattachment&quot;&gt;wiki.deleteAttachment&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit68&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Name        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;wiki.deleteAttachment&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Parameters  &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (String) id &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Data        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Description &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; Deletes a file. Fails if the file is still referenced from any page in the wiki. &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table31&amp;quot;,&amp;quot;secid&amp;quot;:68,&amp;quot;range&amp;quot;:&amp;quot;15195-15385&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;wiki.deleteAttachment&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;wikideleteattachment&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:18,&amp;quot;secid&amp;quot;:67,&amp;quot;range&amp;quot;:&amp;quot;15163-15386&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit69&quot; id=&quot;pluginacllistacls&quot;&gt;plugin.acl.listAcls&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit70&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Name        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;plugin.acl.listAcls&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Parameters  &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; - &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Data        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (array) of ACLs {scope, user, permission}&amp;#039;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Description &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; Get the list of all ACLs. &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table32&amp;quot;,&amp;quot;secid&amp;quot;:70,&amp;quot;range&amp;quot;:&amp;quot;15417-15582&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;plugin.acl.listAcls&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;pluginacllistacls&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:18,&amp;quot;secid&amp;quot;:69,&amp;quot;range&amp;quot;:&amp;quot;15387-15583&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit71&quot; id=&quot;pluginacladdacl&quot;&gt;plugin.acl.addAcl&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit72&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Name        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;plugin.acl.addAcl&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Parameters  &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (String) scope, (String) username, (int) permission &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Data        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (boolean) return true if the rule was correctly added&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Description &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; Add an &lt;abbr title=&quot;Access Control List&quot;&gt;ACL&lt;/abbr&gt; rule. Use &lt;code&gt;@groupname&lt;/code&gt; instead of &lt;code&gt;user&lt;/code&gt; to add an &lt;abbr title=&quot;Access Control List&quot;&gt;ACL&lt;/abbr&gt; rule for a group. &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table33&amp;quot;,&amp;quot;secid&amp;quot;:72,&amp;quot;range&amp;quot;:&amp;quot;15612-15898&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;plugin.acl.addAcl&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;pluginacladdacl&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:18,&amp;quot;secid&amp;quot;:71,&amp;quot;range&amp;quot;:&amp;quot;15584-15899&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit73&quot; id=&quot;pluginacldelacl&quot;&gt;plugin.acl.delAcl&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit74&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Name        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; &lt;code&gt;plugin.acl.delAcl&lt;/code&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Parameters  &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (String) scope, (String) username &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Data        &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; (boolean) return true if the rules were correctly deleted&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Description &lt;/th&gt;&lt;td class=&quot;col1&quot;&gt; Delete any &lt;abbr title=&quot;Access Control List&quot;&gt;ACL&lt;/abbr&gt; rule matching the given scope and user. Use &lt;code&gt;@groupname&lt;/code&gt; instead of &lt;code&gt;user&lt;/code&gt; to delete the &lt;abbr title=&quot;Access Control List&quot;&gt;ACL&lt;/abbr&gt; rules for the group. &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table34&amp;quot;,&amp;quot;secid&amp;quot;:74,&amp;quot;range&amp;quot;:&amp;quot;15928-16245&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;plugin.acl.delAcl&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;pluginacldelacl&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:18,&amp;quot;secid&amp;quot;:73,&amp;quot;range&amp;quot;:&amp;quot;15900-16247&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit75&quot; id=&quot;adding_methods_to_the_xml-rpc_api&quot;&gt;Adding methods to the XML-RPC API&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Use &lt;a href=&quot;#extension__table&quot; class=&quot;interwiki iw_&quot; title=&quot;#extension__table&quot;&gt;Remote Plugins&lt;/a&gt; to add other methods to the XML-RPC &lt;abbr title=&quot;Application Programming Interface&quot;&gt;API&lt;/abbr&gt;. 
&lt;/p&gt;

&lt;p&gt;
A summary of recent plugins which indicate Remote support:
&lt;/p&gt;
&lt;div class=&quot;pluginrepo_query&quot;&gt;&lt;div class=&quot;table&quot;&gt;&lt;table class=&quot;inline&quot;&gt;&lt;tr&gt;&lt;th&gt;Name&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th colspan=&quot;2&quot;&gt;Remote plugins compatible with last two releases&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;JSON Data Plugin&lt;/td&gt;&lt;td&gt;Build JSON database inside DokuWiki page and use the data in the page&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:plugin:json&quot; class=&quot;wikilink1&quot; title=&quot;wiki:plugin:json&quot; data-wiki-id=&quot;wiki:plugin:json&quot;&gt;json&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;struct Plugin&lt;/td&gt;&lt;td&gt;A new structured data plugin&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:plugin:struct&quot; class=&quot;wikilink1&quot; title=&quot;wiki:plugin:struct&quot; data-wiki-id=&quot;wiki:plugin:struct&quot;&gt;struct&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;p class=&quot;querytotal&quot;&gt;∑ 2 plugins matching query&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;
To implement such a plugin please have a look at the &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=wiki:devel:remote_plugins&quot; class=&quot;wikilink2&quot; title=&quot;wiki:devel:remote_plugins&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;wiki:devel:remote_plugins&quot;&gt;remote plugins development documentation&lt;/a&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Adding methods to the XML-RPC API&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;adding_methods_to_the_xml-rpc_api&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:18,&amp;quot;secid&amp;quot;:75,&amp;quot;range&amp;quot;:&amp;quot;16248-16849&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit76&quot; id=&quot;xml-rpc_error_codes&quot;&gt;XML-RPC Error Codes&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Since XML-RPC &lt;abbr title=&quot;Application Programming Interface&quot;&gt;API&lt;/abbr&gt; Version 7 (&lt;abbr title=&quot;Application Programming Interface&quot;&gt;API&lt;/abbr&gt; Version 7 is since Release Adora Belle (2012-10-13)) useful hierarchical error codes have been introduced. The following error codes can be returned by the XML-RPC Interface:
&lt;/p&gt;

&lt;p&gt;
&lt;em&gt;Italic rows are just categories. Only normal printed rows are returned by the interface.&lt;/em&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;em&gt;100 → Page errors&lt;/em&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;em&gt;110 → Page access errors&lt;/em&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; 111 → User is not allowed to read the requested page&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; 112 → User is not allowed to edit the page&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; 113 → manager permission is required&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; 114 → superuser permission is required&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level2 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;em&gt;120 → Page existence errors&lt;/em&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; 121 → The requested page does not exist&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level2 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;em&gt;130 → Page edit errors&lt;/em&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; 131 → Empty page id&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; 132 → Empty page content&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; 133 → Page is locked&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; 134 → Positive wordblock check&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;em&gt;200 → Media errors&lt;/em&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;em&gt;210 → Media access errors&lt;/em&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; 211 → User is not allowed to read the requested media&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; 212 → User is not allowed to delete media&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; 215 → User is not allowed to list media&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level2 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;em&gt;220 → Media existence errors&lt;/em&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; 221 → The requested media does not exist&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level2 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;em&gt;230 → Media edit errors&lt;/em&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; 231 → Filename not given&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; 232 → File is still referenced&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; 233 → Could not delete file&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;em&gt;300 → Search errors&lt;/em&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;em&gt;310 → Argument errors&lt;/em&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; 311 → The provided value is not a valid timestamp&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level2 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;em&gt;320 → Search result errors&lt;/em&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; 321 → No changes in specified timeframe&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;em&gt;400 → User management errors&lt;/em&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; 401 invalid user name given&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; 402 invalid user name given&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; 403 invalid email address given&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Additionally there are some server error codes that indicate some kind of server or XML-RPC failure. The codes are the following:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; -32600 → Invalid XML-RPC request. Not conforming to specification.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; -32601 → Requested method does not exist.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; -32602 → Wrong number of parameters or invalid method parameters.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; -32603 → Not authorized to call the requested method (No login or invalid login data was given).&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; -32604 → Forbidden to call the requested method (but a valid login was given).&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; -32605 → The XML-RPC &lt;abbr title=&quot;Application Programming Interface&quot;&gt;API&lt;/abbr&gt; has not been enabled in the configuration&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; -32700 → Parse Error. Request not well formed.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; -32800 → Recursive calls to system.multicall are forbidden.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; -99999 → Unknown server error.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;XML-RPC Error Codes&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;xml-rpc_error_codes&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:18,&amp;quot;secid&amp;quot;:76,&amp;quot;range&amp;quot;:&amp;quot;16850-19260&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit77&quot; id=&quot;sample_clients&quot;&gt;Sample Clients&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
A number of &lt;a href=&quot;https://wwoss.direct.quickconnect.to/doku.php?id=devel:xmlrpc:clients&quot; class=&quot;wikilink2&quot; title=&quot;devel:xmlrpc:clients&quot; rel=&quot;nofollow&quot; data-wiki-id=&quot;devel:xmlrpc:clients&quot;&gt;clients written in different languages&lt;/a&gt; are available.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Sample Clients&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;sample_clients&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:18,&amp;quot;secid&amp;quot;:77,&amp;quot;range&amp;quot;:&amp;quot;19261-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Wed, 15 Jan 2025 07:29:00 +0000</pubDate>
        </item>
    </channel>
</rss>
