*/ if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/'); if ( !defined('DOKU_LF') ) { define ('DOKU_LF',"\n"); } if ( !defined('DOKU_TAB') ) { define ('DOKU_TAB',"\t"); } require_once DOKU_INC . 'inc/parser/renderer.php'; require_once DOKU_INC . 'inc/parser/xhtml.php'; /** * The Renderer * Provides plain text output for xml file input to Timeline app. */ class Doku_Renderer_plain extends Doku_Renderer_xhtml { var $base_url; function set_base_url($url) { $this->base_url = $url; } function getFormat() { return 'plain'; } function document_start() { } function document_end() { } function cdata($text) { $this->doc .= ' ' .$text . ' '; } function header($text, $level, $pos) { $this->doc .= DOKU_LF . $text . DOKU_LF; } function preformatted($text) { $this->doc .= ' ' . $text . ' '. DOKU_LF; } function file($text) { $this->doc .= ' ' . $text . ' '. DOKU_LF; } function p_open() { } function p_close() { } function code($text, $language = NULL) { $this->doc .= ' ' . $text . ' '. DOKU_LF; } function acronym($acronym) { $this->doc .= ' ' . $acronym . ' '; } function smiley($smiley) { $this->doc .= ' ' . $smiley . ' '; } function entity($entity) { $this->doc .= ' ' . $entity . ' '; } function camelcaselink($link) { $this->internallink($link,$link); } function locallink($hash, $name = NULL){ $this->doc .= ' ' . $hash . ' '; } function externallink($url, $name = NULL) { if ($name == NULL) $this->doc .= ' ' . html_entity_decode($url, ENT_NOQUOTES) . ' '; else $this->doc .= ' '.$name.' '; } function interwikilink($match, $name = NULL, $wikiName, $wikiUri) { $this->doc .= ' ' . $match . ' '; } function emaillink($address, $name = NULL) { $this->doc .= ' ' . $address . ' '; } function internalmedia ($src, $title=NULL, $align=NULL, $width=NULL, $height=NULL, $cache=NULL, $linking=NULL) { global $ID; list($src,$hash) = explode('#',$src,2); resolve_mediaid(getNS($ID),$src, $exists); $noLink = false; $render = ($linking == 'linkonly') ? false : true; $link = $this->getMediaLinkConf($src, $title, $align, $width, $height, $cache, $render); list($ext,$mime,$dl) = mimetype($src,false); if($hash) $link['url'] .= '#'.$hash; //output formatted $this->doc .= $link['name']; } function externalmedia ($src, $title=NULL, $align=NULL, $width=NULL, $height=NULL, $cache=NULL, $linking=NULL) { $this->doc .= ' ' . $src . ' '; } function internallink($id, $name = NULL, $search=NULL,$returnonly=false) { global $conf; global $ID; $default = $id; // now first resolve and clean up the $id resolve_pageid(getNS($ID),$id,$exists); $name = $this->_getLinkTitle($name, $default, $isImage, $id); if ( !$isImage ) { $class='wikilink1'; } else { $class='media'; } // don't keep hash anchor $hash = ""; //prepare for formating $link['target'] = $conf['target']['wiki']; $link['style'] = ''; $link['pre'] = ''; $link['suf'] = ''; // highlight link to current page if ($id == $ID) { $link['pre'] = ''; $link['suf'] = ''; } $link['more'] = ''; $link['class'] = $class; // make links if ($class = 'wikilink2') { $link['url'] = $this->base_url . $id; } else { $link['url'] = $this->base_url . $id; } $link['name'] = $name; $link['title'] = $id; //add search string if($search){ ($conf['userewrite']) ? $link['url'].='?s=' : $link['url'].='&s='; $link['url'] .= rawurlencode($search); } //keep hash if($hash) $link['url'].='#'.$hash; //output formatted if($returnonly){ return $this->_formatLink($link); }else{ $this->doc .= $this->_formatLink($link); } } //---------------------------------------------------------- // Utils /** * _getMediaLinkConf is a helperfunction to internalmedia() and externalmedia() * which returns a basic link to a media. * * @author Pierre Spring * @author Tom Cafferty * @param string $src * @param string $title * @param string $align * @param string $width * @param string $height * @param string $cache * @param string $render * @access protected * @return array */ function getMediaLinkConf($src, $title, $align, $width, $height, $cache, $render) { global $conf; $link = array(); $link['class'] = ''; $link['style'] = ''; $link['pre'] = ''; $link['suf'] = ''; $link['more'] = ''; $link['target'] = ''; $link['name'] = $this->timelineMedia($src, $title, $align, $width, $height, $cache, $render); return $link; } /** * Renders internal and external media * * @author Andreas Gohr * @author Tom Caferty */ function timelineMedia ($src, $title=NULL, $align=NULL, $width=NULL, $height=NULL, $cache=NULL, $render = true) { $ret = ''; list($ext,$mime,$dl) = mimetype($src); if(substr($mime,0,5) == 'image'){ // first get the $title if (!is_null($title)) { $title = $this->_xmlEntities($title); }elseif($ext == 'jpg' || $ext == 'jpeg'){ //try to use the caption from IPTC/EXIF require_once(DOKU_INC.'inc/JpegMeta.php'); $jpeg =new JpegMeta(mediaFN($src)); if($jpeg !== false) $cap = $jpeg->getTitle(); if($cap){ $title = $this->_xmlEntities($cap); } } if (!$render) { // if the picture is not supposed to be rendered // return the title of the picture if (!$title) { // just show the sourcename $title = $this->_xmlEntities(basename(noNS($src))); } return $title; } //add image tag $ret .= 'image="'.ml($src,array('w'=>$width,'h'=>$height,'cache'=>$cache)).'"'; // make left/right alignment for no-CSS view work (feeds) if($align == 'right') $ret .= ' align="right"'; if($align == 'left') $ret .= ' align="left"'; if ($title) $ret .= ' title="' . $title . '"'; if ( !is_null($width) ) $ret .= ' width="'.$this->_xmlEntities($width).'"'; if ( !is_null($height) ) $ret .= ' height="'.$this->_xmlEntities($height).'"'; }elseif($mime == 'application/x-shockwave-flash'){ if (!$render) { // if the flash is not supposed to be rendered // return the title of the flash if (!$title) { // just show the sourcename $title = basename(noNS($src)); } return $this->_xmlEntities($title); } $att = array(); $att['class'] = "media$align"; if($align == 'right') $att['align'] = 'right'; if($align == 'left') $att['align'] = 'left'; $ret .= html_flashobject(ml($src,array('cache'=>$cache),true,'&'),$width,$height, array('quality' => 'high'), null, $att, $this->_xmlEntities($title)); }elseif($title){ // well at least we have a title to display $ret .= $this->_xmlEntities($title); }else{ // just show the sourcename $ret .= $this->_xmlEntities(basename(noNS($src))); } return $ret; } }