*/
// 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('',$mode,'plugin_nobrake_nobrtypo');
}
// public function postConnect() {
// $this->Lexer->addExitPattern('','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\\2';
case '/(\S+)-(\S+)/':
return '\\1-\\2';
case '/([А-Яа-яA-Za-z]) (?:ли|ль|же|ж|бы|б)([^А-Яа-яA-Za-z])/':
return '\\1 \\2\\3';
case '/(\s)([А-Яа-я]{1})\s/':
return '\\1\\2 ';
case '/([А-ЯA-Z])([\. ]{1})[ ]{0,1}([А-ЯA-Z])([\. ]{1})[ ]{0,1}([А-ЯA-Z][А-Яа-яA-Za-z]*)/':
return '\\1. \\3. \\5';
case '/([А-ЯA-Z][А-Яа-яA-Za-z]*) ([А-ЯA-Z])[\. ]{1}[ ]{0,1}([А-ЯA-Z])\.([,\ )]{1})/':
return '\\1 \\2. \\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: