Извините что к вам обращаемся…

Господа Похаперы (PHP)… Сами мы не местные, мойве вашей не обучены… Скажите что в этом супе неправильно сварено, почему так не работает, что даже движок не вешает? По образцам делано, на готовом шаблоне мешано.

образец

<?php
/**
 * DokuWiki Plugin nobrake (Syntax Component)
 *
 * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
 * @author  Vladimir <creator4ever@gmail.com>
 */
 
// must be run within Dokuwiki
if (!defined('DOKU_INC')) die();
 
class syntax_plugin_nobrake_nobrtypo extends DokuWiki_Syntax_Plugin {
    /**
     * @return string Syntax mode type
     */
    public function getType() {
        return 'substition';
    }
    /**
     * @return string Paragraph type
     */
    public function getPType() {
        return 'normal';
    }
    /**
     * @return int Sort order - Low numbers go before high numbers
     */
    public function getSort() {
        return 250;
    }
 
    /**
     * Connect lookup pattern to lexer.
     *
     * @param string $mode Parser mode
     */
    public function connectTo($mode) {
// число-число
        $this->Lexer->addSpecialPattern('/(\d)-(\d)/',$mode,'plugin_nobrake_nobrtypo');
// слова с дефисом
        $this->Lexer->addSpecialPattern('/(\S+)-(\S+)/',$mode,'plugin_nobrake_nobrtypo');
// частицы и предлоги
        $this->Lexer->addSpecialPattern('/([А-Яа-яA-Za-z]) (?:ли|ль|же|ж|бы|б)([^А-Яа-яA-Za-z])/',$mode,'plugin_nobrake_nobrtypo');
        $this->Lexer->addSpecialPattern('/(\s)([А-Яа-я]{1})\s/',$mode,'plugin_nobrake_nobrtypo');
// A.C. Пушкин
        $this->Lexer->addSpecialPattern('/([А-ЯA-Z])([\. ]{1})[ ]{0,1}([А-ЯA-Z])([\. ]{1})[ ]{0,1}([А-ЯA-Z][А-Яа-яA-Za-z]*)/',$mode,'plugin_nobrake_nobrtypo');
// Пушкин A.C.
        $this->Lexer->addSpecialPattern('/([А-ЯA-Z][А-Яа-яA-Za-z]*) ([А-ЯA-Z])[\. ]{1}[ ]{0,1}([А-ЯA-Z])\.([,\ )]{1})/',$mode,'plugin_nobrake_nobrtypo');
 
//        $this->Lexer->addEntryPattern('<FIXME>',$mode,'plugin_nobrake_nobrtypo');
    }
 
//    public function postConnect() {
//        $this->Lexer->addExitPattern('</FIXME>','plugin_nobrake_nobrtypo');
//    }
 
    /**
     * Handle matches of the nobrake syntax
     *
     * @param string $match The match of the syntax
     * @param int    $state The state of the handler
     * @param int    $pos The position in the document
     * @param Doku_Handler    $handler The handler
     * @return array Data for the renderer
     */
    public function handle($match, $state, $pos, Doku_Handler &$handler){
        if ($state==DOKU_LEXER_SPECIAL){
            switch ($match) {
              case '/(\d)-(\d)/':
                return '\\1&#150;\\2';
              case '/(\S+)-(\S+)/':
                return '<nobr>\\1-\\2</nobr>';
              case '/([А-Яа-яA-Za-z]) (?:ли|ль|же|ж|бы|б)([^А-Яа-яA-Za-z])/':
                return '\\1&nbsp;\\2\\3';
              case '/(\s)([А-Яа-я]{1})\s/':
                return '\\1\\2&nbsp;';
              case '/([А-ЯA-Z])([\. ]{1})[ ]{0,1}([А-ЯA-Z])([\. ]{1})[ ]{0,1}([А-ЯA-Z][А-Яа-яA-Za-z]*)/':
                return '\\1.&nbsp;\\3.&nbsp;\\5';
              case '/([А-ЯA-Z][А-Яа-яA-Za-z]*) ([А-ЯA-Z])[\. ]{1}[ ]{0,1}([А-ЯA-Z])\.([,\ )]{1})/':
                return '\\1&nbsp;\\2.&nbsp;\\3.\\4';
            }
        }
        return $match;
    }
    /**
     * Render xhtml output or metadata
     *
     * @param string         $mode      Renderer mode (supported modes: xhtml)
     * @param Doku_Renderer  $renderer  The renderer
     * @param array          $data      The data from the handler() function
     * @return bool If rendering was successful.
     */
    public function render($mode, Doku_Renderer &$renderer, $data) {
        if($mode == 'xhtml'){
            $renderer->doc .= $data;
            return true;
        }
        return false;
    }
}
 
// vim:ts=4:sw=4:et:

Овощ в помощь: Про парсер, и про лепку плагинов

Только авторизованные участники могут оставлять комментарии.