diff options
author | Gerrit Uitslag <klapinklapin@gmail.com> | 2014-12-03 00:10:07 +0100 |
---|---|---|
committer | Gerrit Uitslag <klapinklapin@gmail.com> | 2014-12-03 00:10:07 +0100 |
commit | 4766c1f0aaafeb23d5026904b802078cf82ebbe1 (patch) | |
tree | 01c45a10dddd42c02804ff71c7d236c8fa775e7e /inc/parser | |
parent | cded11250d495f6039a20f1036c64ea7b230ceb2 (diff) | |
parent | b30dd803e3c33cfc9508b0516744b0bb95be4d09 (diff) | |
download | rpg-4766c1f0aaafeb23d5026904b802078cf82ebbe1.tar.gz rpg-4766c1f0aaafeb23d5026904b802078cf82ebbe1.tar.bz2 |
Merge remote-tracking branch 'origin/master'
Diffstat (limited to 'inc/parser')
-rw-r--r-- | inc/parser/handler.php | 22 | ||||
-rw-r--r-- | inc/parser/metadata.php | 3 | ||||
-rw-r--r-- | inc/parser/renderer.php | 3 | ||||
-rw-r--r-- | inc/parser/xhtml.php | 6 |
4 files changed, 26 insertions, 8 deletions
diff --git a/inc/parser/handler.php b/inc/parser/handler.php index 8efaa2cc1..62a1c241e 100644 --- a/inc/parser/handler.php +++ b/inc/parser/handler.php @@ -806,6 +806,8 @@ class Doku_Handler_List { var $listCalls = array(); var $listStack = array(); + const NODE = 1; + function Doku_Handler_List(& $CallWriter) { $this->CallWriter = & $CallWriter; } @@ -857,7 +859,8 @@ class Doku_Handler_List { $depth = $this->interpretSyntax($call[1][0], $listType); $this->initialDepth = $depth; - $this->listStack[] = array($listType, $depth); + // array(list type, current depth, index of current listitem_open) + $this->listStack[] = array($listType, $depth, 1); $this->listCalls[] = array('list'.$listType.'_open',array(),$call[2]); $this->listCalls[] = array('listitem_open',array(1),$call[2]); @@ -882,6 +885,7 @@ class Doku_Handler_List { function listOpen($call) { $depth = $this->interpretSyntax($call[1][0], $listType); $end = end($this->listStack); + $key = key($this->listStack); // Not allowed to be shallower than initialDepth if ( $depth < $this->initialDepth ) { @@ -898,6 +902,9 @@ class Doku_Handler_List { $this->listCalls[] = array('listitem_open',array($depth-1),$call[2]); $this->listCalls[] = array('listcontent_open',array(),$call[2]); + // new list item, update list stack's index into current listitem_open + $this->listStack[$key][2] = count($this->listCalls) - 2; + // Switched list type... } else { @@ -909,7 +916,7 @@ class Doku_Handler_List { $this->listCalls[] = array('listcontent_open',array(),$call[2]); array_pop($this->listStack); - $this->listStack[] = array($listType, $depth); + $this->listStack[] = array($listType, $depth, count($this->listCalls) - 2); } //------------------------------------------------------------------------ @@ -921,7 +928,10 @@ class Doku_Handler_List { $this->listCalls[] = array('listitem_open', array($depth-1), $call[2]); $this->listCalls[] = array('listcontent_open',array(),$call[2]); - $this->listStack[] = array($listType, $depth); + // set the node/leaf state of this item's parent listitem_open to NODE + $this->listCalls[$this->listStack[$key][2]][1][1] = self::NODE; + + $this->listStack[] = array($listType, $depth, count($this->listCalls) - 2); //------------------------------------------------------------------------ // Getting shallower ( $depth < $end[1] ) @@ -935,6 +945,7 @@ class Doku_Handler_List { while (1) { $end = end($this->listStack); + $key = key($this->listStack); if ( $end[1] <= $depth ) { @@ -947,6 +958,9 @@ class Doku_Handler_List { $this->listCalls[] = array('listitem_open',array($depth-1),$call[2]); $this->listCalls[] = array('listcontent_open',array(),$call[2]); + // new list item, update list stack's index into current listitem_open + $this->listStack[$key][2] = count($this->listCalls) - 2; + } else { // Switching list type... $this->listCalls[] = array('list'.$end[0].'_close', array(), $call[2]); @@ -955,7 +969,7 @@ class Doku_Handler_List { $this->listCalls[] = array('listcontent_open',array(),$call[2]); array_pop($this->listStack); - $this->listStack[] = array($listType, $depth); + $this->listStack[] = array($listType, $depth, count($this->listCalls) - 2); } break; diff --git a/inc/parser/metadata.php b/inc/parser/metadata.php index 25bf3fe3d..313b70df5 100644 --- a/inc/parser/metadata.php +++ b/inc/parser/metadata.php @@ -251,8 +251,9 @@ class Doku_Renderer_metadata extends Doku_Renderer { * Open a list item * * @param int $level the nesting level + * @param bool $node true when a node; false when a leaf */ - function listitem_open($level) { + function listitem_open($level,$node=false) { $this->cdata(str_repeat(DOKU_TAB, $level).'* '); } diff --git a/inc/parser/renderer.php b/inc/parser/renderer.php index 09294539e..668b617d1 100644 --- a/inc/parser/renderer.php +++ b/inc/parser/renderer.php @@ -343,8 +343,9 @@ class Doku_Renderer extends DokuWiki_Plugin { * Open a list item * * @param int $level the nesting level + * @param bool $node true when a node; false when a leaf */ - function listitem_open($level) { + function listitem_open($level,$node=false) { } /** diff --git a/inc/parser/xhtml.php b/inc/parser/xhtml.php index 3a2e49155..b73e3a881 100644 --- a/inc/parser/xhtml.php +++ b/inc/parser/xhtml.php @@ -456,9 +456,11 @@ class Doku_Renderer_xhtml extends Doku_Renderer { * Open a list item * * @param int $level the nesting level + * @param bool $node true when a node; false when a leaf */ - function listitem_open($level) { - $this->doc .= '<li class="level'.$level.'">'; + function listitem_open($level, $node=false) { + $branching = $node ? ' node' : ''; + $this->doc .= '<li class="level'.$level.$branching.'">'; } /** |