17d101cc1SGerry Weißbach<?php 27d101cc1SGerry Weißbach/** 37d101cc1SGerry Weißbach * Render Plugin for XHTML without details link for internal images. 47d101cc1SGerry Weißbach * 57d101cc1SGerry Weißbach * @author i-net software <tools@inetsoftware.de> 64b73700eSGerry Weißbach * @author Gerry Weissbach <gweissbach@inetsoftware.de> 77d101cc1SGerry Weißbach */ 87d101cc1SGerry Weißbach 97d101cc1SGerry Weißbachif (!defined('DOKU_INC')) die(); 107d101cc1SGerry Weißbachif (!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN', DOKU_INC . 'lib/plugins/'); 117d101cc1SGerry Weißbach 127d101cc1SGerry Weißbachrequire_once DOKU_INC . 'inc/parser/xhtml.php'; 137d101cc1SGerry Weißbach 147d101cc1SGerry Weißbach/** 157d101cc1SGerry Weißbach * The Renderer 167d101cc1SGerry Weißbach */ 177d101cc1SGerry Weißbachclass renderer_plugin_siteexport_pdf extends Doku_Renderer_xhtml { 187d101cc1SGerry Weißbach 19d98cce67SGerry Weißbach public $acronymsExchanged = null; 207d101cc1SGerry Weißbach 21d98cce67SGerry Weißbach private $hasSeenHeader = false; 22d98cce67SGerry Weißbach 23d98cce67SGerry Weißbach private $currentLevel = 0; 24d98cce67SGerry Weißbach 25d98cce67SGerry Weißbach public $levels = array( '======'=>1, 267d101cc1SGerry Weißbach '====='=>2, 277d101cc1SGerry Weißbach '===='=>3, 287d101cc1SGerry Weißbach '==='=>4, 29d98cce67SGerry Weißbach '=='=>5 30d98cce67SGerry Weißbach ); 317d101cc1SGerry Weißbach 32d98cce67SGerry Weißbach public $info = array( 337d101cc1SGerry Weißbach 'cache' => true, // may the rendered result cached? 347d101cc1SGerry Weißbach 'toc' => true, // render the TOC? 357d101cc1SGerry Weißbach 'forceTOC' => false, // shall I force the TOC? 367d101cc1SGerry Weißbach 'scriptmode' => false, // In scriptmode, some tags will not be encoded => '<%', '%>' 377d101cc1SGerry Weißbach ); 387d101cc1SGerry Weißbach 39d98cce67SGerry Weißbach public $headingCount = array( 1=>0, 407d101cc1SGerry Weißbach 2=>0, 417d101cc1SGerry Weißbach 3=>0, 427d101cc1SGerry Weißbach 4=>0, 43d98cce67SGerry Weißbach 5=>0 44d98cce67SGerry Weißbach ); 457d101cc1SGerry Weißbach 46a8c17ab5Si-net /// software public function document_start() { 477d101cc1SGerry Weißbach global $TOC, $ID, $INFO; 487d101cc1SGerry Weißbach 497d101cc1SGerry Weißbach parent::document_start(); 507d101cc1SGerry Weißbach 517d101cc1SGerry Weißbach // Cheating in again 527d101cc1SGerry Weißbach $newMeta = p_get_metadata($ID, 'description tableofcontents', false); // 2010-10-23 This should be save to use 537d101cc1SGerry Weißbach if (!empty($newMeta) && count($newMeta) > 1) { 547d101cc1SGerry Weißbach // $TOC = $this->toc = $newMeta; // 2010-08-23 doubled the TOC 557d101cc1SGerry Weißbach $TOC = $newMeta; 567d101cc1SGerry Weißbach } 577d101cc1SGerry Weißbach } 587d101cc1SGerry Weißbach 59a8c17ab5Si-net /// software public function document_end() { 607d101cc1SGerry Weißbach 617d101cc1SGerry Weißbach parent::document_end(); 627d101cc1SGerry Weißbach 637d101cc1SGerry Weißbach // Prepare the TOC 647d101cc1SGerry Weißbach global $TOC, $ID; 657d101cc1SGerry Weißbach $meta = array(); 667d101cc1SGerry Weißbach 677d101cc1SGerry Weißbach // NOTOC, and no forceTOC 687d101cc1SGerry Weißbach if ($this->info['toc'] === false && !($this->info['forceTOC'] || $this->meta['forceTOC'])) { 697d101cc1SGerry Weißbach $TOC = $this->toc = array(); 707d101cc1SGerry Weißbach $meta['internal']['toc'] = false; 717d101cc1SGerry Weißbach $meta['description']['tableofcontents'] = array(); 727d101cc1SGerry Weißbach $meta['forceTOC'] = false; 737d101cc1SGerry Weißbach 747d101cc1SGerry Weißbach } else if ($this->info['forceTOC'] || $this->meta['forceTOC'] || (utf8_strlen(strip_tags($this->doc)) >= $this->getConf('documentlengthfortoc') && count($this->toc) > 1)) { 757d101cc1SGerry Weißbach $TOC = $this->toc; 767d101cc1SGerry Weißbach // This is a little bit like cheating ... but this will force the TOC into the metadata 777d101cc1SGerry Weißbach $meta = array(); 787d101cc1SGerry Weißbach $meta['internal']['toc'] = true; 797d101cc1SGerry Weißbach $meta['forceTOC'] = $this->info['forceTOC'] || $this->meta['forceTOC']; 807d101cc1SGerry Weißbach $meta['description']['tableofcontents'] = $TOC; 817d101cc1SGerry Weißbach } 827d101cc1SGerry Weißbach 837d101cc1SGerry Weißbach // allways write new metadata 847d101cc1SGerry Weißbach p_set_metadata($ID, $meta); 857d101cc1SGerry Weißbach $this->doc = preg_replace('#<p( class=".*?")?>\s*</p>#', '', $this->doc); 867d101cc1SGerry Weißbach } 877d101cc1SGerry Weißbach 88a8c17ab5Si-net /// software public function header($text, $level, $pos) { 897d101cc1SGerry Weißbach global $conf; 907d101cc1SGerry Weißbach global $ID; 917d101cc1SGerry Weißbach global $INFO; 927d101cc1SGerry Weißbach 937d101cc1SGerry Weißbach if ($text) 947d101cc1SGerry Weißbach { 957d101cc1SGerry Weißbach $hid = $this->_headerToLink($text, true); 967d101cc1SGerry Weißbach 977d101cc1SGerry Weißbach //only add items within configured levels 987d101cc1SGerry Weißbach $this->toc_additem($hid, $text, $level); 997d101cc1SGerry Weißbach 1007d101cc1SGerry Weißbach // adjust $node to reflect hierarchy of levels 1017d101cc1SGerry Weißbach $this->node[$level-1]++; 1027d101cc1SGerry Weißbach if ($level < $this->lastlevel) { 1037d101cc1SGerry Weißbach for ($i = 0; $i < $this->lastlevel-$level; $i++) { 1047d101cc1SGerry Weißbach $this->node[$this->lastlevel-$i-1] = 0; 1057d101cc1SGerry Weißbach } 1067d101cc1SGerry Weißbach } 1077d101cc1SGerry Weißbach $this->lastlevel = $level; 1087d101cc1SGerry Weißbach 1097d101cc1SGerry Weißbach /* There should be no class for "sectioneditX" if there is no edit perm */ 1107d101cc1SGerry Weißbach if ($INFO['perm'] > AUTH_READ && 1117d101cc1SGerry Weißbach $level <= $conf['maxseclevel'] && 1127d101cc1SGerry Weißbach count($this->sectionedits) > 0 && 1137d101cc1SGerry Weißbach $this->sectionedits[count($this->sectionedits)-1][2] === 'section') { 1147d101cc1SGerry Weißbach $this->finishSectionEdit($pos-1); 1157d101cc1SGerry Weißbach } 1167d101cc1SGerry Weißbach 1177d101cc1SGerry Weißbach $headingNumber = ''; 1187d101cc1SGerry Weißbach $useNumbered = p_get_metadata($ID, 'usenumberedheading', true); // 2011-02-07 This should be save to use 1197d101cc1SGerry Weißbach if ($this->getConf('usenumberedheading') || !empty($useNumbered) || !empty($INFO['meta']['usenumberedheading']) || isset($_REQUEST['usenumberedheading'])) { 1207d101cc1SGerry Weißbach 1217d101cc1SGerry Weißbach // increment the number of the heading 1227d101cc1SGerry Weißbach $this->headingCount[$level]++; 1237d101cc1SGerry Weißbach 1247d101cc1SGerry Weißbach // build the actual number 1257d101cc1SGerry Weißbach for ($i = 1; $i <= 5; $i++) { 1267d101cc1SGerry Weißbach 1277d101cc1SGerry Weißbach // reset the number of the subheadings 1287d101cc1SGerry Weißbach if ($i > $level) { 1297d101cc1SGerry Weißbach $this->headingCount[$i] = 0; 1307d101cc1SGerry Weißbach } 1317d101cc1SGerry Weißbach 1327d101cc1SGerry Weißbach // build the number of the heading 1337d101cc1SGerry Weißbach $headingNumber .= $this->headingCount[$i] . '.'; 1347d101cc1SGerry Weißbach } 1357d101cc1SGerry Weißbach 1367d101cc1SGerry Weißbach $headingNumber = preg_replace("/(\.0)+\.?$/", '', $headingNumber) . ' '; 1377d101cc1SGerry Weißbach } 1387d101cc1SGerry Weißbach 1397d101cc1SGerry Weißbach // write the header 1407d101cc1SGerry Weißbach $this->doc .= DOKU_LF.'<h'.$level; 1417ddc12e6SGerry Weißbach $class = array(); 1427d101cc1SGerry Weißbach if ($INFO['perm'] > AUTH_READ && 1437d101cc1SGerry Weißbach $level <= $conf['maxseclevel']) { 1447ddc12e6SGerry Weißbach $class[] = $this->startSectionEdit($pos, 'section', $text); 1457ddc12e6SGerry Weißbach } 1467ddc12e6SGerry Weißbach 1477ddc12e6SGerry Weißbach if ( !empty($headingNumber) ) { 1487ddc12e6SGerry Weißbach $class[] = 'level' . trim($headingNumber); 14927045e12SGerry Weißbach if ( intval($headingNumber) > 1 ) { 1507ddc12e6SGerry Weißbach $class[] = 'notfirst'; 1517ddc12e6SGerry Weißbach } else { 1527ddc12e6SGerry Weißbach $class[] = 'first'; 1537ddc12e6SGerry Weißbach } 1547ddc12e6SGerry Weißbach } 1557ddc12e6SGerry Weißbach 1567ddc12e6SGerry Weißbach if ( !empty($class) ) { 1577ddc12e6SGerry Weißbach $this->doc .= ' class="' . implode(' ', $class) . '"'; 1587d101cc1SGerry Weißbach } 1597d101cc1SGerry Weißbach 1607d101cc1SGerry Weißbach $this->doc .= '><a name="'.$hid.'" id="'.$hid.'">'; 1617d101cc1SGerry Weißbach $this->doc .= $this->_xmlEntities($headingNumber . $text); 1627d101cc1SGerry Weißbach $this->doc .= "</a></h$level>".DOKU_LF; 1637d101cc1SGerry Weißbach 1647d101cc1SGerry Weißbach } else if ( $INFO['perm'] > AUTH_READ ) { 1657d101cc1SGerry Weißbach 166d98cce67SGerry Weißbach if ( $this->hasSeenHeader ) { 1670571ece2SScrutinizer Auto-Fixer $this->finishSectionEdit($pos); 1680571ece2SScrutinizer Auto-Fixer } 1697d101cc1SGerry Weißbach 1707d101cc1SGerry Weißbach // write the header 1717d101cc1SGerry Weißbach $name = rand() . $level; 1727d101cc1SGerry Weißbach $this->doc .= DOKU_LF.'<a name="'. $this->startSectionEdit($pos, 'section_empty', $name) .'" class="' . $this->startSectionEdit($pos, 'section_empty', $name) . '" ></a>'.DOKU_LF; 1737d101cc1SGerry Weißbach } 1747d101cc1SGerry Weißbach 175d98cce67SGerry Weißbach $this->hasSeenHeader = true; 1767d101cc1SGerry Weißbach } 1777d101cc1SGerry Weißbach 178a8c17ab5Si-net /// software public function section_open($level) { 1797d101cc1SGerry Weißbach $this->currentLevel = $level; 1800931afc2SGerry Weißbach parent::section_open($level); 1817d101cc1SGerry Weißbach } 1827d101cc1SGerry Weißbach 183a8c17ab5Si-net /// software public function p_open() { 1847d101cc1SGerry Weißbach $this->doc .= DOKU_LF . '<p class="level' . $this->currentLevel . '">' . DOKU_LF; 1857d101cc1SGerry Weißbach } 1867d101cc1SGerry Weißbach 187a8c17ab5Si-net /// software public function listu_open($classes = null) { 1887d101cc1SGerry Weißbach $this->doc .= '<ul class="level' . $this->currentLevel . '">' . DOKU_LF; 1897d101cc1SGerry Weißbach } 1907d101cc1SGerry Weißbach 191a8c17ab5Si-net /// software public function listo_open($classes = null) { 1927d101cc1SGerry Weißbach $this->doc .= '<ol class="level' . $this->currentLevel . '">' . DOKU_LF; 1937d101cc1SGerry Weißbach } 1947d101cc1SGerry Weißbach 19551f261b6SGerry Weißbach public function finishSectionEdit($end = null, $hid = null) { 196caa704ffSGerry Weißbach return ''; 1977d101cc1SGerry Weißbach } 1987d101cc1SGerry Weißbach 1990571ece2SScrutinizer Auto-Fixer /** 2000571ece2SScrutinizer Auto-Fixer * @param string $type 2010571ece2SScrutinizer Auto-Fixer */ 20251f261b6SGerry Weißbach public function startSectionEdit($start, $type, $title = null, $hid = null) { 20333645ffbSGerry Weißbach return ''; 2047d101cc1SGerry Weißbach } 2057d101cc1SGerry Weißbach 2066792d0cfSGerry Weißbach /** 2076792d0cfSGerry Weißbach * Wrap centered media in a div to center it 2086792d0cfSGerry Weißbach */ 209a8c17ab5Si-net /// software public function _media ($src, $title=NULL, $align=NULL, $width=NULL, 2106792d0cfSGerry Weißbach $height=NULL, $cache=NULL, $render = true) { 2116792d0cfSGerry Weißbach 2126792d0cfSGerry Weißbach $out = ''; 2136792d0cfSGerry Weißbach if($align == 'center'){ 2146792d0cfSGerry Weißbach $out .= '<div align="center" style="text-align: center">'; 2156792d0cfSGerry Weißbach } 2166792d0cfSGerry Weißbach 2176792d0cfSGerry Weißbach $out .= parent::_media ($src, $title, $align, $width, $height, $cache, $render); 2186792d0cfSGerry Weißbach 2196792d0cfSGerry Weißbach if($align == 'center'){ 2206792d0cfSGerry Weißbach $out .= '</div>'; 2216792d0cfSGerry Weißbach } 2226792d0cfSGerry Weißbach 2236792d0cfSGerry Weißbach return $out; 2246792d0cfSGerry Weißbach } 2256792d0cfSGerry Weißbach 226a8c17ab5Si-net /// software public function internalmedia($src, $title = NULL, $align = NULL, $width = NULL, $height = NULL, $cache = NULL, $linking = NULL, $return = false) { 2277d101cc1SGerry Weißbach global $ID; 2287d101cc1SGerry Weißbach list($src,$hash) = explode('#',$src,2); 2297d101cc1SGerry Weißbach resolve_mediaid(getNS($ID),$src, $exists); 2307d101cc1SGerry Weißbach 2317d101cc1SGerry Weißbach $noLink = false; 2327d101cc1SGerry Weißbach $render = ($linking == 'linkonly') ? false : true; 2337d101cc1SGerry Weißbach $link = $this->_getMediaLinkConf($src, $title, $align, $width, $height, $cache, $render); 2347d101cc1SGerry Weißbach 2357d101cc1SGerry Weißbach list($ext,$mime,$dl) = mimetype($src); 2367d101cc1SGerry Weißbach if(substr($mime,0,5) == 'image' && $render){ 2377d101cc1SGerry Weißbach $link['url'] = ml($src,array('id'=>$ID,'cache'=>$cache),($linking=='direct')); 2387d101cc1SGerry Weißbach if ( substr($mime,0,5) == 'image' && $linking='details' ) { $noLink = true;} 2397d101cc1SGerry Weißbach } elseif($mime == 'application/x-shockwave-flash' && $render){ 2407d101cc1SGerry Weißbach // don't link flash movies 2417d101cc1SGerry Weißbach $noLink = true; 2427d101cc1SGerry Weißbach } else{ 2437d101cc1SGerry Weißbach // add file icons 2447d101cc1SGerry Weißbach $class = preg_replace('/[^_\-a-z0-9]+/i','_',$ext); 2457d101cc1SGerry Weißbach $link['class'] .= ' mediafile mf_'.$class; 2467d101cc1SGerry Weißbach $link['url'] = ml($src,array('id'=>$ID,'cache'=>$cache),true); 2477d101cc1SGerry Weißbach } 2487d101cc1SGerry Weißbach 2490571ece2SScrutinizer Auto-Fixer if($hash) { 2500571ece2SScrutinizer Auto-Fixer $link['url'] .= '#'.$hash; 2510571ece2SScrutinizer Auto-Fixer } 2527d101cc1SGerry Weißbach 2537d101cc1SGerry Weißbach //markup non existing files 2540571ece2SScrutinizer Auto-Fixer if (!$exists) { 2557d101cc1SGerry Weißbach $link['class'] .= ' wikilink2'; 2560571ece2SScrutinizer Auto-Fixer } 2577d101cc1SGerry Weißbach 2587d101cc1SGerry Weißbach //output formatted 2590571ece2SScrutinizer Auto-Fixer if ($linking == 'nolink' || $noLink) { 2600571ece2SScrutinizer Auto-Fixer $this->doc .= $link['name']; 2610571ece2SScrutinizer Auto-Fixer } else { 2620571ece2SScrutinizer Auto-Fixer $this->doc .= $this->_formatLink($link); 2630571ece2SScrutinizer Auto-Fixer } 2647d101cc1SGerry Weißbach } 2657d101cc1SGerry Weißbach 2667d101cc1SGerry Weißbach /** 2677d101cc1SGerry Weißbach * Render an internal Wiki Link 2687d101cc1SGerry Weißbach * 2697d101cc1SGerry Weißbach * $search,$returnonly & $linktype are not for the renderer but are used 2707d101cc1SGerry Weißbach * elsewhere - no need to implement them in other renderers 2717d101cc1SGerry Weißbach * 2727d101cc1SGerry Weißbach * @author Andreas Gohr <andi@splitbrain.org> 2737d101cc1SGerry Weißbach */ 274a8c17ab5Si-net /// software public function internallink($id, $name = NULL, $search = NULL, $returnonly = false, $linktype = 'content') { 2757d101cc1SGerry Weißbach global $conf; 2767d101cc1SGerry Weißbach global $ID; 2777d101cc1SGerry Weißbach // default name is based on $id as given 2787d101cc1SGerry Weißbach $default = $this->_simpleTitle($id); 2797d101cc1SGerry Weißbach 2807d101cc1SGerry Weißbach // now first resolve and clean up the $id 2817d101cc1SGerry Weißbach resolve_pageid(getNS($ID), $id, $exists); 2827d101cc1SGerry Weißbach $name = $this->_getLinkTitle($name, $default, $isImage, $id, $linktype); 2837d101cc1SGerry Weißbach if (!$isImage) { 2847d101cc1SGerry Weißbach if ($exists) { 2857d101cc1SGerry Weißbach $class = 'wikilink1'; 2867d101cc1SGerry Weißbach } else { 2877d101cc1SGerry Weißbach $class = 'wikilink2'; 2887d101cc1SGerry Weißbach $link['rel'] = 'nofollow'; 2897d101cc1SGerry Weißbach } 2907d101cc1SGerry Weißbach } else { 2917d101cc1SGerry Weißbach $class = 'media'; 2927d101cc1SGerry Weißbach } 2937d101cc1SGerry Weißbach 2947d101cc1SGerry Weißbach //keep hash anchor 2957d101cc1SGerry Weißbach list($id, $hash) = explode('#', $id, 2); 2967d101cc1SGerry Weißbach if (!empty($hash)) $hash = $this->_headerToLink($hash); 2977d101cc1SGerry Weißbach 2987d101cc1SGerry Weißbach //prepare for formating 2997d101cc1SGerry Weißbach $link['target'] = $conf['target']['wiki']; 3007d101cc1SGerry Weißbach $link['style'] = ''; 3017d101cc1SGerry Weißbach $link['pre'] = ''; 3027d101cc1SGerry Weißbach $link['suf'] = ''; 3037d101cc1SGerry Weißbach // highlight link to current page 3047d101cc1SGerry Weißbach if ($id == $ID) { 3057d101cc1SGerry Weißbach $link['pre'] = '<span class="curid">'; 3067d101cc1SGerry Weißbach $link['suf'] = '</span>'; 3077d101cc1SGerry Weißbach } 3087d101cc1SGerry Weißbach $link['more'] = ''; 3097d101cc1SGerry Weißbach $link['class'] = $class; 3107d101cc1SGerry Weißbach $link['url'] = wl($id); 3117d101cc1SGerry Weißbach $link['name'] = $name; 3127d101cc1SGerry Weißbach $link['title'] = $this->_getLinkTitle(null, $default, $isImage, $id, $linktype); 3137d101cc1SGerry Weißbach 3147d101cc1SGerry Weißbach //add search string 3157d101cc1SGerry Weißbach if ($search) { 3167d101cc1SGerry Weißbach ($conf['userewrite']) ? $link['url'] .= '?' : $link['url'] .= '&'; 3177d101cc1SGerry Weißbach if (is_array($search)) { 3187d101cc1SGerry Weißbach $search = array_map('rawurlencode', $search); 3197d101cc1SGerry Weißbach $link['url'] .= 's[]=' . join('&s[]=', $search); 3207d101cc1SGerry Weißbach } else { 3217d101cc1SGerry Weißbach $link['url'] .= 's=' . rawurlencode($search); 3227d101cc1SGerry Weißbach } 3237d101cc1SGerry Weißbach } 3247d101cc1SGerry Weißbach 3257d101cc1SGerry Weißbach //keep hash 3267d101cc1SGerry Weißbach if ($hash) $link['url'] .= '#' . $hash; 3277d101cc1SGerry Weißbach 3287d101cc1SGerry Weißbach //output formatted 3297d101cc1SGerry Weißbach if ($returnonly) { 3307d101cc1SGerry Weißbach return $this->_formatLink($link); 3317d101cc1SGerry Weißbach } else { 3327d101cc1SGerry Weißbach $this->doc .= $this->_formatLink($link); 3337d101cc1SGerry Weißbach } 3347d101cc1SGerry Weißbach } 3357d101cc1SGerry Weißbach 336a8c17ab5Si-net /// software public function acronym($acronym) { 3377d101cc1SGerry Weißbach 3387d101cc1SGerry Weißbach if (empty($this->acronymsExchanged)) { 3397d101cc1SGerry Weißbach $this->acronymsExchanged = $this->acronyms; 3407d101cc1SGerry Weißbach $this->acronyms = array(); 3417d101cc1SGerry Weißbach 3427d101cc1SGerry Weißbach foreach ($this->acronymsExchanged as $key => $value) { 3437d101cc1SGerry Weißbach $this->acronyms[str_replace('_', ' ', $key)] = $value; 3447d101cc1SGerry Weißbach } 3457d101cc1SGerry Weißbach } 3467d101cc1SGerry Weißbach 3477d101cc1SGerry Weißbach parent::acronym($acronym); 3487d101cc1SGerry Weißbach } 3497d101cc1SGerry Weißbach 3500571ece2SScrutinizer Auto-Fixer /** 3510571ece2SScrutinizer Auto-Fixer * @param string $string 3520571ece2SScrutinizer Auto-Fixer */ 353a8c17ab5Si-net /// software public function _xmlEntities($string) { 3547d101cc1SGerry Weißbach 3557d101cc1SGerry Weißbach $string = parent::_xmlEntities($string); 356d32fa46eSGerry Weißbach $string = htmlentities($string, 8, 'UTF-8'); 357d32fa46eSGerry Weißbach $string = $this->superentities($string); 3587d101cc1SGerry Weißbach 3597d101cc1SGerry Weißbach if ($this->info['scriptmode']) { 3607d101cc1SGerry Weißbach $string = str_replace(array("<%", "%>", "<?", "?>"), 3617d101cc1SGerry Weißbach array("<%", "%>", "<?", "?>"), 3627d101cc1SGerry Weißbach $string); 3637d101cc1SGerry Weißbach } 3647d101cc1SGerry Weißbach 3657d101cc1SGerry Weißbach return $string; 3667d101cc1SGerry Weißbach } 3674a82723bSGerry Weißbach 368d32fa46eSGerry Weißbach // Unicode-proof htmlentities. 369d32fa46eSGerry Weißbach // Returns 'normal' chars as chars and weirdos as numeric html entites. 3700571ece2SScrutinizer Auto-Fixer 3710571ece2SScrutinizer Auto-Fixer /** 3720571ece2SScrutinizer Auto-Fixer * @param string $str 3730571ece2SScrutinizer Auto-Fixer */ 374a8c17ab5Si-net /// software public function superentities( $str ){ 375d32fa46eSGerry Weißbach // get rid of existing entities else double-escape 376d32fa46eSGerry Weißbach $str2 = ''; 377d32fa46eSGerry Weißbach $str = html_entity_decode(stripslashes($str),ENT_QUOTES,'UTF-8'); 378d32fa46eSGerry Weißbach $ar = preg_split('/(?<!^)(?!$)(?!\n)/u', $str ); // return array of every multi-byte character 379d32fa46eSGerry Weißbach foreach ($ar as $c){ 380d32fa46eSGerry Weißbach $o = ord($c); 381d32fa46eSGerry Weißbach if ( // (strlen($c) > 1) || /* multi-byte [unicode] */ 382d32fa46eSGerry Weißbach ($o > 127) // || /* <- control / latin weirdos -> */ 383d32fa46eSGerry Weißbach // ($o <32 || $o > 126) || /* <- control / latin weirdos -> */ 384d32fa46eSGerry Weißbach // ($o >33 && $o < 40) ||/* quotes + ambersand */ 385d32fa46eSGerry Weißbach // ($o >59 && $o < 63) /* html */ 386d32fa46eSGerry Weißbach 387d32fa46eSGerry Weißbach ) { 388d32fa46eSGerry Weißbach // convert to numeric entity 389d32fa46eSGerry Weißbach $c = mb_encode_numericentity($c, array(0x0, 0xffff, 0, 0xffff), 'UTF-8'); 390d32fa46eSGerry Weißbach } 391d32fa46eSGerry Weißbach $str2 .= $c; 392d32fa46eSGerry Weißbach } 393d32fa46eSGerry Weißbach return $str2; 394d32fa46eSGerry Weißbach } 395d32fa46eSGerry Weißbach 396a8c17ab5Si-net /// software public function preformatted($text) { 3973fa4cc5fSGerry Weißbach $this->doc .= '<div class="pre">'; 3983fa4cc5fSGerry Weißbach parent::preformatted($text); 3993fa4cc5fSGerry Weißbach $this->doc .= '</div>'; 4003fa4cc5fSGerry Weißbach } 4013fa4cc5fSGerry Weißbach 402*dca8f657SGerry Weißbach public function _highlight($type, $text, $language = NULL, $filename = NULL, $options = NULL) { 4033fa4cc5fSGerry Weißbach $this->doc .= '<div class="pre">'; 404*dca8f657SGerry Weißbach parent::_highlight($type, $text, $language, $filename, $options); 4053fa4cc5fSGerry Weißbach $this->doc .= '</div>'; 4063fa4cc5fSGerry Weißbach } 4073fa4cc5fSGerry Weißbach 4084a82723bSGerry Weißbach /** 4094a82723bSGerry Weißbach * API of the imagereference plugin 4104a82723bSGerry Weißbach * https://github.com/i-net-software/dokuwiki-plugin-imagereference 4114a82723bSGerry Weißbach * 4124a82723bSGerry Weißbach * Allows to specify special imagecaption tags that the renderer (mpdf) can use 4134a82723bSGerry Weißbach */ 4144a82723bSGerry Weißbach public function imageCaptionTags(&$imagereferenceplugin) 4154a82723bSGerry Weißbach { 4164a82723bSGerry Weißbach if ( !$imagereferenceplugin->accepts('table') ) { 4174a82723bSGerry Weißbach return array( '<figure id="%s" class="imgcaption%s">', // $captionStart 4184a82723bSGerry Weißbach '</figure>', // $captionEnd 4194a82723bSGerry Weißbach '<figcaption class="undercaption">', // $underCaptionStart 4204a82723bSGerry Weißbach '</figcaption>' // $underCaptionEnd 4214a82723bSGerry Weißbach ); 4224a82723bSGerry Weißbach } 4234a82723bSGerry Weißbach 4244a82723bSGerry Weißbach return null; 4254a82723bSGerry Weißbach } 426c8795a3cSGerry Weißbach 427c8795a3cSGerry Weißbach /** 428c8795a3cSGerry Weißbach * Render a page local link 429c8795a3cSGerry Weißbach * 430c8795a3cSGerry Weißbach * @param string $hash hash link identifier 431c8795a3cSGerry Weißbach * @param string $name name for the link 432c8795a3cSGerry Weißbach * @param bool $returnonly whether to return html or write to doc attribute 433c8795a3cSGerry Weißbach * @return void|string writes to doc attribute or returns html depends on $returnonly 434c8795a3cSGerry Weißbach */ 435a8c17ab5Si-net /// software public function locallink($hash, $name = null, $returnonly = false) { 436c8795a3cSGerry Weißbach global $ID; 437c8795a3cSGerry Weißbach $name = $this->_getLinkTitle($name, $hash, $isImage); 438c8795a3cSGerry Weißbach $hash = $this->_headerToLink($hash); 439c8795a3cSGerry Weißbach $title = $name; 440c8795a3cSGerry Weißbach 441c8795a3cSGerry Weißbach $doc = '<a href="#'.$hash.'" title="'.$title.'" class="wikilink1">'; 442c8795a3cSGerry Weißbach $doc .= $name; 443c8795a3cSGerry Weißbach $doc .= '</a>'; 444c8795a3cSGerry Weißbach 445c8795a3cSGerry Weißbach if($returnonly) { 446c8795a3cSGerry Weißbach return $doc; 447c8795a3cSGerry Weißbach } else { 448c8795a3cSGerry Weißbach $this->doc .= $doc; 449c8795a3cSGerry Weißbach } 450c8795a3cSGerry Weißbach } 4517d101cc1SGerry Weißbach} 4527d101cc1SGerry Weißbach 4537d101cc1SGerry Weißbach//Setup VIM: ex: et ts=4 enc=utf-8 : 454