beber pushed a commit to branch master. http://git.enlightenment.org/website/www.git/commit/?id=b88336b2ee9f26b5230ce1fcee3ff494bab7b5a7
commit b88336b2ee9f26b5230ce1fcee3ff494bab7b5a7 Author: Bertrand Jacquin <bertr...@jacquin.bzh> Date: Sun Oct 15 04:52:26 2017 +0100 MEDIUM: Update plugin yalist to v2016-08-29 --- public_html/lib/plugins/yalist/.travis.yml | 30 + public_html/lib/plugins/yalist/README.md | 8 + public_html/lib/plugins/yalist/conf/default.php | 7 + public_html/lib/plugins/yalist/conf/metadata.php | 8 + public_html/lib/plugins/yalist/odt.css | 7 + public_html/lib/plugins/yalist/plugin.info.txt | 4 +- public_html/lib/plugins/yalist/style.css | 6 - public_html/lib/plugins/yalist/syntax.php | 672 +++++++++++++++++------ 8 files changed, 568 insertions(+), 174 deletions(-) diff --git a/public_html/lib/plugins/yalist/.travis.yml b/public_html/lib/plugins/yalist/.travis.yml new file mode 100644 index 00000000..66b3dff5 --- /dev/null +++ b/public_html/lib/plugins/yalist/.travis.yml @@ -0,0 +1,30 @@ +dist: trusty +language: php + +php: + - "nightly" + - "7.1" + - "7.0" + - "5.6" + - "hhvm" + +matrix: + allow_failures: + - php: "hhvm" + - php: "nightly" + env: DOKUWIKI=stable + - php: "7.1" + env: DOKUWIKI=stable + +env: + - DOKUWIKI=master + - DOKUWIKI=stable + +before_install: + - wget https://raw.github.com/splitbrain/dokuwiki-travis/master/travis.sh + +install: + - sh travis.sh + +script: + - cd _test && PRESERVE_TMP=false phpunit --stderr --group plugin_backlinks --verbose --debug diff --git a/public_html/lib/plugins/yalist/README.md b/public_html/lib/plugins/yalist/README.md index 9deb2ce4..02fed24d 100644 --- a/public_html/lib/plugins/yalist/README.md +++ b/public_html/lib/plugins/yalist/README.md @@ -17,3 +17,11 @@ and list items with multiple paragraphs. The complete syntax is as follows: ``` Lists can be nested within lists, just as in the standard DokuWiki syntax. + + +[![Build Status](https://travis-ci.org/mprins/dokuwiki-yalist-plugin.svg?branch=master)](https://travis-ci.org/mprins/dokuwiki-yalist-plugin) +[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/mprins/dokuwiki-yalist-plugin/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/mprins/dokuwiki-yalist-plugin/?branch=master) +[![GitHub issues](https://img.shields.io/github/issues/mprins/dokuwiki-yalist-plugin.svg)](https://github.com/mprins/dokuwiki-yalist-plugin/issues) +[![GitHub forks](https://img.shields.io/github/forks/mprins/dokuwiki-yalist-plugin.svg)](https://github.com/mprins/dokuwiki-yalist-plugin/network) +[![GitHub stars](https://img.shields.io/github/stars/mprins/dokuwiki-yalist-plugin.svg)](https://github.com/mprins/dokuwiki-yalist-plugin/stargazers) +[![GitHub license](https://img.shields.io/badge/license-GPLv2-blue.svg)](https://raw.githubusercontent.com/mprins/dokuwiki-yalist-plugin/master/LICENSE) diff --git a/public_html/lib/plugins/yalist/conf/default.php b/public_html/lib/plugins/yalist/conf/default.php new file mode 100644 index 00000000..7e9a0861 --- /dev/null +++ b/public_html/lib/plugins/yalist/conf/default.php @@ -0,0 +1,7 @@ +<?php +/** + * @author LarsDW223 + */ + +// How shall definition lists be exported to ODT? +$conf['def_list_odt_export'] = 'list'; diff --git a/public_html/lib/plugins/yalist/conf/metadata.php b/public_html/lib/plugins/yalist/conf/metadata.php new file mode 100644 index 00000000..5d612a5d --- /dev/null +++ b/public_html/lib/plugins/yalist/conf/metadata.php @@ -0,0 +1,8 @@ +<?php +/** + * Options for the yalist plugin + * + * @author LarsDW223 + */ + +$meta['def_list_odt_export'] = array('multichoice', '_choices' => array('list', 'listheader', 'table')); diff --git a/public_html/lib/plugins/yalist/odt.css b/public_html/lib/plugins/yalist/odt.css new file mode 100644 index 00000000..1023b75d --- /dev/null +++ b/public_html/lib/plugins/yalist/odt.css @@ -0,0 +1,7 @@ +div.dokuwiki .dt { + margin-right: 1em; + color: __text_alt__; + font-weight: bold; + max-width: 30%; + float: left; +} diff --git a/public_html/lib/plugins/yalist/plugin.info.txt b/public_html/lib/plugins/yalist/plugin.info.txt index f6edfd48..81501cc2 100644 --- a/public_html/lib/plugins/yalist/plugin.info.txt +++ b/public_html/lib/plugins/yalist/plugin.info.txt @@ -1,7 +1,7 @@ base yalist author Mark C. Prins, previously Ben Slusky email mpr...@users.sf.net -date 2014-05-16 +date 2016-08-29 name Simple universal list plugin desc Extend DokuWiki list syntax to allow definition list and multiple paragraphs in a list entry -url https://www.dokuwiki.org/plugin:yalist \ No newline at end of file +url https://www.dokuwiki.org/plugin:yalist diff --git a/public_html/lib/plugins/yalist/style.css b/public_html/lib/plugins/yalist/style.css index b4655ee8..c30b734e 100644 --- a/public_html/lib/plugins/yalist/style.css +++ b/public_html/lib/plugins/yalist/style.css @@ -14,12 +14,6 @@ div.dokuwiki .dt { float: left; } -div.dokuwiki .dt, -div.dokuwiki .dd, -div.dokuwiki .li { - margin-bottom: 0.33em; -} - div.dokuwiki dd { margin-left: 3em; } diff --git a/public_html/lib/plugins/yalist/syntax.php b/public_html/lib/plugins/yalist/syntax.php index bc287148..7304e318 100644 --- a/public_html/lib/plugins/yalist/syntax.php +++ b/public_html/lib/plugins/yalist/syntax.php @@ -21,11 +21,18 @@ * @author Ben Slusky <slus...@paranoiacs.org> * */ -if (!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/'); -if (!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); -require_once(DOKU_PLUGIN.'syntax.php'); +if (!defined('DOKU_INC')) { + define('DOKU_INC', realpath(dirname(__FILE__) . '/../../') . '/'); +} +if (!defined('DOKU_PLUGIN')) { + define('DOKU_PLUGIN', DOKU_INC . 'lib/plugins/'); +} +require_once(DOKU_PLUGIN . 'syntax.php'); class syntax_plugin_yalist extends DokuWiki_Syntax_Plugin { var $stack = array(); + static $odt_table_stack = array(); + static $odt_table_stack_index = 0; + function getType() { return 'container'; } @@ -40,27 +47,28 @@ class syntax_plugin_yalist extends DokuWiki_Syntax_Plugin { return array('substition', 'protected', 'disabled', 'formatting'); } function connectTo($mode) { - $this->Lexer->addEntryPattern('\n {2,}(?:--?|\*\*?|\?|::?)', $mode, 'plugin_yalist'); - $this->Lexer->addEntryPattern('\n\t{1,}(?:--?|\*\*?|\?|::?)', $mode, 'plugin_yalist'); - $this->Lexer->addPattern('\n {2,}(?:--?|\*\*?|\?|::?|\.\.)', 'plugin_yalist'); - $this->Lexer->addPattern('\n\t{1,}(?:--?|\*\*?|\?|::?|\.\.)', 'plugin_yalist'); + $this->Lexer->addEntryPattern('\n {2,}(?:--?|\*\*?|\?|::?)', $mode, 'plugin_yalist'); + $this->Lexer->addEntryPattern('\n\t{1,}(?:--?|\*\*?|\?|::?)', $mode, 'plugin_yalist'); + $this->Lexer->addPattern('\n {2,}(?:--?|\*\*?|\?|::?|\.\.)', 'plugin_yalist'); + $this->Lexer->addPattern('\n\t{1,}(?:--?|\*\*?|\?|::?|\.\.)', 'plugin_yalist'); } function postConnect() { $this->Lexer->addExitPattern('\n', 'plugin_yalist'); } - function handle($match, $state, $pos, &$handler) { + function handle($match, $state, $pos, Doku_Handler $handler) { $output = array(); $level = 0; switch ($state) { - case DOKU_LEXER_ENTER: - $frame = $this->_interpret_match($match); - $level = $frame['level'] = 1; - array_push($output, - "${frame['list']}_open", - "${frame['item']}_open", - "${frame['item']}_content_open"); - if ($frame['paras']) - array_push($output, 'p_open'); + case DOKU_LEXER_ENTER: + $frame = $this->_interpret_match($match); + $level = $frame['level'] = 1; + array_push($output, + "${frame['list']}_open", + "${frame['item']}_open", + "${frame['item']}_content_open"); + if ($frame['paras']) { + array_push($output, 'p_open'); + } array_push($this->stack, $frame); break; case DOKU_LEXER_EXIT: @@ -70,14 +78,15 @@ class syntax_plugin_yalist extends DokuWiki_Syntax_Plugin { // close the content tag; for the rest it will have been // closed already if ($close_content) { - if ($frame['paras']) - array_push($output, 'p_close'); + if ($frame['paras']) { + array_push($output, 'p_close'); + } array_push($output, "${frame['item']}_content_close"); $close_content = false; } array_push($output, - "${frame['item']}_close", - "${frame['list']}_close"); + "${frame['item']}_close", + "${frame['list']}_close"); } break; case DOKU_LEXER_MATCHED: @@ -89,25 +98,27 @@ class syntax_plugin_yalist extends DokuWiki_Syntax_Plugin { $close_content = true; while ($para_depth < $last_frame['depth'] && count($this->stack) > 1) { if ($close_content) { - if ($last_frame['paras']) - array_push($output, 'p_close'); + if ($last_frame['paras']) { + array_push($output, 'p_close'); + } array_push($output, "${last_frame['item']}_content_close"); $close_content = false; } array_push($output, - "${last_frame['item']}_close", - "${last_frame['list']}_close"); + "${last_frame['item']}_close", + "${last_frame['list']}_close"); array_pop($this->stack); $last_frame = end($this->stack); } if ($last_frame['paras']) { - if ($close_content) - // depth did not change + if ($close_content) { + // depth did not change array_push($output, 'p_close', 'p_open'); - else - array_push($output, - "${last_frame['item']}_content_open", - 'p_open'); + } else { + array_push($output, + "${last_frame['item']}_content_open", + 'p_open'); + } } else { // let's just pretend we didn't match... $state = DOKU_LEXER_UNMATCHED; @@ -119,11 +130,12 @@ class syntax_plugin_yalist extends DokuWiki_Syntax_Plugin { if ($curr_frame['depth'] > $last_frame['depth']) { // going one level deeper $level = $last_frame['level'] + 1; - if ($last_frame['paras']) - array_push($output, 'p_close'); + if ($last_frame['paras']) { + array_push($output, 'p_close'); + } array_push($output, - "${last_frame['item']}_content_close", - "${curr_frame['list']}_open"); + "${last_frame['item']}_content_close", + "${curr_frame['list']}_open"); } else { // same depth, or getting shallower $close_content = true; @@ -136,14 +148,15 @@ class syntax_plugin_yalist extends DokuWiki_Syntax_Plugin { // again, we need to close the content tag only for // the first frame popped off the stack if ($close_content) { - if ($last_frame['paras']) - array_push($output, 'p_close'); + if ($last_frame['paras']) { + array_push($output, 'p_close'); + } array_push($output, "${last_frame['item']}_content_close"); $close_content = false; } array_push($output, - "${last_frame['item']}_close", - "${last_frame['list']}_close"); + "${last_frame['item']}_close", + "${last_frame['list']}_close"); array_pop($this->stack); $last_frame = end($this->stack); } @@ -152,8 +165,9 @@ class syntax_plugin_yalist extends DokuWiki_Syntax_Plugin { array_pop($this->stack); $level = $last_frame['level']; if ($close_content) { - if ($last_frame['paras']) - array_push($output, 'p_close'); + if ($last_frame['paras']) { + array_push($output, 'p_close'); + } array_push($output, "${last_frame['item']}_content_close"); $close_content = false; } @@ -161,16 +175,17 @@ class syntax_plugin_yalist extends DokuWiki_Syntax_Plugin { if ($curr_frame['list'] != $last_frame['list']) { // change list types array_push($output, - "${last_frame['list']}_close", - "${curr_frame['list']}_open"); + "${last_frame['list']}_close", + "${curr_frame['list']}_open"); } } // and finally, open tags for the new list item array_push($output, - "${curr_frame['item']}_open", - "${curr_frame['item']}_content_open"); - if ($curr_frame['paras']) - array_push($output, 'p_open'); + "${curr_frame['item']}_open", + "${curr_frame['item']}_content_open"); + if ($curr_frame['paras']) { + array_push($output, 'p_open'); + } $curr_frame['level'] = $level; array_push($this->stack, $curr_frame); break; @@ -195,140 +210,465 @@ class syntax_plugin_yalist extends DokuWiki_Syntax_Plugin { 'paras' => (substr($match, -1) == substr($match, -2, 1)), ); } - function render($mode, &$renderer, $data) { - if ($mode != 'xhtml' && $mode != 'latex') - return false; + + function render($mode, Doku_Renderer $renderer, $data) { + if ($mode != 'xhtml' && $mode != 'latex' && $mode != 'odt') { + return false; + } if ($data['state'] == DOKU_LEXER_UNMATCHED) { - $renderer->doc .= $renderer->_xmlEntities($data['output']); + if ($mode != 'odt') { + $renderer->doc .= $renderer->_xmlEntities($data['output']); + } else { + $renderer->cdata($data['output']); + } return true; } foreach ($data['output'] as $i) { - $markup = ''; - if ($mode == 'xhtml') { - switch ($i) { - case 'ol_open': - $markup = "<ol>\n"; - break; - case 'ol_close': - $markup = "</ol>\n"; - break; - case 'ul_open': - $markup = "<ul>\n"; - break; - case 'ul_close': - $markup = "</ul>\n"; - break; - case 'dl_open': - $markup = "<dl>\n"; - break; - case 'dl_close': - $markup = "</dl>\n"; - break; - case 'li_open': - $markup = "<li class=\"level${data['level']}\">"; - break; - case 'li_content_open': - $markup = "<div class=\"li\">\n"; - break; - case 'li_content_close': - $markup = "\n</div>"; - break; - case 'li_close': - $markup = "</li>\n"; - break; - case 'dt_open': - $markup = "<dt class=\"level${data['level']}\">"; - break; - case 'dt_content_open': - $markup = "<span class=\"dt\">"; - break; - case 'dt_content_close': - $markup = "</span>"; - break; - case 'dt_close': - $markup = "</dt>\n"; - break; - case 'dd_open': - $markup = "<dd class=\"level${data['level']}\">"; - break; - case 'dd_content_open': - $markup = "<div class=\"dd\">\n"; - break; - case 'dd_content_close': - $markup = "\n</div>"; - break; - case 'dd_close': - $markup = "</dd>\n"; - break; - case 'p_open': - $markup = "<p>\n"; - break; - case 'p_close': - $markup = "\n</p>"; - break; - } + switch ($mode) { + case 'xhtml': + $this->render_xhtml_item($renderer, $i, $data); + break; + case 'latex': + $this->render_latex_item($renderer, $i, $data); + break; + case 'odt': + $this->render_odt_item($renderer, $i, $data); + break; + } + } + if ($data['state'] == DOKU_LEXER_EXIT) { + if ($mode != 'odt') { + $renderer->doc .= "\n"; } else { - // $mode == 'latex' - switch ($i) { - case 'ol_open': - $markup = "\\begin{enumerate}\n"; - break; - case 'ol_close': - $markup = "\\end{enumerate}\n"; - break; - case 'ul_open': - $markup = "\\begin{itemize}\n"; - break; - case 'ul_close': - $markup = "\\end{itemize}\n"; - break; - case 'dl_open': - $markup = "\\begin{description}\n"; - break; - case 'dl_close': - $markup = "\\end{description}\n"; - break; - case 'li_open': - $markup = "\item "; - break; - case 'li_content_open': - break; - case 'li_content_close': - break; - case 'li_close': - $markup = "\n"; - break; - case 'dt_open': - $markup = "\item["; + $renderer->linebreak(); + } + } + return true; + } + + function render_xhtml_item(Doku_Renderer $renderer, $item) { + $markup = ''; + switch ($item) { + case 'ol_open': + $markup = "<ol>\n"; + break; + case 'ol_close': + $markup = "</ol>\n"; + break; + case 'ul_open': + $markup = "<ul>\n"; + break; + case 'ul_close': + $markup = "</ul>\n"; + break; + case 'dl_open': + $markup = "<dl>\n"; + break; + case 'dl_close': + $markup = "</dl>\n"; + break; + case 'li_open': + $markup = "<li class=\"level${data['level']}\">"; + break; + case 'li_content_open': + $markup = "<div class=\"li\">\n"; + break; + case 'li_content_close': + $markup = "\n</div>"; + break; + case 'li_close': + $markup = "</li>\n"; + break; + case 'dt_open': + $markup = "<dt class=\"level${data['level']}\">"; + break; + case 'dt_content_open': + $markup = "<span class=\"dt\">"; + break; + case 'dt_content_close': + $markup = "</span>"; + break; + case 'dt_close': + $markup = "</dt>\n"; + break; + case 'dd_open': + $markup = "<dd class=\"level${data['level']}\">"; + break; + case 'dd_content_open': + $markup = "<div class=\"dd\">\n"; + break; + case 'dd_content_close': + $markup = "\n</div>"; + break; + case 'dd_close': + $markup = "</dd>\n"; + break; + case 'p_open': + $markup = "<p>\n"; + break; + case 'p_close': + $markup = "\n</p>"; + break; + } + $renderer->doc .= $markup; + } + + function render_latex_item(Doku_Renderer $renderer, $item) { + $markup = ''; + switch ($item) { + case 'ol_open': + $markup = "\\begin{enumerate}\n"; + break; + case 'ol_close': + $markup = "\\end{enumerate}\n"; + break; + case 'ul_open': + $markup = "\\begin{itemize}\n"; + break; + case 'ul_close': + $markup = "\\end{itemize}\n"; + break; + case 'dl_open': + $markup = "\\begin{description}\n"; + break; + case 'dl_close': + $markup = "\\end{description}\n"; + break; + case 'li_open': + $markup = "\item "; + break; + case 'li_content_open': + break; + case 'li_content_close': + break; + case 'li_close': + $markup = "\n"; + break; + case 'dt_open': + $markup = "\item["; + break; + case 'dt_content_open': + break; + case 'dt_content_close': + break; + case 'dt_close': + $markup = "] "; + break; + case 'dd_open': + break; + case 'dd_content_open': + break; + case 'dd_content_close': + break; + case 'dd_close': + $markup = "\n"; + break; + case 'p_open': + $markup = "\n"; + break; + case 'p_close': + $markup = "\n"; + break; + } + $renderer->doc .= $markup; + } + + /** + * Render yalist items for ODT format + * + * @param Doku_Renderer $renderer The current renderer object + * @param string $item The item to render + * + * @author LarsDW223 + */ + function render_odt_item(Doku_Renderer $renderer, $item) { + switch ($item) { + case 'ol_open': + $renderer->listo_open(); + break; + case 'ul_open': + $renderer->listu_open(); + break; + case 'dl_open': + if ($this->getConf('def_list_odt_export') != 'table') { + $renderer->listu_open(); + } else { + $renderer->table_open(2); + } + self::$odt_table_stack [self::$odt_table_stack_index] = array(); + self::$odt_table_stack [self::$odt_table_stack_index]['itemOpen'] = false; + self::$odt_table_stack [self::$odt_table_stack_index]['dtState'] = 0; + self::$odt_table_stack [self::$odt_table_stack_index]['ddState'] = 0; + self::$odt_table_stack_index++; + break; + case 'ol_close': + case 'ul_close': + $renderer->list_close(); + break; + case 'dl_close': + $config = $this->getConf('def_list_odt_export'); + if ($config != 'table') { + if (self::$odt_table_stack [self::$odt_table_stack_index - 1]['ddState'] != 2) { + if ($config == 'listheader' && method_exists($renderer, 'listheader_close')) { + $renderer->listheader_close(); + } else { + $renderer->listitem_close(); + } + } + self::$odt_table_stack [self::$odt_table_stack_index - 1]['ddState'] = 0; + $renderer->list_close(); + } else { + if (self::$odt_table_stack [self::$odt_table_stack_index - 1]['ddState'] == 0) { + $properties = array(); + $properties ['border'] = 'none'; + $renderer->_odtTableCellOpenUseProperties($properties); + $renderer->tablecell_close(); + } + self::$odt_table_stack [self::$odt_table_stack_index - 1]['ddState'] = 0; + if (self::$odt_table_stack [self::$odt_table_stack_index - 1]['itemOpen'] === true) { + $renderer->tablerow_close(1); + self::$odt_table_stack [self::$odt_table_stack_index - 1]['itemOpen'] = false; + } + $renderer->table_close(); + } + if (self::$odt_table_stack_index > 0) { + self::$odt_table_stack_index--; + unset(self::$odt_table_stack [self::$odt_table_stack_index]); + } + break; + + case 'li_open': + $renderer->listitem_open(1); + break; + case 'li_content_open': + $renderer->listcontent_open(); + break; + case 'li_content_close': + $renderer->listcontent_close(); + break; + case 'li_close': + $renderer->listitem_close(); + break; + + case 'dt_open': // unconditional: DT tags can't contain paragraphs. That would not be legal XHTML. + switch ($this->getConf('def_list_odt_export')) { + case 'listheader': + if (self::$odt_table_stack [self::$odt_table_stack_index - 1]['itemOpen'] === true) { + if (method_exists($renderer, 'listheader_close')) { + $renderer->listheader_close(); + } else { + $renderer->listitem_close(); + } + self::$odt_table_stack [self::$odt_table_stack_index - 1]['itemOpen'] = false; + } + if (self::$odt_table_stack [self::$odt_table_stack_index - 1]['itemOpen'] === false) { + if (method_exists($renderer, 'listheader_open')) { + $renderer->listheader_open(1); + } else { + $renderer->listitem_open(1); + } + self::$odt_table_stack [self::$odt_table_stack_index - 1]['itemOpen'] = true; + } + break; + case 'table': + if (self::$odt_table_stack [self::$odt_table_stack_index - 1]['ddState'] == 0) { + $properties = array(); + $properties ['border'] = 'none'; + $renderer->_odtTableCellOpenUseProperties($properties); + $renderer->tablecell_close(); + } + + if (self::$odt_table_stack [self::$odt_table_stack_index - 1]['itemOpen'] === true) { + $renderer->tablerow_close(); + self::$odt_table_stack [self::$odt_table_stack_index - 1]['itemOpen'] = false; + } + if (self::$odt_table_stack [self::$odt_table_stack_index - 1]['itemOpen'] === false) { + $renderer->tablerow_open(1); + self::$odt_table_stack [self::$odt_table_stack_index - 1]['itemOpen'] = true; + } + $properties = array(); + $properties ['border'] = 'none'; + $renderer->_odtTableCellOpenUseProperties($properties); + break; + default: + if (self::$odt_table_stack [self::$odt_table_stack_index - 1]['itemOpen'] === true) { + $renderer->listitem_close(); + self::$odt_table_stack [self::$odt_table_stack_index - 1]['itemOpen'] = false; + } + if (self::$odt_table_stack [self::$odt_table_stack_index - 1]['itemOpen'] === false) { + $renderer->listitem_open(1); + self::$odt_table_stack [self::$odt_table_stack_index - 1]['itemOpen'] = true; + } break; - case 'dt_content_open': + } + self::$odt_table_stack [self::$odt_table_stack_index - 1]['dtState'] = 1; + self::$odt_table_stack [self::$odt_table_stack_index - 1]['ddState'] = 0; + break; + case 'dd_open': + switch ($this->getConf('def_list_odt_export')) { + case 'listheader': + if (self::$odt_table_stack [self::$odt_table_stack_index - 1]['itemOpen'] === false) { + if (method_exists($renderer, 'listheader_open')) { + $renderer->listheader_open(1); + } else { + $renderer->listitem_open(1); + } + self::$odt_table_stack [self::$odt_table_stack_index - 1]['itemOpen'] = true; + } + break; + case 'table': + if (self::$odt_table_stack [self::$odt_table_stack_index - 1]['itemOpen'] === false) { + $renderer->tablerow_open(1); + self::$odt_table_stack [self::$odt_table_stack_index - 1]['itemOpen'] = true; + } + if (self::$odt_table_stack [self::$odt_table_stack_index - 1]['dtState'] == 1) { + $renderer->tablecell_close(); + } + if (self::$odt_table_stack [self::$odt_table_stack_index - 1]['dtState'] == 0) { + $properties = array(); + $properties ['border'] = 'none'; + $renderer->_odtTableCellOpenUseProperties($properties); + $renderer->tablecell_close(); + } + + $properties = array(); + $properties ['border'] = 'none'; + $renderer->_odtTableCellOpenUseProperties($properties); + break; + default: + if (self::$odt_table_stack [self::$odt_table_stack_index - 1]['itemOpen'] === false) { + $renderer->listitem_open(1); + self::$odt_table_stack [self::$odt_table_stack_index - 1]['itemOpen'] = true; + } break; - case 'dt_content_close': + } + self::$odt_table_stack [self::$odt_table_stack_index - 1]['dtState'] = 0; + self::$odt_table_stack [self::$odt_table_stack_index - 1]['ddState'] = 1; + break; + case 'dt_content_open': + switch ($this->getConf('def_list_odt_export')) { + case 'table': + $renderer->p_open(); break; - case 'dt_close': - $markup = "] "; + default: + $renderer->listcontent_open(); break; - case 'dd_open': + } + $this->renderODTOpenSpan($renderer); + break; + case 'dd_content_open': + switch ($this->getConf('def_list_odt_export')) { + case 'table': + $renderer->p_open(); break; - case 'dd_content_open': + default: + $renderer->listcontent_open(); break; - case 'dd_content_close': + } + break; + case 'dt_content_close': + $this->renderODTCloseSpan($renderer); + switch ($this->getConf('def_list_odt_export')) { + case 'table': + $renderer->p_close(); break; - case 'dd_close': - $markup = "\n"; + default: + $renderer->listcontent_close(); break; - case 'p_open': - $markup = "\n"; + } + break; + case 'dd_content_close': + switch ($this->getConf('def_list_odt_export')) { + case 'table': + $renderer->p_close(); break; - case 'p_close': - $markup = "\n"; + default: + $renderer->listcontent_close(); break; } - } - $renderer->doc .= $markup; + break; + case 'dt_close': + switch ($this->getConf('def_list_odt_export')) { + case 'listheader': + $renderer->linebreak(); + break; + case 'table': + $renderer->tablecell_close(); + self::$odt_table_stack [self::$odt_table_stack_index - 1]['dtState'] = 2; + break; + default: + $renderer->linebreak(); + break; + } + break; + + case 'dd_close': + switch ($this->getConf('def_list_odt_export')) { + case 'listheader': + if (self::$odt_table_stack [self::$odt_table_stack_index - 1]['itemOpen'] === true) { + if (method_exists($renderer, 'listheader_close')) { + $renderer->listheader_close(); + } else { + $renderer->listitem_close(); + } + self::$odt_table_stack [self::$odt_table_stack_index - 1]['itemOpen'] = false; + } + break; + case 'table': + $renderer->tablecell_close(); + if (self::$odt_table_stack [self::$odt_table_stack_index - 1]['itemOpen'] === true) { + $renderer->tablerow_close(1); + self::$odt_table_stack [self::$odt_table_stack_index - 1]['itemOpen'] = false; + } + break; + default: + if (self::$odt_table_stack [self::$odt_table_stack_index - 1]['itemOpen'] === true) { + $renderer->listitem_close(1); + self::$odt_table_stack [self::$odt_table_stack_index - 1]['itemOpen'] = false; + } + break; + } + self::$odt_table_stack [self::$odt_table_stack_index - 1]['dtState'] = 0; + self::$odt_table_stack [self::$odt_table_stack_index - 1]['ddState'] = 2; + break; + + case 'p_open': + $renderer->p_open(); + break; + case 'p_close': + $renderer->p_close(); + break; } - if ($data['state'] == DOKU_LEXER_EXIT) - $renderer->doc .= "\n"; - return true; } -} \ No newline at end of file + + /** + * Open ODT span for rendering of dt-content + * + * @param Doku_Renderer $renderer The current renderer object + * + * @author LarsDW223 + */ + function renderODTOpenSpan($renderer) { + $properties = array(); + + // Get CSS properties for ODT export. + $renderer->getODTProperties($properties, 'div', 'dokuwiki dt', NULL); + + $renderer->_odtSpanOpenUseProperties($properties); + } + + /** + * Close ODT span for rendering of dt-content + * + * @param Doku_Renderer $renderer The current renderer object + * + * @author LarsDW223 + */ + function renderODTCloseSpan($renderer) { + if (method_exists($renderer, '_odtSpanClose') === false) { + // Function is not supported by installed ODT plugin version, return. + return; + } + $renderer->_odtSpanClose(); + } +} --