summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--inc/parser/handler.php33
-rw-r--r--lib/plugins/syntax.php18
2 files changed, 48 insertions, 3 deletions
diff --git a/inc/parser/handler.php b/inc/parser/handler.php
index d2d201282..6b0d99cf4 100644
--- a/inc/parser/handler.php
+++ b/inc/parser/handler.php
@@ -1195,7 +1195,7 @@ class Doku_Handler_Block {
var $atStart = TRUE;
var $skipEolKey = -1;
- // Blocks don't contain linefeeds
+ // Blocks these should not be inside paragraphs
var $blockOpen = array(
'header',
'listu_open','listo_open','listitem_open',
@@ -1214,7 +1214,7 @@ class Doku_Handler_Block {
'code','file','php','html','hr','preformatted',
);
- // Stacks can contain linefeeds
+ // Stacks can contain paragraphs
var $stackOpen = array(
'footnote_open','section_open',
);
@@ -1222,7 +1222,34 @@ class Doku_Handler_Block {
var $stackClose = array(
'footnote_close','section_close',
);
-
+
+
+ /**
+ * Constructor. Adds loaded syntax plugins to the block and stack
+ * arrays
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function Doku_Handler_Block(){
+ global $DOKU_PLUGINS;
+ //check if syntax plugins were loaded
+ if(!is_array($DOKU_PLUGINS['syntax'])) return;
+ foreach($DOKU_PLUGINS['syntax'] as $n => $p){
+ $ptype = $p->getPType();
+ if($ptype == 'block'){
+ $this->blockOpen[] = 'plugin_'.$n;
+ $this->blockOpen[] = 'plugin_'.$n.'_open';
+ $this->blockClose[] = 'plugin_'.$n;
+ $this->blockClose[] = 'plugin_'.$n.'_close';
+ }elseif($ptype == 'stack'){
+ $this->stackOpen[] = 'plugin_'.$n;
+ $this->stackOpen[] = 'plugin_'.$n.'_open';
+ $this->stackClose[] = 'plugin_'.$n;
+ $this->stackClose[] = 'plugin_'.$n.'_close';
+ }
+ }
+ }
+
/**
* Close a paragraph if needed
*
diff --git a/lib/plugins/syntax.php b/lib/plugins/syntax.php
index 303c0de33..2a67a5ca5 100644
--- a/lib/plugins/syntax.php
+++ b/lib/plugins/syntax.php
@@ -17,6 +17,8 @@ require_once(DOKU_INC.'inc/parser/parser.php');
class DokuWiki_Syntax_Plugin extends Doku_Parser_Mode {
/**
+ * Syntax Type
+ *
* Needs to return one of the mode types defined in $PARSER_MODES in parser.php
*/
function getType(){
@@ -24,6 +26,22 @@ class DokuWiki_Syntax_Plugin extends Doku_Parser_Mode {
}
/**
+ * Paragraph Type
+ *
+ * Defines how this syntax is handled regarding paragraphs. This is important
+ * 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.
+ *
+ * @see Doku_Handler_Block
+ */
+ function getPType(){
+ return 'normal';
+ }
+
+ /**
* Handler to prepare matched data for the rendering process
*
* Usually you should only need the $match param.