MEDIUM: Update plugin yalist to v2016-08-29

This commit is contained in:
Bertrand Jacquin 2017-10-15 04:52:26 +01:00
parent 76176dc21c
commit b88336b2ee
No known key found for this signature in database
GPG Key ID: 5534871F2E2E93DA
8 changed files with 578 additions and 184 deletions

View File

@ -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

View File

@ -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)

View File

@ -0,0 +1,7 @@
<?php
/**
* @author LarsDW223
*/
// How shall definition lists be exported to ODT?
$conf['def_list_odt_export'] = 'list';

View File

@ -0,0 +1,8 @@
<?php
/**
* Options for the yalist plugin
*
* @author LarsDW223
*/
$meta['def_list_odt_export'] = array('multichoice', '_choices' => array('list', 'listheader', 'table'));

View File

@ -0,0 +1,7 @@
div.dokuwiki .dt {
margin-right: 1em;
color: __text_alt__;
font-weight: bold;
max-width: 30%;
float: left;
}

View File

@ -1,7 +1,7 @@
base yalist
author Mark C. Prins, previously Ben Slusky
email mprins@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
url https://www.dokuwiki.org/plugin:yalist

View File

@ -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;
}

View File

@ -21,11 +21,18 @@
* @author Ben Slusky <sluskyb@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;
}
} 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[";
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;
}
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 {
$renderer->linebreak();
}
$renderer->doc .= $markup;
}
if ($data['state'] == DOKU_LEXER_EXIT)
$renderer->doc .= "\n";
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;
}
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;
}
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;
default:
$renderer->listcontent_open();
break;
}
$this->renderODTOpenSpan($renderer);
break;
case 'dd_content_open':
switch ($this->getConf('def_list_odt_export')) {
case 'table':
$renderer->p_open();
break;
default:
$renderer->listcontent_open();
break;
}
break;
case 'dt_content_close':
$this->renderODTCloseSpan($renderer);
switch ($this->getConf('def_list_odt_export')) {
case 'table':
$renderer->p_close();
break;
default:
$renderer->listcontent_close();
break;
}
break;
case 'dd_content_close':
switch ($this->getConf('def_list_odt_export')) {
case 'table':
$renderer->p_close();
break;
default:
$renderer->listcontent_close();
break;
}
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;
}
}
/**
* 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();
}
}