From 5a41afe6e3b958291893a0a10105cd41971fb141 Mon Sep 17 00:00:00 2001 From: Christopher Smith Date: Sun, 1 Dec 2013 17:57:03 +0000 Subject: FS#1833 (b) Prevent table entry syntax swallowing multiple preceeding blank lines (a) this shouldn't be necessary, blank lines are handled by paragraph processing (b) avoids issues with greedy table syntax competing with plugins --- inc/parser/parser.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'inc/parser/parser.php') diff --git a/inc/parser/parser.php b/inc/parser/parser.php index e39a4daf5..1f14b98a3 100644 --- a/inc/parser/parser.php +++ b/inc/parser/parser.php @@ -454,8 +454,8 @@ class Doku_Parser_Mode_table extends Doku_Parser_Mode { } function connectTo($mode) { - $this->Lexer->addEntryPattern('\s*\n\^',$mode,'table'); - $this->Lexer->addEntryPattern('\s*\n\|',$mode,'table'); + $this->Lexer->addEntryPattern('[\t ]*\n\^',$mode,'table'); + $this->Lexer->addEntryPattern('[\t ]*\n\|',$mode,'table'); } function postConnect() { -- cgit v1.2.3 From 72d89f96f31af5c92f96fa16f0d1adf15c0bf4e8 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Tue, 7 Jan 2014 19:16:54 +0100 Subject: remove duplicate plugin code for syntax plugins This makes Doku_Parser_Mode inherit from DokuWiki_Plugin which allows for the removal of a bunch of duplicate code form DokuWiki_Syntax_Plugin. This makes the code easier to maintain and makes sure all DokuWiki plugins are actual instances of DokuWiki_Plugin. However this adds a bunch of functions to the "normal" parser modes that don't need them which could have performance/RAM implications. --- inc/parser/parser.php | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) (limited to 'inc/parser/parser.php') diff --git a/inc/parser/parser.php b/inc/parser/parser.php index 1f14b98a3..43a1c22fa 100644 --- a/inc/parser/parser.php +++ b/inc/parser/parser.php @@ -126,16 +126,14 @@ class Doku_Parser { //------------------------------------------------------------------- /** - * This class and all the subclasses below are - * used to reduce the effort required to register - * modes with the Lexer. For performance these - * could all be eliminated later perhaps, or - * the Parser could be serialized to a file once - * all modes are registered + * This class and all the subclasses below are used to reduce the effort required to register + * modes with the Lexer. + * + * Inherits from DokuWiki_Plugin for giving additional functions to syntax plugins * * @author Harry Fuecks */ -class Doku_Parser_Mode { +class Doku_Parser_Mode extends DokuWiki_Plugin { /** * @var Doku_Lexer $Lexer -- cgit v1.2.3 From 5a3e1f53b18728d500b3505f4fbd8c78848120e0 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Tue, 7 Jan 2014 19:35:57 +0100 Subject: reintroduce a tiny bit of duplication This reads some duplication in the from of haveing a Doku_Parser_Mode and Doku_Parser_Mode_Plugin class which are basically the same but only the latter extends DokuWiki_Plugin. This avoids the performance/RAM problems mentioned in my previous commit. An interface keeps both logically together. With PHP 5.4 further deduplication could be done via Traits. --- inc/parser/parser.php | 74 ++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 62 insertions(+), 12 deletions(-) (limited to 'inc/parser/parser.php') diff --git a/inc/parser/parser.php b/inc/parser/parser.php index 43a1c22fa..252bd9170 100644 --- a/inc/parser/parser.php +++ b/inc/parser/parser.php @@ -125,41 +125,91 @@ class Doku_Parser { } //------------------------------------------------------------------- + +/** + * Class Doku_Parser_Mode_Interface + * + * Defines a mode (syntax component) in the Parser + */ +interface Doku_Parser_Mode_Interface { + /** + * returns a number used to determine in which order modes are added + */ + public function getSort(); + + /** + * Called before any calls to connectTo + */ + function preConnect(); + + /** + * Connects the mode + * + * @param string $mode + */ + function connectTo($mode); + + /** + * Called after all calls to connectTo + */ + function postConnect(); + + /** + * Check if given mode is accepted inside this mode + * + * @param string $mode + * @return bool + */ + function accepts($mode); +} + /** * This class and all the subclasses below are used to reduce the effort required to register * modes with the Lexer. * - * Inherits from DokuWiki_Plugin for giving additional functions to syntax plugins - * * @author Harry Fuecks */ -class Doku_Parser_Mode extends DokuWiki_Plugin { - +class Doku_Parser_Mode implements Doku_Parser_Mode_Interface { /** * @var Doku_Lexer $Lexer */ var $Lexer; - var $allowedModes = array(); - // returns a number used to determine in which order modes are added function getSort() { trigger_error('getSort() not implemented in '.get_class($this), E_USER_WARNING); } - // Called before any calls to connectTo function preConnect() {} - - // Connects the mode function connectTo($mode) {} - - // Called after all calls to connectTo function postConnect() {} - function accepts($mode) { return in_array($mode, (array) $this->allowedModes ); } +} +/** + * Basically the same as Doku_Parser_Mode but extends from DokuWiki_Plugin + * + * Adds additional functions to syntax plugins + */ +class Doku_Parser_Mode_Plugin extends DokuWiki_Plugin implements Doku_Parser_Mode_Interface { + /** + * @var Doku_Lexer $Lexer + */ + var $Lexer; + var $allowedModes = array(); + + function getSort() { + trigger_error('getSort() not implemented in '.get_class($this), E_USER_WARNING); + } + + function preConnect() {} + function connectTo($mode) {} + function postConnect() {} + function accepts($mode) { + return in_array($mode, (array) $this->allowedModes ); + } } //------------------------------------------------------------------- -- cgit v1.2.3