====== Скелет синтаксического плагина ====== — будет заменен на «Hello World!» * * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) * @автор Кристофер Смит */ /** * Все плагины DokuWiki для расширения механизма парсера/рендеринга * необходимо унаследовать от этого класса */ class syntax_plugin_test extends DokuWiki_Syntax_Plugin { /** * Получите тип синтаксиса, который определяет этот плагин. * * @параметр нет * @return String 'substition' (т. е. 'подстановка'). * @общественность * @статичный */ function getType(){ return 'substition'; } /** * Какой синтаксис мы допускаем (необязательно) */ // function getAllowedTypes() { // return array(); // } /** * Определите, как этот плагин обрабатывается в отношении абзацев. * * <р> * Этот метод важен для правильного вложения XHTML. Он возвращает * одно из следующих значений: * * <дл> *
normal
Плагин можно использовать внутри абзацев.
*
блок
Открытые абзацы необходимо закрыть перед * вывод плагина.
*
стек
Особый случай: плагин оборачивает другие абзацы.
* * @параметр нет * @return String 'блок'. * @общественность * @статичный */ // function getPType(){ // return 'normal'; // } /** * Где сортировать? * * @param none * @return Integer 6. * @public * @static */ function getSort(){ return 999; } /** * Подключить шаблон поиска к лексеру. * * @param $aMode String Требуемый режим визуализации. * @return none * @public * @see render() */ function connectTo($mode) { $this->Lexer->addSpecialPattern('',$mode,'plugin_test'); // $this->Lexer->addEntryPattern('',$mode,'plugin_test'); } // function postConnect() { // $this->Lexer->addExitPattern('','plugin_test'); // } /** * Обработчик для подготовки сопоставленных данных для процесса рендеринга. * *

* Параметр $aState задает тип шаблона , * который вызвал вызов этого метода: *

*
*
DOKU_LEXER_ENTER
*
шаблон , установленный функцией addEntryPattern()
*
DOKU_LEXER_MATCHED
*
шаблон, установленный функцией addPattern()
*
DOKU_LEXER_EXIT
*
шаблон, установленный функцией addExitPattern()
*
DOKU_LEXER_SPECIAL
*
шаблон, установленный функцией addSpecialPattern()
*
DOKU_LEXER_UNMATCHED
*
обычный текст, встречающийся в режим синтаксиса плагина , * который не соответствует ни одному шаблону.
*
* @param $aMatch String Текст, соответствующий шаблонам. * @param $aState Integer Состояние лексера для сопоставления. * @param $aPos Integer Позиция символа сопоставленного текста. * @param $aHandler Object Ссылка на объект Doku_Handler. * @return Integer Текущее состояние лексера для сопоставления. * @public * @see render() * @static */ function handle($match, $state, $pos, Doku_Handler $handler){ switch ($state) { case DOKU_LEXER_ENTER : break; case DOKU_LEXER_MATCHED : break; case DOKU_LEXER_UNMATCHED : break; case DOKU_LEXER_EXIT : break; case DOKU_LEXER_SPECIAL : break; } return array(); } /** * Обработка фактического создания выходных данных. * *

* Метод проверяет заданный $aFormat и возвращает * FALSE, если формат не поддерживается. $aRenderer * содержит ссылку на объект рендерера, который в данный момент * обрабатывает рендеринг. Содержимое $aData является * возвращаемым значением метода handle(). *

* @param $aFormat String Формат выходных данных для генерации. * @param $aRenderer Object Ссылка на объект рендерера. * @param $aData Array Данные, созданные методом handle() *. * @return Boolean TRUE при успешном рендеринге или * FALSE в противном случае. * @public * @see handle() */ function render($mode, Doku_Renderer $renderer, $data) { if($mode == 'xhtml'){ $renderer->doc .= "Hello World!"; // ptype = 'normal' // $renderer->doc .= "

Hello World!

"; // ptype = 'block' return true; } return false; } }
===== Примечание: ===== Имя этого плагина — ''test''. Это видно по имени класса: ''syntax_plugin_test'' — все, что следует далее, ''syntax_plugin_'' воспринимается как имя плагина. Поскольку имя плагина — ''test'', его нужно сохранить в ''lib/plugins/test'' чтобы DokuWiki автоматически распознал его. Его нужно сохранить как syntax.php ===== Дополнения и Файлы===== см. также * [[wiki:devel:plugin_programming_tips]] * [[https://www.dokuwiki.org/devel:syntax_plugin_skeleton|Ссылки на источник статьи]] * [[wiki:devel:plugin_development_icon]]