[ Index ]
 

Code source de DokuWiki 2006-11-06

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/inc/parser/ -> metadata.php (source)

   1  <?php
   2  /**
   3   * Renderer for metadata
   4   *
   5   * @author Esther Brunner <wikidesign@gmail.com>
   6   */
   7  
   8  if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
   9  
  10  if ( !defined('DOKU_LF') ) {
  11      // Some whitespace to help View > Source
  12      define ('DOKU_LF',"\n");
  13  }
  14  
  15  if ( !defined('DOKU_TAB') ) {
  16      // Some whitespace to help View > Source
  17      define ('DOKU_TAB',"\t");
  18  }
  19  
  20  require_once  DOKU_INC . 'inc/parser/renderer.php';
  21  
  22  /**
  23   * The Renderer
  24   */
  25  class Doku_Renderer_metadata extends Doku_Renderer {
  26  
  27    var $doc  = '';
  28    var $meta = array();
  29  
  30    var $headers = array();
  31    var $capture = true;
  32    var $store   = '';
  33  
  34    function document_start(){
  35      //reset some variables
  36      $this->meta['title'] = '';
  37      $this->meta['description']['abstract'] = '';
  38      $this->meta['description']['tableofcontents'] = array();
  39      $this->meta['relation']['haspart'] = array();
  40      $this->meta['relation']['references'] = array();
  41          $this->meta['date']['valid'] = array();
  42      $this->headers = array();
  43    }
  44  
  45    function document_end(){
  46      if (!$this->meta['description']['abstract']){
  47        // cut off too long abstracts
  48        $this->doc = trim($this->doc);
  49        if (strlen($this->doc) > 500)
  50          $this->doc = substr($this->doc, 0, 500).'…';
  51        $this->meta['description']['abstract'] = $this->doc;
  52      }
  53    }
  54  
  55    function header($text, $level, $pos) {
  56      global $conf;
  57  
  58      if (!$this->meta['title']) $this->meta['title'] = $text;
  59  
  60      // create a unique header id
  61      $hid = $this->_headerToLink($text,'true');
  62  
  63      //handle TOC
  64      if($level >= $conf['toptoclevel'] && $level <= $conf['maxtoclevel']){
  65        // the TOC is one of our standard ul list arrays ;-)
  66        $this->meta['description']['tableofcontents'][] = array(
  67          'hid'   => $hid,
  68          'title' => $text,
  69          'type'  => 'ul',
  70          'level' => $level-$conf['toptoclevel']+1
  71        );
  72      }
  73  
  74      // add to summary
  75      if ($this->capture && ($level > 1)) $this->doc .= DOKU_LF.$text.DOKU_LF;
  76    }
  77  
  78    function section_open($level){}
  79    function section_close(){}
  80  
  81    function cdata($text){
  82      if ($this->capture) $this->doc .= $text;
  83    }
  84  
  85    function p_open(){
  86      if ($this->capture) $this->doc .= DOKU_LF;
  87    }
  88  
  89    function p_close(){
  90      if ($this->capture){
  91        if (strlen($this->doc) > 250) $this->capture = false;
  92        else $this->doc .= DOKU_LF;
  93      }
  94    }
  95  
  96    function linebreak(){
  97      if ($this->capture) $this->doc .= DOKU_LF;
  98    }
  99  
 100    function hr(){
 101      if ($this->capture){
 102        if (strlen($this->doc) > 250) $this->capture = false;
 103        else $this->doc .= DOKU_LF.'----------'.DOKU_LF;
 104      }
 105    }
 106  
 107    function strong_open(){}
 108    function strong_close(){}
 109  
 110    function emphasis_open(){}
 111    function emphasis_close(){}
 112  
 113    function underline_open(){}
 114    function underline_close(){}
 115  
 116    function monospace_open(){}
 117    function monospace_close(){}
 118  
 119    function subscript_open(){}
 120    function subscript_close(){}
 121  
 122    function superscript_open(){}
 123    function superscript_close(){}
 124  
 125    function deleted_open(){}
 126    function deleted_close(){}
 127  
 128    /**
 129     * Callback for footnote start syntax
 130     *
 131     * All following content will go to the footnote instead of
 132     * the document. To achieve this the previous rendered content
 133     * is moved to $store and $doc is cleared
 134     *
 135     * @author Andreas Gohr <andi@splitbrain.org>
 136     */
 137    function footnote_open() {
 138      if ($this->capture){
 139        // move current content to store and record footnote
 140        $this->store = $this->doc;
 141        $this->doc   = '';
 142      }
 143    }
 144  
 145    /**
 146     * Callback for footnote end syntax
 147     *
 148     * All rendered content is moved to the $footnotes array and the old
 149     * content is restored from $store again
 150     *
 151     * @author Andreas Gohr
 152     */
 153    function footnote_close() {
 154      if ($this->capture){
 155        // restore old content
 156        $this->doc = $this->store;
 157        $this->store = '';
 158      }
 159    }
 160  
 161    function listu_open(){
 162      if ($this->capture) $this->doc .= DOKU_LF;
 163    }
 164  
 165    function listu_close(){
 166      if ($this->capture && (strlen($this->doc) > 250)) $this->capture = false;
 167    }
 168  
 169    function listo_open(){
 170      if ($this->capture) $this->doc .= DOKU_LF;
 171    }
 172  
 173    function listo_close(){
 174      if ($this->capture && (strlen($this->doc) > 250)) $this->capture = false;
 175    }
 176  
 177    function listitem_open($level){
 178      if ($this->capture) $this->doc .= str_repeat(DOKU_TAB, $level).'* ';
 179    }
 180  
 181    function listitem_close(){
 182      if ($this->capture) $this->doc .= DOKU_LF;
 183    }
 184  
 185    function listcontent_open(){}
 186    function listcontent_close(){}
 187  
 188    function unformatted($text){
 189      if ($this->capture) $this->doc .= $text;
 190    }
 191  
 192    function php($text){}
 193  
 194    function html($text){}
 195  
 196    function preformatted($text){
 197      if ($this->capture) $this->doc .= $text;
 198    }
 199  
 200    function file($text){
 201      if ($this->capture){
 202        $this->doc .= DOKU_LF.$text;
 203        if (strlen($this->doc) > 250) $this->capture = false;
 204        else $this->doc .= DOKU_LF;
 205      }
 206    }
 207  
 208    function quote_open(){
 209      if ($this->capture) $this->doc .= DOKU_LF.DOKU_TAB.'“';
 210    }
 211  
 212    function quote_close(){
 213      if ($this->capture){
 214        $this->doc .= 'â€';
 215        if (strlen($this->doc) > 250) $this->capture = false;
 216        else $this->doc .= DOKU_LF;
 217      }
 218    }
 219  
 220    function code($text, $language = NULL){
 221      if ($this->capture){
 222        $this->doc .= DOKU_LF.$text;
 223        if (strlen($this->doc) > 250) $this->capture = false;
 224        else $this->doc .= DOKU_LF;
 225      }
 226    }
 227  
 228    function acronym($acronym){
 229      if ($this->capture) $this->doc .= $acronym;
 230    }
 231  
 232    function smiley($smiley){
 233      if ($this->capture) $this->doc .= $smiley;
 234    }
 235  
 236    function entity($entity){
 237      if ($this->capture) $this->doc .= $entity;
 238    }
 239  
 240    function multiplyentity($x, $y){
 241      if ($this->capture) $this->doc .= $x.'×'.$y;
 242    }
 243  
 244    function singlequoteopening(){
 245      if ($this->capture) $this->doc .= '‘';
 246    }
 247  
 248    function singlequoteclosing(){
 249      if ($this->capture) $this->doc .= '’';
 250    }
 251  
 252    function doublequoteopening(){
 253      if ($this->capture) $this->doc .= '“';
 254    }
 255  
 256    function doublequoteclosing(){
 257      if ($this->capture) $this->doc .= 'â€';
 258    }
 259  
 260    function camelcaselink($link) {
 261      $this->internallink($link, $link);
 262    }
 263  
 264    function locallink($hash, $name = NULL){}
 265  
 266    /**
 267     * keep track of internal links in $this->meta['relation']['references']
 268     */
 269    function internallink($id, $name = NULL){
 270      global $ID;
 271  
 272      $default = $this->_simpleTitle($id);
 273  
 274      // first resolve and clean up the $id
 275      resolve_pageid(getNS($ID), $id, $exists);
 276      list($page, $hash) = split('#', $id, 2);
 277  
 278      // set metadata
 279      $this->meta['relation']['references'][$page] = $exists;
 280      // $data = array('relation' => array('isreferencedby' => array($ID => true)));
 281      // p_set_metadata($id, $data);
 282  
 283      // add link title to summary
 284      if ($this->capture){
 285        $name = $this->_getLinkTitle($name, $default, $id);
 286        $this->doc .= $name;
 287      }
 288    }
 289  
 290    function externallink($url, $name = NULL){
 291      if ($this->capture){
 292        if ($name) $this->doc .= $name;
 293        else $this->doc .= '<'.$url.'>';
 294      }
 295    }
 296  
 297    function interwikilink($match, $name = NULL, $wikiName, $wikiUri){
 298      if ($this->capture){
 299        list($wikiUri, $hash) = explode('#', $wikiUri, 2);
 300        $name = $this->_getLinkTitle($name, $wikiName.'>'.$wikiUri);
 301        $this->doc .= $name;
 302      }
 303    }
 304  
 305    function windowssharelink($url, $name = NULL){
 306      if ($this->capture){
 307        if ($name) $this->doc .= $name;
 308        else $this->doc .= '<'.$url.'>';
 309      }
 310    }
 311  
 312    function emaillink($address, $name = NULL){
 313      if ($this->capture){
 314        if ($name) $this->doc .= $name;
 315        else $this->doc .= '<'.$address.'>';
 316      }
 317    }
 318  
 319    function internalmedia($src, $title=NULL, $align=NULL, $width=NULL,
 320                           $height=NULL, $cache=NULL, $linking=NULL){
 321      if ($this->capture && $title) $this->doc .= '['.$title.']';
 322    }
 323  
 324    function externalmedia($src, $title=NULL, $align=NULL, $width=NULL,
 325                           $height=NULL, $cache=NULL, $linking=NULL){
 326      if ($this->capture && $title) $this->doc .= '['.$title.']';
 327    }
 328  
 329    function rss($url,$params) {
 330      $this->meta['relation']['haspart'][$url] = true;
 331         $this->meta['date']['valid']['age'] = $params['refresh'];
 332    }
 333  
 334    function table_open($maxcols = NULL, $numrows = NULL){}
 335    function table_close(){}
 336  
 337    function tablerow_open(){}
 338    function tablerow_close(){}
 339  
 340    function tableheader_open($colspan = 1, $align = NULL){}
 341    function tableheader_close(){}
 342  
 343    function tablecell_open($colspan = 1, $align = NULL){}
 344    function tablecell_close(){}
 345  
 346    //----------------------------------------------------------
 347    // Utils
 348  
 349    /**
 350     * Removes any Namespace from the given name but keeps
 351     * casing and special chars
 352     *
 353     * @author Andreas Gohr <andi@splitbrain.org>
 354     */
 355    function _simpleTitle($name){
 356      global $conf;
 357  
 358      if($conf['useslash']){
 359          $nssep = '[:;/]';
 360      }else{
 361          $nssep = '[:;]';
 362      }
 363      $name = preg_replace('!.*'.$nssep.'!','',$name);
 364      //if there is a hash we use the anchor name only
 365      $name = preg_replace('!.*#!','',$name);
 366      return $name;
 367    }
 368  
 369    /**
 370     * Creates a linkid from a headline
 371     *
 372     * @param string  $title   The headline title
 373     * @param boolean $create  Create a new unique ID?
 374     * @author Andreas Gohr <andi@splitbrain.org>
 375     */
 376    function _headerToLink($title, $create=false) {
 377      $title = str_replace(':','',cleanID($title));
 378      $title = ltrim($title,'0123456789._-');
 379      if(empty($title)) $title='section';
 380  
 381      if($create){
 382        // make sure tiles are unique
 383        $num = '';
 384        while(in_array($title.$num,$this->headers)){
 385          ($num) ? $num++ : $num = 1;
 386        }
 387        $title = $title.$num;
 388        $this->headers[] = $title;
 389      }
 390  
 391      return $title;
 392    }
 393  
 394    /**
 395     * Construct a title and handle images in titles
 396     *
 397     * @author Harry Fuecks <hfuecks@gmail.com>
 398     */
 399    function _getLinkTitle($title, $default, $id=NULL) {
 400      global $conf;
 401  
 402      $isImage = FALSE;
 403      if (is_null($title)){
 404        if ($conf['useheading'] && $id){
 405          $heading = p_get_first_heading($id);
 406          if ($heading) return $heading;
 407        }
 408        return $default;
 409      } else if (is_string($title)){
 410        return $title;
 411      } else if (is_array($title)){
 412        return '['.$title.']';
 413      }
 414    }
 415  
 416  }
 417  
 418  //Setup VIM: ex: et ts=4 enc=utf-8 :


Généré le : Tue Apr 3 20:47:31 2007 par Balluche grâce à PHPXref 0.7