diff --git a/Model/Groq/ChatModel.php b/Model/Groq/ChatModel.php index b1a29c4..55df1fc 100644 --- a/Model/Groq/ChatModel.php +++ b/Model/Groq/ChatModel.php @@ -16,7 +16,7 @@ public function __construct(string $name, array $config) throw new \Exception('Groq API key not configured'); } - $this->http->headers['Authorization'] = 'Bearer '.$config['groq_apikey']; + $this->http->headers['Authorization'] = 'Bearer ' . $config['groq_apikey']; } /** @inheritdoc */ diff --git a/Model/Ollama/AbstractOllama.php b/Model/Ollama/AbstractOllama.php index fc1508a..4b4a15c 100644 --- a/Model/Ollama/AbstractOllama.php +++ b/Model/Ollama/AbstractOllama.php @@ -51,5 +51,4 @@ protected function parseAPIResponse($response) return $response; } - } diff --git a/Model/Reka/ChatModel.php b/Model/Reka/ChatModel.php index 1217ac8..22866aa 100644 --- a/Model/Reka/ChatModel.php +++ b/Model/Reka/ChatModel.php @@ -65,8 +65,8 @@ protected function request($endpoint, $data) /** @inheritdoc */ protected function parseAPIResponse($response) { - if(((int) $this->http->status) !== 200) { - if(isset($response['detail'])) { + if (((int) $this->http->status) !== 200) { + if (isset($response['detail'])) { throw new \Exception('Reka API error: ' . $response['detail']); } else { throw new \Exception('Reka API error: ' . $this->http->status . ' ' . $this->http->error); diff --git a/Storage/PineconeStorage.php b/Storage/PineconeStorage.php index 32695fe..a3b35ce 100644 --- a/Storage/PineconeStorage.php +++ b/Storage/PineconeStorage.php @@ -124,7 +124,7 @@ public function deletePageChunks($page, $firstChunkID) $this->runQuery('/vectors/delete', ['ids' => $ids]); } catch (\Exception $e) { // 5 is the code for "namespace not found" See #12 - if($e->getCode() !== 5) throw $e; + if ($e->getCode() !== 5) throw $e; } } diff --git a/cli.php b/cli.php index 4799cdd..c667686 100644 --- a/cli.php +++ b/cli.php @@ -358,10 +358,10 @@ protected function createEmbeddings($clear) $data = $this->helper->getRunData(); $lastEmbedModel = $data['embed used'] ?? ''; - if( + if ( !$clear && $lastEmbedModel && $lastEmbedModel != (string) $this->helper->getEmbeddingModel() - ){ + ) { $this->warning('Embedding model has changed since last run. Forcing an index rebuild'); $clear = true; } diff --git a/renderer.php b/renderer.php index c7089eb..7bcfea6 100644 --- a/renderer.php +++ b/renderer.php @@ -1,615 +1,598 @@ - - * @author Todd Augsburger - * @author i-net software - * @link https://www.dokuwiki.org/plugin:text - * @link https://www.dokuwiki.org/plugin:dw2markdown - */ -class renderer_plugin_aichat extends Doku_Renderer_xhtml -{ - - - /** @inheritdoc */ - function getFormat() - { - return 'aichat'; - } - - /** @inheritdoc */ - public function startSectionEdit($start, $data, $title = null) - { - } - - /** @inheritdoc */ - public function finishSectionEdit($end = null, $hid = null) - { - } - - /** - * @inheritdoc - * Use specific text support if available, otherwise use xhtml renderer and strip tags - */ - public function plugin($name, $data, $state = '', $match = '') - { - /** @var DokuWiki_Syntax_Plugin $plugin */ - $plugin = plugin_load('syntax', $name); - if ($plugin === null) return; - - if ( - !$plugin->render($this->getFormat(), $this, $data) && - !$plugin->render('text', $this, $data) && - !$plugin->render('markdown', $this, $data) - ) { - // plugin does not support any of the text formats, so use stripped-down xhtml - $tmpData = $this->doc; - $this->doc = ''; - if ($plugin->render('xhtml', $this, $data) && ($this->doc != '')) { - $pluginoutput = $this->doc; - $this->doc = $tmpData . DOKU_LF . trim(strip_tags($pluginoutput)) . DOKU_LF; - } else { - $this->doc = $tmpData; - } - } - } - - - /** @inheritdoc */ - public function document_start() - { - global $ID; - - - $this->doc = ''; - $metaheader = array(); - $metaheader['Content-Type'] = 'text/plain; charset=utf-8'; - $meta = array(); - $meta['format']['aichat'] = $metaheader; - p_set_metadata($ID, $meta); - } - - /** @inheritdoc */ - public function document_end() - { - $this->doc = preg_replace("/(\r?\n){3,}/", "\n\n", $this->doc); - $this->doc = ltrim($this->doc); // remove leading space and empty lines - } - - /** @inheritdoc */ - public function header($text, $level, $pos, $returnonly = false) - { - $this->doc .= str_repeat("#", $level) . ' ' . $text . DOKU_LF; - } - - /** @inheritdoc */ - public function section_open($level) - { - $this->doc .= DOKU_LF; - } - - /** @inheritdoc */ - public function section_close() - { - $this->doc .= DOKU_LF; - } - - /** @inheritdoc */ - public function cdata($text) - { - $this->doc .= $text; - } - - /** @inheritdoc */ - public function p_open() - { - $this->doc .= DOKU_LF; - } - - /** @inheritdoc */ - public function p_close() - { - $this->doc .= DOKU_LF; - } - - /** @inheritdoc */ - public function linebreak() - { - $this->doc .= DOKU_LF . DOKU_LF; - } - - /** @inheritdoc */ - public function hr() - { - $this->doc .= '----' . DOKU_LF; - } - - /** @inheritdoc */ - public function strong_open() - { - } - - /** @inheritdoc */ - public function strong_close() - { - } - - /** @inheritdoc */ - public function emphasis_open() - { - } - - /** @inheritdoc */ - public function emphasis_close() - { - } - - /** @inheritdoc */ - public function underline_open() - { - } - - /** @inheritdoc */ - public function underline_close() - { - } - - /** @inheritdoc */ - public function monospace_open() - { - } - - /** @inheritdoc */ - public function monospace_close() - { - } - - /** @inheritdoc */ - public function subscript_open() - { - } - - /** @inheritdoc */ - public function subscript_close() - { - } - - /** @inheritdoc */ - public function superscript_open() - { - } - - /** @inheritdoc */ - public function superscript_close() - { - } - - /** @inheritdoc */ - public function deleted_open() - { - } - - /** @inheritdoc */ - public function deleted_close() - { - } - - /** @inheritdoc */ - public function footnote_open() - { - $this->doc .= ' (('; - } - - /** @inheritdoc */ - public function footnote_close() - { - $this->doc .= '))'; - } - - private $listMode = []; - - /** - * Open an unordered list - */ - function listu_open($classes = null) - { - if (empty($this->listMode)) { - $this->doc .= DOKU_LF; - } - $this->listMode[] = '*'; - } - - /** - * Close an unordered list - */ - function listu_close() - { - array_pop($this->listMode); - if (empty($this->listMode)) { - $this->doc .= DOKU_LF; - } - } - - /** - * Open an ordered list - */ - function listo_open($classes = null) - { - if (empty($this->listMode)) { - $this->doc .= DOKU_LF; - } - $this->listMode[] = '1.'; - } - - /** - * Close an ordered list - */ - function listo_close() - { - array_pop($this->listMode); - if (empty($this->listMode)) { - $this->doc .= DOKU_LF; - } - } - - /** - * 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, $node = false) - { - $this->doc .= str_repeat(' ', $level * 2) . $this->listMode[count($this->listMode) - 1]; - } - - /** - * Close a list item - */ - function listitem_close() - { - } - - - /** @inheritdoc */ - public function listcontent_open() - { - } - - /** @inheritdoc */ - public function listcontent_close() - { - $this->doc .= DOKU_LF; - } - - /** @inheritdoc */ - public function unformatted($text) - { - $this->doc .= $text; - } - - /** @inheritdoc */ - public function quote_open() - { - $this->doc .= '>>>'; - } - - /** @inheritdoc */ - public function quote_close() - { - $this->doc .= '<<<' . DOKU_LF; - } - - /** @inheritdoc */ - public function preformatted($text) - { - $this->code($text); - } - - /** @inheritdoc */ - public function file($text, $language = null, $filename = null, $options = null) - { - $this->code($text, $language, $filename, $options); - } - - /** @inheritdoc */ - public function code($text, $language = null, $filename = null, $options = null) - { - $this->doc .= DOKU_LF . '```' . ($language ?? '') . DOKU_LF . trim($text) . DOKU_LF . '```' . DOKU_LF; - } - - /** @inheritdoc */ - public function acronym($acronym) - { - if (array_key_exists($acronym, $this->acronyms)) { - $title = $this->acronyms[$acronym]; - $this->doc .= $acronym . ' (' . $title . ')'; - } else { - $this->doc .= $acronym; - } - } - - /** @inheritdoc */ - public function smiley($smiley) - { - $this->doc .= $smiley; - } - - /** @inheritdoc */ - public function entity($entity) - { - if (array_key_exists($entity, $this->entities)) { - $this->doc .= $this->entities[$entity]; - } else { - $this->doc .= $entity; - } - } - - /** @inheritdoc */ - public function multiplyentity($x, $y) - { - $this->doc .= $x . 'x' . $y; - } - - /** @inheritdoc */ - public function singlequoteopening() - { - global $lang; - $this->doc .= $lang['singlequoteopening']; - } - - /** @inheritdoc */ - public function singlequoteclosing() - { - global $lang; - $this->doc .= $lang['singlequoteclosing']; - } - - /** @inheritdoc */ - public function apostrophe() - { - global $lang; - $this->doc .= $lang['apostrophe']; - } - - /** @inheritdoc */ - public function doublequoteopening() - { - global $lang; - $this->doc .= $lang['doublequoteopening']; - } - - /** @inheritdoc */ - public function doublequoteclosing() - { - global $lang; - $this->doc .= $lang['doublequoteclosing']; - } - - /** @inheritdoc */ - public function camelcaselink($link, $returnonly = false) - { - $this->internallink($link, $link); - } - - /** @inheritdoc */ - public function locallink($hash, $name = null, $returnonly = false) - { - $name = $this->_getLinkTitle($name, $hash, $isImage); - $this->doc .= $name; - } - - /** @inheritdoc */ - public function internallink($id, $name = null, $search = null, $returnonly = false, $linktype = 'content') - { - global $ID; - // default name is based on $id as given - $default = $this->_simpleTitle($id); - $resolver = new PageResolver($ID); - $id = $resolver->resolveId($id); - - $name = $this->_getLinkTitle($name, $default, $isImage, $id, $linktype); - if ($returnonly) { - return $name; - } - $this->doc .= $name; - return null; - } - - /** @inheritdoc */ - public function externallink($url, $name = null, $returnonly = false) - { - $title = $this->_getLinkTitle($name, $url, $isImage); - if ($title != $url) { - $this->doc .= "[$title]($url)"; - } else { - $this->doc .= $title; - } - } - - /** @inheritdoc */ - public function interwikilink($match, $name, $wikiName, $wikiUri, $returnonly = false) - { - $this->doc .= $this->_getLinkTitle($name, $wikiUri, $isImage); - } - - /** @inheritdoc */ - public function windowssharelink($url, $name = null, $returnonly = false) - { - $this->doc .= $this->_getLinkTitle($name, $url, $isImage); - } - - /** @inheritdoc */ - public function emaillink($address, $name = null, $returnonly = false) - { - $name = $this->_getLinkTitle($name, '', $isImage); - $address = html_entity_decode(obfuscate($address), ENT_QUOTES, 'UTF-8'); - if (empty($name)) { - $name = $address; - } - $this->doc .= $name; - } - - /** @inheritdoc */ - public function internalmedia($src, $title = null, $align = null, $width = null, - $height = null, $cache = null, $linking = null, $return = false) - { - $this->doc .= $title; - } - - /** @inheritdoc */ - public function externalmedia($src, $title = null, $align = null, $width = null, - $height = null, $cache = null, $linking = null, $return = false) - { - $this->doc .= $title; - } - - /** @inheritdoc */ - public function rss($url, $params) - { - } - - /** @inheritdoc */ - public function table_open($maxcols = null, $numrows = null, $pos = null, $classes = null) - { - } - - /** @inheritdoc */ - public function table_close($pos = null) - { - $this->doc .= DOKU_LF; - } - - private $tableColumns = 0; - - /** - * Open a table header - */ - function tablethead_open() - { - $this->tableColumns = 0; - $this->doc .= DOKU_LF; // . '|'; - } - - /** - * Close a table header - */ - function tablethead_close() - { - $this->doc .= '|' . str_repeat('---|', $this->tableColumns) . DOKU_LF; - } - - /** - * Open a table body - */ - function tabletbody_open() - { - } - - /** - * Close a table body - */ - function tabletbody_close() - { - } - - /** - * Open a table row - */ - function tablerow_open($classes = null) - { - } - - /** - * Close a table row - */ - function tablerow_close() - { - $this->doc .= '|' . DOKU_LF; - } - - /** - * Open a table header cell - * - * @param int $colspan - * @param string $align left|center|right - * @param int $rowspan - */ - function tableheader_open($colspan = 1, $align = null, $rowspan = 1, $classes = null) - { - $this->doc .= str_repeat('|', $colspan); - $this->tableColumns += $colspan; - } - - /** - * Close a table header cell - */ - function tableheader_close() - { - } - - /** - * Open a table cell - * - * @param int $colspan - * @param string $align left|center|right - * @param int $rowspan - */ - function tablecell_open($colspan = 1, $align = null, $rowspan = 1, $classes = null) - { - $this->doc .= str_repeat('|', $colspan); - } - - /** - * Close a table cell - */ - function tablecell_close() - { - } - - /** @inheritdoc */ - public function _getLinkTitle($title, $default, &$isImage, $id = null, $linktype = 'content') - { - $isImage = false; - if (is_array($title)) { - $isImage = true; - if (!is_null($default) && ($default != $title['title'])) - return $default . " " . $title['title']; - else - return $title['title']; - } elseif (is_null($title) || trim($title) == '') { - if (useHeading($linktype) && $id) { - $heading = p_get_first_heading($id); - if ($heading) { - return $this->_xmlEntities($heading); - } - } - return $this->_xmlEntities($default); - } else { - return $this->_xmlEntities($title); - } - } - - /** @inheritdoc */ - public function _xmlEntities($string) - { - return $string; // nothing to do for text - } - - /** @inheritdoc */ - public function _formatLink($link) - { - if (!empty($link['name'])) { - return $link['name']; - } elseif (!empty($link['title'])) { - return $link['title']; - } - return $link['url']; - } -} + + * @author Todd Augsburger + * @author i-net software + * @link https://www.dokuwiki.org/plugin:text + * @link https://www.dokuwiki.org/plugin:dw2markdown + */ +class renderer_plugin_aichat extends Doku_Renderer_xhtml +{ + /** @var array The stack of list types */ + private $listMode = []; + + /** @var int Number of table columns */ + private $tableColumns = 0; + + /** @inheritdoc */ + public function getFormat() + { + return 'aichat'; + } + + /** @inheritdoc */ + public function startSectionEdit($start, $data, $title = null) + { + } + + /** @inheritdoc */ + public function finishSectionEdit($end = null, $hid = null) + { + } + + /** + * @inheritdoc + * Use specific text support if available, otherwise use xhtml renderer and strip tags + */ + public function plugin($name, $data, $state = '', $match = '') + { + /** @var SyntaxPlugin $plugin */ + $plugin = plugin_load('syntax', $name); + if ($plugin === null) return; + + if ( + !$plugin->render($this->getFormat(), $this, $data) && + !$plugin->render('text', $this, $data) && + !$plugin->render('markdown', $this, $data) + ) { + // plugin does not support any of the text formats, so use stripped-down xhtml + $tmpData = $this->doc; + $this->doc = ''; + if ($plugin->render('xhtml', $this, $data) && ($this->doc !== '')) { + $pluginoutput = $this->doc; + $this->doc = $tmpData . DOKU_LF . trim(strip_tags($pluginoutput)) . DOKU_LF; + } else { + $this->doc = $tmpData; + } + } + } + + /** @inheritdoc */ + public function document_start() + { + global $ID; + + $this->doc = ''; + $metaheader = []; + $metaheader['Content-Type'] = 'text/plain; charset=utf-8'; + $meta = []; + $meta['format']['aichat'] = $metaheader; + p_set_metadata($ID, $meta); + } + + /** @inheritdoc */ + public function document_end() + { + $this->doc = preg_replace("/(\r?\n){3,}/", "\n\n", $this->doc); + $this->doc = ltrim($this->doc); // remove leading space and empty lines + } + + /** @inheritdoc */ + public function header($text, $level, $pos, $returnonly = false) + { + $this->doc .= str_repeat("#", $level) . ' ' . $text . DOKU_LF; + } + + /** @inheritdoc */ + public function section_open($level) + { + $this->doc .= DOKU_LF; + } + + /** @inheritdoc */ + public function section_close() + { + $this->doc .= DOKU_LF; + } + + /** @inheritdoc */ + public function cdata($text) + { + $this->doc .= $text; + } + + /** @inheritdoc */ + public function p_open() + { + $this->doc .= DOKU_LF; + } + + /** @inheritdoc */ + public function p_close() + { + $this->doc .= DOKU_LF; + } + + /** @inheritdoc */ + public function linebreak() + { + $this->doc .= DOKU_LF . DOKU_LF; + } + + /** @inheritdoc */ + public function hr() + { + $this->doc .= '----' . DOKU_LF; + } + + /** @inheritdoc */ + public function strong_open() + { + } + + /** @inheritdoc */ + public function strong_close() + { + } + + /** @inheritdoc */ + public function emphasis_open() + { + } + + /** @inheritdoc */ + public function emphasis_close() + { + } + + /** @inheritdoc */ + public function underline_open() + { + } + + /** @inheritdoc */ + public function underline_close() + { + } + + /** @inheritdoc */ + public function monospace_open() + { + } + + /** @inheritdoc */ + public function monospace_close() + { + } + + /** @inheritdoc */ + public function subscript_open() + { + } + + /** @inheritdoc */ + public function subscript_close() + { + } + + /** @inheritdoc */ + public function superscript_open() + { + } + + /** @inheritdoc */ + public function superscript_close() + { + } + + /** @inheritdoc */ + public function deleted_open() + { + } + + /** @inheritdoc */ + public function deleted_close() + { + } + + /** @inheritdoc */ + public function footnote_open() + { + $this->doc .= ' (('; + } + + /** @inheritdoc */ + public function footnote_close() + { + $this->doc .= '))'; + } + + /** @inheritdoc */ + public function listu_open($classes = null) + { + if ($this->listMode === []) { + $this->doc .= DOKU_LF; + } + $this->listMode[] = '*'; + } + + /** @inheritdoc */ + public function listu_close() + { + array_pop($this->listMode); + if ($this->listMode === []) { + $this->doc .= DOKU_LF; + } + } + + /** @inheritdoc */ + public function listo_open($classes = null) + { + if ($this->listMode === []) { + $this->doc .= DOKU_LF; + } + $this->listMode[] = '1.'; + } + + /** @inheritdoc */ + public function listo_close() + { + array_pop($this->listMode); + if ($this->listMode === []) { + $this->doc .= DOKU_LF; + } + } + + /** @inheritdoc */ + public function listitem_open($level, $node = false) + { + $this->doc .= str_repeat(' ', $level * 2) . $this->listMode[count($this->listMode) - 1]; + } + + /** @inheritdoc */ + public function listitem_close() + { + } + + + /** @inheritdoc */ + public function listcontent_open() + { + } + + /** @inheritdoc */ + public function listcontent_close() + { + $this->doc .= DOKU_LF; + } + + /** @inheritdoc */ + public function unformatted($text) + { + $this->doc .= $text; + } + + /** @inheritdoc */ + public function quote_open() + { + $this->doc .= '>>>'; + } + + /** @inheritdoc */ + public function quote_close() + { + $this->doc .= '<<<' . DOKU_LF; + } + + /** @inheritdoc */ + public function preformatted($text) + { + $this->code($text); + } + + /** @inheritdoc */ + public function file($text, $language = null, $filename = null, $options = null) + { + $this->code($text, $language, $filename, $options); + } + + /** @inheritdoc */ + public function code($text, $language = null, $filename = null, $options = null) + { + $this->doc .= DOKU_LF . '```' . ($language ?? '') . DOKU_LF . trim($text) . DOKU_LF . '```' . DOKU_LF; + } + + /** @inheritdoc */ + public function acronym($acronym) + { + if (array_key_exists($acronym, $this->acronyms)) { + $title = $this->acronyms[$acronym]; + $this->doc .= $acronym . ' (' . $title . ')'; + } else { + $this->doc .= $acronym; + } + } + + /** @inheritdoc */ + public function smiley($smiley) + { + $this->doc .= $smiley; + } + + /** @inheritdoc */ + public function entity($entity) + { + if (array_key_exists($entity, $this->entities)) { + $this->doc .= $this->entities[$entity]; + } else { + $this->doc .= $entity; + } + } + + /** @inheritdoc */ + public function multiplyentity($x, $y) + { + $this->doc .= $x . 'x' . $y; + } + + /** @inheritdoc */ + public function singlequoteopening() + { + global $lang; + $this->doc .= $lang['singlequoteopening']; + } + + /** @inheritdoc */ + public function singlequoteclosing() + { + global $lang; + $this->doc .= $lang['singlequoteclosing']; + } + + /** @inheritdoc */ + public function apostrophe() + { + global $lang; + $this->doc .= $lang['apostrophe']; + } + + /** @inheritdoc */ + public function doublequoteopening() + { + global $lang; + $this->doc .= $lang['doublequoteopening']; + } + + /** @inheritdoc */ + public function doublequoteclosing() + { + global $lang; + $this->doc .= $lang['doublequoteclosing']; + } + + /** @inheritdoc */ + public function camelcaselink($link, $returnonly = false) + { + $this->internallink($link, $link); + } + + /** @inheritdoc */ + public function locallink($hash, $name = null, $returnonly = false) + { + $name = $this->_getLinkTitle($name, $hash, $isImage); + $this->doc .= $name; + } + + /** @inheritdoc */ + public function internallink($id, $name = null, $search = null, $returnonly = false, $linktype = 'content') + { + global $ID; + // default name is based on $id as given + $default = $this->_simpleTitle($id); + $resolver = new PageResolver($ID); + $id = $resolver->resolveId($id); + + $name = $this->_getLinkTitle($name, $default, $isImage, $id, $linktype); + if ($returnonly) { + return $name; + } + $this->doc .= $name; + return null; + } + + /** @inheritdoc */ + public function externallink($url, $name = null, $returnonly = false) + { + $title = $this->_getLinkTitle($name, $url, $isImage); + if ($title != $url) { + $this->doc .= "[$title]($url)"; + } else { + $this->doc .= $title; + } + } + + /** @inheritdoc */ + public function interwikilink($match, $name, $wikiName, $wikiUri, $returnonly = false) + { + $this->doc .= $this->_getLinkTitle($name, $wikiUri, $isImage); + } + + /** @inheritdoc */ + public function windowssharelink($url, $name = null, $returnonly = false) + { + $this->doc .= $this->_getLinkTitle($name, $url, $isImage); + } + + /** @inheritdoc */ + public function emaillink($address, $name = null, $returnonly = false) + { + $name = $this->_getLinkTitle($name, '', $isImage); + $address = html_entity_decode(obfuscate($address), ENT_QUOTES, 'UTF-8'); + if (empty($name)) { + $name = $address; + } + $this->doc .= $name; + } + + /** @inheritdoc */ + public function internalmedia( + $src, + $title = null, + $align = null, + $width = null, + $height = null, + $cache = null, + $linking = null, + $return = false + ) { + $this->doc .= $title; + } + + /** @inheritdoc */ + public function externalmedia( + $src, + $title = null, + $align = null, + $width = null, + $height = null, + $cache = null, + $linking = null, + $return = false + ) { + $this->doc .= $title; + } + + /** @inheritdoc */ + public function rss($url, $params) + { + } + + /** @inheritdoc */ + public function table_open($maxcols = null, $numrows = null, $pos = null, $classes = null) + { + } + + /** @inheritdoc */ + public function table_close($pos = null) + { + $this->doc .= DOKU_LF; + } + + /** @inheritdoc */ + public function tablethead_open() + { + $this->tableColumns = 0; + $this->doc .= DOKU_LF; // . '|'; + } + + /** @inheritdoc */ + public function tablethead_close() + { + $this->doc .= '|' . str_repeat('---|', $this->tableColumns) . DOKU_LF; + } + + /** @inheritdoc */ + public function tabletbody_open() + { + } + + /** @inheritdoc */ + public function tabletbody_close() + { + } + + /** @inheritdoc */ + public function tabletfoot_open() + { + } + + /** @inheritdoc */ + public function tabletfoot_close() + { + } + + /** @inheritdoc */ + public function tablerow_open($classes = null) + { + } + + /** @inheritdoc */ + public function tablerow_close() + { + $this->doc .= '|' . DOKU_LF; + } + + /** @inheritdoc */ + public function tableheader_open($colspan = 1, $align = null, $rowspan = 1, $classes = null) + { + $this->doc .= str_repeat('|', $colspan); + $this->tableColumns += $colspan; + } + + /** @inheritdoc */ + public function tableheader_close() + { + } + + /** @inheritdoc */ + public function tablecell_open($colspan = 1, $align = null, $rowspan = 1, $classes = null) + { + $this->doc .= str_repeat('|', $colspan); + } + + /** @inheritdoc */ + public function tablecell_close() + { + } + + /** @inheritdoc */ + public function _getLinkTitle($title, $default, &$isImage, $id = null, $linktype = 'content') + { + $isImage = false; + if (is_array($title)) { + $isImage = true; + if (!is_null($default) && ($default != $title['title'])) + return $default . " " . $title['title']; + else return $title['title']; + } elseif (is_null($title) || trim($title) == '') { + if (useHeading($linktype) && $id) { + $heading = p_get_first_heading($id); + if ($heading) { + return $this->_xmlEntities($heading); + } + } + return $this->_xmlEntities($default); + } else { + return $this->_xmlEntities($title); + } + } + + /** @inheritdoc */ + public function _xmlEntities($string) + { + return $string; // nothing to do for text + } + + /** @inheritdoc */ + public function _formatLink($link) + { + if (!empty($link['name'])) { + return $link['name']; + } elseif (!empty($link['title'])) { + return $link['title']; + } + return $link['url']; + } +}