diff --git a/inc/confutils.php b/inc/confutils.php index 4a38eeaacb2ebf1b597f8d13757f09494dd0225f..a0ad322fbd821a33e13eef2034b5f89c0ed754e6 100644 --- a/inc/confutils.php +++ b/inc/confutils.php @@ -98,7 +98,11 @@ function getInterwiki() { /** * Builds a hash from a configfile * + * If $lower is set to true all hash keys are converted to + * lower case. + * * @author Harry Fuecks <hfuecks@gmail.com> + * @author Andreas Gohr <andi@splitbrain.org> */ function confToHash($file,$lower=false) { $conf = array(); diff --git a/inc/format.php b/inc/format.php.bak similarity index 100% rename from inc/format.php rename to inc/format.php.bak diff --git a/inc/parser.php b/inc/parser.php.bak similarity index 100% rename from inc/parser.php rename to inc/parser.php.bak diff --git a/inc/parser/xhtml.php b/inc/parser/xhtml.php index 8f414c2d60d848e8628d40896fb8ffacfa9208c0..a132d4f4bc8d45f2d015162ca9a620884f2be86a 100644 --- a/inc/parser/xhtml.php +++ b/inc/parser/xhtml.php @@ -193,6 +193,15 @@ class Doku_Renderer_xhtml extends Doku_Renderer { $this->doc .= '</del>'; } + /** + * Callback for footnote start syntax + * + * All following content will go to the footnote instead of + * the document. To achive this the previous rendered content + * is moved to $store and $doc is cleared + * + * @author Andreas Gohr <andi@splitbrain.org> + */ function footnote_open() { $id = $this->_newFootnoteId(); $this->doc .= '<a href="#fn'.$id.'" name="fnt'.$id.'" class="fn_top">'.$id.')</a>'; @@ -206,17 +215,15 @@ class Doku_Renderer_xhtml extends Doku_Renderer { $this->doc .= $id.')</a> '.DOKU_LF; } + /** + * Callback for footnote end syntax + * + * All rendered content is moved to the $footnotes array and the old + * content is restored from $store again + * + * @author Andreas Gohr + */ function footnote_close() { - # $contents = ob_get_contents(); - # ob_end_clean(); - # $id = array_pop($this->footnoteIdStack); - - # $contents = '<div class="fn"><a href="#fnt'. - # $id.'" name="fn'.$id.'" class="fn_bot">'. - # $id.')</a> ' .DOKU_LF .$contents. "\n" . '</div>' . DOKU_LF; - # $this->footnotes[$id] = $contents; - - $this->doc .= '</div>' . DOKU_LF; // put recorded footnote into the stack and restore old content @@ -262,18 +269,27 @@ class Doku_Renderer_xhtml extends Doku_Renderer { } /** - */ + * Execute PHP code if allowed + * + * @author Andreas Gohr <andi@splitbrain.org> + */ function php($text) { global $conf; if($conf['phpok']){ + ob_start; eval($text); + $this->doc .= ob_get_contents(); + ob_end_clean; }else{ $this->file($text); } } /** - */ + * Insert HTML if allowed + * + * @author Andreas Gohr <andi@splitbrain.org> + */ function html($text) { global $conf; if($conf['htmlok']){ @@ -292,7 +308,7 @@ class Doku_Renderer_xhtml extends Doku_Renderer { } /** - * @TODO Shouldn't this output <blockquote?? + * @TODO Shouldn't this output <blockquote>? */ function quote_open() { $this->doc .= '<div class="quote">'.DOKU_LF; @@ -306,7 +322,12 @@ class Doku_Renderer_xhtml extends Doku_Renderer { } /** - */ + * Callback for code text + * + * Uses GeSHi to highlight language syntax + * + * @author Andreas Gohr <andi@splitbrain.org> + */ function code($text, $language = NULL) { global $conf; @@ -402,8 +423,12 @@ class Doku_Renderer_xhtml extends Doku_Renderer { } /** + * Render an internal Wiki Link + * * $search and $returnonly are not for the renderer but are used * elsewhere - no need to implement them in other renderers + * + * @author Andreas Gohr <andi@splitbrain.org> */ function internallink($id, $name = NULL, $search=NULL,$returnonly=false) { global $conf; @@ -548,35 +573,8 @@ class Doku_Renderer_xhtml extends Doku_Renderer { $this->doc .= $this->_formatLink($link); } - /* - * @deprecated not used!!! - * @TODO Correct the CSS class for files? (not windows) - * @TODO Remove hard coded URL to splitbrain.org - function filelink($link, $title = NULL) { - $this->doc .= '<a'; - - $title = $this->_getLinkTitle($title, $link, $isImage); - - if ( !$isImage ) { - $this->doc .= ' class="windows"'; - } else { - $this->doc .= ' class="media"'; - } - - $this->doc .= ' href="'.$this->_xmlEntities($link).'"'; - - $this->doc .= ' style="background: transparent url(http://wiki.splitbrain.org/images/windows.gif) 0px 1px no-repeat;"'; - - $this->doc .= ' onclick="return svchk()" onkeypress="return svchk()">'; - - $this->doc .= $title; - - $this->doc .= '</a>'; - } - */ - /** - */ + */ function windowssharelink($url, $name = NULL) { global $conf; global $lang; @@ -720,7 +718,7 @@ class Doku_Renderer_xhtml extends Doku_Renderer { } /** - * Renders an RSS feed using magpie + * Renders an RSS feed using Magpie * * @author Andreas Gohr <andi@splitbrain.org> */ @@ -752,71 +750,6 @@ class Doku_Renderer_xhtml extends Doku_Renderer { $this->doc .= '</ul>'; } - /** - * Renders internal and external media - * - * @author Andreas Gohr <andi@splitbrain.org> - * @todo handle center align - * @todo move to bottom - */ - function _media ($src, $title=NULL, $align=NULL, $width=NULL, - $height=NULL, $cache=NULL) { - - $ret = ''; - - list($ext,$mime) = mimetype($src); - if(substr($mime,0,5) == 'image'){ - //add image tag - $ret .= '<img src="'.DOKU_BASE.'fetch.php?w='.$width.'&h='.$height. - '&cache='.$cache.'&media='.urlencode($src).'"'; - - $ret .= ' class="media'.$align.'"'; - - if (!is_null($title)) { - $ret .= ' title="'.$this->_xmlEntities($title).'"'; - $ret .= ' alt="'.$this->_xmlEntities($title).'"'; - }else{ - $ret .= ' alt=""'; - } - - if ( !is_null($width) ) - $ret .= ' width="'.$this->_xmlEntities($width).'"'; - - if ( !is_null($height) ) - $ret .= ' height="'.$this->_xmlEntities($height).'"'; - - $ret .= ' />'; - - }elseif($mime == 'application/x-shockwave-flash'){ - //FIXME default to a higher flash version? - - $ret .= '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'. - ' codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0"'; - if ( !is_null($width) ) $ret .= ' width="'.$this->_xmlEntities($width).'"'; - if ( !is_null($height) ) $ret .= ' height="'.$this->_xmlEntities($height).'"'; - $ret .= '>'.DOKU_LF; - $ret .= '<param name="movie" value="'.DOKU_BASE.'fetch.php?media='.urlencode($src).'" />'.DOKU_LF; - $ret .= '<param name="quality" value="high" />'.DOKU_LF; - $ret .= '<embed src="'.DOKU_BASE.'fetch.php?media='.urlencode($src).'"'. - ' quality="high" bgcolor="#000000"'; - if ( !is_null($width) ) $ret .= ' width="'.$this->_xmlEntities($width).'"'; - if ( !is_null($height) ) $ret .= ' height="'.$this->_xmlEntities($height).'"'; - $ret .= ' type="application/x-shockwave-flash"'. - ' pluginspage="http://www.macromedia.com/shockwave/download/index.cgi'. - '?P1_Prod_Version=ShockwaveFlash"></embed>'.DOKU_LF; - $ret .= '</object>'.DOKU_LF; - - }elseif(!is_null($title)){ - // well at least we have a title to display - $ret .= $this->_xmlEntities($title); - }else{ - // just show the source - $ret .= $this->_xmlEntities($src); - } - - return $ret; - } - // $numrows not yet implemented function table_open($maxcols = NULL, $numrows = NULL){ $this->doc .= '<table class="inline">'.DOKU_LF; @@ -868,8 +801,9 @@ class Doku_Renderer_xhtml extends Doku_Renderer { // Utils /** - * Assembles all parts defined by the link formater below - * Returns HTML for the link + * Build a link + * + * Assembles all parts defined in $link returns HTML for the link * * @author Andreas Gohr <andi@splitbrain.org> */ @@ -913,6 +847,66 @@ class Doku_Renderer_xhtml extends Doku_Renderer { return preg_replace('!.*'.$nssep.'!','',$name); } + + /** + * Renders internal and external media + * + * @author Andreas Gohr <andi@splitbrain.org> + */ + function _media ($src, $title=NULL, $align=NULL, $width=NULL, + $height=NULL, $cache=NULL) { + + $ret = ''; + + list($ext,$mime) = mimetype($src); + if(substr($mime,0,5) == 'image'){ + //add image tag + $ret .= '<img src="'.DOKU_BASE.'fetch.php?w='.$width.'&h='.$height. + '&cache='.$cache.'&media='.urlencode($src).'"'; + + $ret .= ' class="media'.$align.'"'; + + if (!is_null($title)) { + $ret .= ' title="'.$this->_xmlEntities($title).'"'; + $ret .= ' alt="'.$this->_xmlEntities($title).'"'; + }else{ + $ret .= ' alt=""'; + } + + if ( !is_null($width) ) + $ret .= ' width="'.$this->_xmlEntities($width).'"'; + + if ( !is_null($height) ) + $ret .= ' height="'.$this->_xmlEntities($height).'"'; + + $ret .= ' />'; + + }elseif($mime == 'application/x-shockwave-flash'){ + $ret .= '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'. + ' codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"'; + if ( !is_null($width) ) $ret .= ' width="'.$this->_xmlEntities($width).'"'; + if ( !is_null($height) ) $ret .= ' height="'.$this->_xmlEntities($height).'"'; + $ret .= '>'.DOKU_LF; + $ret .= '<param name="movie" value="'.DOKU_BASE.'fetch.php?media='.urlencode($src).'" />'.DOKU_LF; + $ret .= '<param name="quality" value="high" />'.DOKU_LF; + $ret .= '<embed src="'.DOKU_BASE.'fetch.php?media='.urlencode($src).'"'. + ' quality="high"'; + if ( !is_null($width) ) $ret .= ' width="'.$this->_xmlEntities($width).'"'; + if ( !is_null($height) ) $ret .= ' height="'.$this->_xmlEntities($height).'"'; + $ret .= ' type="application/x-shockwave-flash"'. + ' pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>'.DOKU_LF; + $ret .= '</object>'.DOKU_LF; + + }elseif(!is_null($title)){ + // well at least we have a title to display + $ret .= $this->_xmlEntities($title); + }else{ + // just show the source + $ret .= $this->_xmlEntities($src); + } + + return $ret; + } function _newFootnoteId() { static $id = 1; @@ -929,16 +923,25 @@ class Doku_Renderer_xhtml extends Doku_Renderer { /** * Adds code for section editing button + * + * This is just aplaceholder and gets replace by the button if + * section editing is allowed + * + * @author Andreas Gohr <andi@splitbrain.org> */ function _secedit($f, $t){ $this->doc .= '<!-- SECTION ['.$f.'-'.$t.'] -->'; } - + + /** + * Construct a title and handle images in titles + * + * @author Harry Fuecks <harryf@gmail.com> + */ function _getLinkTitle($title, $default, & $isImage, $id=NULL) { global $conf; $isImage = FALSE; - if ( is_null($title) ) { if ($conf['useheading'] && $id) { $heading = p_get_first_heading($id); @@ -947,122 +950,28 @@ class Doku_Renderer_xhtml extends Doku_Renderer { } } return $this->_xmlEntities($default); - } else if ( is_string($title) ) { - return $this->_xmlEntities($title); - } else if ( is_array($title) ) { - $isImage = TRUE; return $this->_imageTitle($title); - } } /** - * @TODO Resolve namespace on internal images + * Returns an HTML code for images used in link titles + * + * @todo Resolve namespace on internal images + * @author Andreas Gohr <andi@splitbrain.org> */ function _imageTitle($img) { - - //FIXME resolve internal links - return $this->_media($img['src'], $img['title'], $img['align'], $img['width'], $img['height'], $img['cache']); - -/* - if ( $img['type'] == 'internalmedia' ) { - - // Resolve here... - if ( strpos($img['src'],':') ) { - $src = explode(':',$img['src']); - $src = $src[1]; - } else { - $src = $img['src']; - } - - $imgStr = '<img class="media" src="http://wiki.splitbrain.org/media/wiki/'.$this->_xmlEntities($src).'"'; - - } else { - - $imgStr = '<img class="media" src="'.$this->_xmlEntities($img['src']).'"'; - - } - - if ( !is_null($img['title']) ) { - $imgStr .= ' alt="'.$this->_xmlEntities($img['title']).'"'; - } else { - $imgStr .= ' alt=""'; - } - - if ( !is_null($img['align']) ) { - $imgStr .= ' align="'.$img['align'].'"'; - } - - if ( !is_null($img['width']) ) { - $imgStr .= ' width="'.$this->_xmlEntities($img['width']).'"'; - } - - if ( !is_null($img['height']) ) { - $imgStr .= ' height="'.$this->_xmlEntities($img['height']).'"'; - } - - $imgStr .= '/>'; - - return $imgStr; -*/ } } -/** -* Test whether there's an image to display with this interwiki link -*/ -function interwikiImgExists($name) { - - static $exists = array(); - - if ( array_key_exists($name,$exists) ) { - return $exists[$name]; - } - - if( @file_exists( DOKU. 'interwiki/'.$name.'.png') ) { - $exists[$name] = 'png'; - } else if ( @file_exists( DOKU . 'interwiki/'.$name.'.gif') ) { - $exists[$name] = 'gif'; - } else { - $exists[$name] = FALSE; - } - - return $exists[$name]; -} - -/** - * For determining whether to use CSS class "wikilink1" or "wikilink2" - * @todo use configinstead of DOKU_DATA - * @deprecated -> resolve_pagename should be used - */ -function wikiPageExists($name) { -msg("deprecated wikiPageExists called",-1); - static $pages = array(); - - if ( array_key_exists($name,$pages) ) { - return $pages[$name]; - } - - $file = str_replace(':','/',$name).'.txt'; - - if ( @file_exists( DOKU_DATA . $file ) ) { - $pages[$name] = TRUE; - } else { - $pages[$name] = FALSE; - } - - return $pages[$name]; -} - - //Setup VIM: ex: et ts=4 enc=utf-8 : diff --git a/inc/parserutils.php b/inc/parserutils.php index 3c7803b162e966b3397771ef2d437c7431bbbbbd..4f90364aaa60fe463f1f8f91972eca31be46caaf 100644 --- a/inc/parserutils.php +++ b/inc/parserutils.php @@ -256,7 +256,6 @@ function p_render($mode,$instructions){ * * @author Jan Decaluwe <jan@jandecaluwe.com> */ - function p_get_first_heading($id){ $file = wikiFN($id); if (@file_exists($file)) {