diff options
author | Andreas Gohr <andi@splitbrain.org> | 2014-12-02 10:42:15 +0100 |
---|---|---|
committer | Andreas Gohr <andi@splitbrain.org> | 2014-12-02 10:42:15 +0100 |
commit | 2ebe3b0b9aaea67048a23ae1fa7b80bd4a9640d9 (patch) | |
tree | 25609eaa3f84a046ddeaa7d4d07a05a6810e4a32 /inc | |
parent | 5191adeed4cfba986d01988e25badcf030c22010 (diff) | |
parent | d47f74a0328452bed21867aa4e20557b7d4564e4 (diff) | |
download | rpg-2ebe3b0b9aaea67048a23ae1fa7b80bd4a9640d9.tar.gz rpg-2ebe3b0b9aaea67048a23ae1fa7b80bd4a9640d9.tar.bz2 |
Merge pull request #940 from splitbrain/listnode2
Provide node/leaf state data in instructions
Diffstat (limited to 'inc')
-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 a1040d12e..5e0aa6ff4 100644 --- a/inc/parser/handler.php +++ b/inc/parser/handler.php @@ -805,6 +805,8 @@ class Doku_Handler_List { var $listCalls = array(); var $listStack = array(); + const NODE = 1; + function Doku_Handler_List(& $CallWriter) { $this->CallWriter = & $CallWriter; } @@ -856,7 +858,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]); @@ -881,6 +884,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 ) { @@ -897,6 +901,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 { @@ -908,7 +915,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); } //------------------------------------------------------------------------ @@ -920,7 +927,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] ) @@ -934,6 +944,7 @@ class Doku_Handler_List { while (1) { $end = end($this->listStack); + $key = key($this->listStack); if ( $end[1] <= $depth ) { @@ -946,6 +957,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]); @@ -954,7 +968,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.'">'; } /** |