includes/wikiengine/Render.php
changeset 1 fe660c52c48f
equal deleted inserted replaced
0:902822492a68 1:fe660c52c48f
       
     1 <?php
       
     2 // vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4:
       
     3 /**
       
     4  * Base rendering class for parsed and tokenized text.
       
     5  *
       
     6  * PHP versions 4 and 5
       
     7  *
       
     8  * @category   Text
       
     9  * @package    Text_Wiki
       
    10  * @author     Paul M. Jones <pmjones@php.net>
       
    11  * @license    http://www.gnu.org/copyleft/lesser.html  LGPL License 2.1
       
    12  * @version    CVS: $Id: Render.php,v 1.9 2006/02/17 05:42:55 toggg Exp $
       
    13  * @link       http://pear.php.net/package/Text_Wiki
       
    14  */
       
    15 
       
    16 /**
       
    17  * Base rendering class for parsed and tokenized text.
       
    18  *
       
    19  * @category   Text
       
    20  * @package    Text_Wiki
       
    21  * @author     Paul M. Jones <pmjones@php.net>
       
    22  * @license    http://www.gnu.org/copyleft/lesser.html  LGPL License 2.1
       
    23  * @version    Release: @package_version@
       
    24  * @link       http://pear.php.net/package/Text_Wiki
       
    25  */
       
    26 class Text_Wiki_Render {
       
    27 
       
    28 
       
    29     /**
       
    30     *
       
    31     * Configuration options for this render rule.
       
    32     *
       
    33     * @access public
       
    34     *
       
    35     * @var string
       
    36     *
       
    37     */
       
    38 
       
    39     var $conf = array();
       
    40 
       
    41 
       
    42     /**
       
    43     *
       
    44     * The name of this rule's format.
       
    45     *
       
    46     * @access public
       
    47     *
       
    48     * @var string
       
    49     *
       
    50     */
       
    51 
       
    52     var $format = null;
       
    53 
       
    54 
       
    55     /**
       
    56     *
       
    57     * The name of this rule's token array elements.
       
    58     *
       
    59     * @access public
       
    60     *
       
    61     * @var string
       
    62     *
       
    63     */
       
    64 
       
    65     var $rule = null;
       
    66 
       
    67 
       
    68     /**
       
    69     *
       
    70     * A reference to the calling Text_Wiki object.
       
    71     *
       
    72     * This is needed so that each rule has access to the same source
       
    73     * text, token set, URLs, interwiki maps, page names, etc.
       
    74     *
       
    75     * @access public
       
    76     *
       
    77     * @var object
       
    78     */
       
    79 
       
    80     var $wiki = null;
       
    81 
       
    82 
       
    83     /**
       
    84     *
       
    85     * Constructor for this render format or rule.
       
    86     *
       
    87     * @access public
       
    88     *
       
    89     * @param object &$obj The calling "parent" Text_Wiki object.
       
    90     *
       
    91     */
       
    92 
       
    93     function Text_Wiki_Render(&$obj)
       
    94     {
       
    95         // keep a reference to the calling Text_Wiki object
       
    96         $this->wiki =& $obj;
       
    97 
       
    98         // get the config-key-name for this object,
       
    99         // strip the Text_Wiki_Render_ part
       
   100         //           01234567890123456
       
   101         $tmp = get_class($this);
       
   102         $tmp = substr($tmp, 17);
       
   103 
       
   104         // split into pieces at the _ mark.
       
   105         // first part is format, second part is rule.
       
   106         $part   = explode('_', $tmp);
       
   107         $this->format = isset($part[0]) ? ucwords(strtolower($part[0])) : null;
       
   108         $this->rule   = isset($part[1]) ? ucwords(strtolower($part[1])) : null;
       
   109 
       
   110         // is there a format but no rule?
       
   111         // then this is the "main" render object, with
       
   112         // pre() and post() methods.
       
   113         if ($this->format && ! $this->rule &&
       
   114             isset($this->wiki->formatConf[$this->format]) &&
       
   115             is_array($this->wiki->formatConf[$this->format])) {
       
   116 
       
   117             // this is a format render object
       
   118             $this->conf = array_merge(
       
   119                 $this->conf,
       
   120                 $this->wiki->formatConf[$this->format]
       
   121             );
       
   122 
       
   123         }
       
   124 
       
   125         // is there a format and a rule?
       
   126         if ($this->format && $this->rule &&
       
   127             isset($this->wiki->renderConf[$this->format][$this->rule]) &&
       
   128             is_array($this->wiki->renderConf[$this->format][$this->rule])) {
       
   129 
       
   130             // this is a rule render object
       
   131             $this->conf = array_merge(
       
   132                 $this->conf,
       
   133                 $this->wiki->renderConf[$this->format][$this->rule]
       
   134             );
       
   135         }
       
   136     }
       
   137 
       
   138 
       
   139     /**
       
   140     *
       
   141     * Simple method to safely get configuration key values.
       
   142     *
       
   143     * @access public
       
   144     *
       
   145     * @param string $key The configuration key.
       
   146     *
       
   147     * @param mixed $default If the key does not exist, return this value
       
   148     * instead.
       
   149     *
       
   150     * @return mixed The configuration key value (if it exists) or the
       
   151     * default value (if not).
       
   152     *
       
   153     */
       
   154 
       
   155     function getConf($key, $default = null)
       
   156     {
       
   157         if (isset($this->conf[$key])) {
       
   158             return $this->conf[$key];
       
   159         } else {
       
   160             return $default;
       
   161         }
       
   162     }
       
   163 
       
   164 
       
   165     /**
       
   166     *
       
   167     * Simple method to wrap a configuration in an sprintf() format.
       
   168     *
       
   169     * @access public
       
   170     *
       
   171     * @param string $key The configuration key.
       
   172     *
       
   173     * @param string $format The sprintf() format string.
       
   174     *
       
   175     * @return mixed The formatted configuration key value (if it exists)
       
   176     * or null (if it does not).
       
   177     *
       
   178     */
       
   179 
       
   180     function formatConf($format, $key)
       
   181     {
       
   182         if (isset($this->conf[$key])) {
       
   183             return sprintf($format, $this->conf[$key]);
       
   184         } else {
       
   185             return null;
       
   186         }
       
   187     }
       
   188 
       
   189     /**
       
   190     * Default method to render url
       
   191     *
       
   192     * @access public
       
   193     * @param string $urlChunk a part of an url to render
       
   194     * @return rendered url
       
   195     *
       
   196     */
       
   197 
       
   198     function urlEncode($urlChunk)
       
   199     {
       
   200         return rawurlencode($urlChunk);
       
   201     }
       
   202 
       
   203     /**
       
   204     * Default method to render text (htmlspecialchars)
       
   205     *
       
   206     * @access public
       
   207     * @param string $text the text to render
       
   208     * @return rendered text
       
   209     *
       
   210     */
       
   211 
       
   212     function textEncode($text)
       
   213     {
       
   214         return htmlspecialchars($text);
       
   215     }
       
   216 }
       
   217 ?>