From a6d2d9fa1831e896d45fef6db1d4846a043a8387 Mon Sep 17 00:00:00 2001 From: chris <chris@teacherscpd.co.uk> Date: Thu, 28 Jul 2005 02:57:20 +0200 Subject: [PATCH] syntax plugin class update: add getAllowedTypes() method (compatible with plugins written prior to the patch, although they should be updated!) darcs-hash:20050728005720-50fdc-e384bbca7c4f334659e19bedfd675621b7989c80.gz --- lib/plugins/syntax.php | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/lib/plugins/syntax.php b/lib/plugins/syntax.php index bf03fdf2c..59b02d7dc 100644 --- a/lib/plugins/syntax.php +++ b/lib/plugins/syntax.php @@ -16,6 +16,8 @@ require_once(DOKU_INC.'inc/parser/parser.php'); */ class DokuWiki_Syntax_Plugin extends Doku_Parser_Mode { + var $allowedModesSetup = false; + /** * General Info * @@ -40,6 +42,17 @@ class DokuWiki_Syntax_Plugin extends Doku_Parser_Mode { function getType(){ trigger_error('getType() not implemented in '.get_class($this), E_USER_WARNING); } + + /** + * Allowed Mode Types + * + * Defines the mode types for other dokuwiki markup that maybe nested within the + * plugin's own markup. Needs to return an array of one or more of the mode types + * defined in $PARSER_MODES in parser.php + */ + function getAllowedTypes() { + return array(); + } /** * Paragraph Type @@ -48,6 +61,7 @@ class DokuWiki_Syntax_Plugin extends Doku_Parser_Mode { * for correct XHTML nesting. Should return one of the following: * * 'normal' - The plugin can be used inside paragraphs + * 'block' - Open paragraphs need to be closed before plugin output * 'stack' - Special case. Plugin wraps other paragraphs. * @@ -59,6 +73,7 @@ class DokuWiki_Syntax_Plugin extends Doku_Parser_Mode { /** * Handler to prepare matched data for the rendering process + * This function is called statically - it may not reference any object properties * * Usually you should only need the $match param. * @@ -74,6 +89,7 @@ class DokuWiki_Syntax_Plugin extends Doku_Parser_Mode { /** * Handles the actual output creation. + * This function is called statically - it may not reference any object properties * * The function should always check for the given mode and return false * when a mode isn't supported. @@ -94,6 +110,26 @@ class DokuWiki_Syntax_Plugin extends Doku_Parser_Mode { function render($mode, &$renderer, $data) { trigger_error('render() not implemented in '.get_class($this), E_USER_WARNING); } + + /** + * There should be no need to override this function + */ + function accepts($mode) { + + if (!$allowedModesSetup) { + global $PARSER_MODES; + + $allowedModeTypes = $this->getAllowedTypes(); + foreach($allowedModeTypes as $mt) { + array_merge($this->allowedModes, $PARSER_MODES[$mt]); + } + + unset($this->allowedModes[array_search(substr(get_class($this), 7), $this->allowedModes)]); + $allowedModesSetup = true; + } + + return parent::accepts($mode); + } } -- GitLab