1<?php
2
3class Text_Wiki_Render {
4
5
6    /**
7    *
8    * Configuration options for this render rule.
9    *
10    * @access public
11    *
12    * @var string
13    *
14    */
15
16    var $conf = array();
17
18
19    /**
20    *
21    * The name of this rule's format.
22    *
23    * @access public
24    *
25    * @var string
26    *
27    */
28
29    var $format = null;
30
31
32    /**
33    *
34    * The name of this rule's token array elements.
35    *
36    * @access public
37    *
38    * @var string
39    *
40    */
41
42    var $rule = null;
43
44
45    /**
46    *
47    * A reference to the calling Text_Wiki object.
48    *
49    * This is needed so that each rule has access to the same source
50    * text, token set, URLs, interwiki maps, page names, etc.
51    *
52    * @access public
53    *
54    * @var object
55    */
56
57    var $wiki = null;
58
59
60    /**
61    *
62    * Constructor for this render format or rule.
63    *
64    * @access public
65    *
66    * @param object &$obj The calling "parent" Text_Wiki object.
67    *
68    */
69
70    function Text_Wiki_Render(&$obj)
71    {
72        // keep a reference to the calling Text_Wiki object
73        $this->wiki =& $obj;
74
75        // get the config-key-name for this object,
76        // strip the Text_Wiki_Render_ part
77        //           01234567890123456
78        $tmp = get_class($this);
79        $tmp = substr($tmp, 17);
80
81        // split into pieces at the _ mark.
82        // first part is format, second part is rule.
83        $part   = explode('_', $tmp);
84        $this->format = isset($part[0]) ? ucwords(strtolower($part[0])) : null;
85        $this->rule   = isset($part[1]) ? ucwords(strtolower($part[1])) : null;
86
87        // is there a format but no rule?
88        // then this is the "main" render object, with
89        // pre() and post() methods.
90        if ($this->format && ! $this->rule &&
91            isset($this->wiki->formatConf[$this->format]) &&
92            is_array($this->wiki->formatConf[$this->format])) {
93
94            // this is a format render object
95            $this->conf = array_merge(
96                $this->conf,
97                $this->wiki->formatConf[$this->format]
98            );
99
100        }
101
102        // is there a format and a rule?
103        if ($this->format && $this->rule &&
104            isset($this->wiki->renderConf[$this->format][$this->rule]) &&
105            is_array($this->wiki->renderConf[$this->format][$this->rule])) {
106
107            // this is a rule render object
108            $this->conf = array_merge(
109                $this->conf,
110                $this->wiki->renderConf[$this->format][$this->rule]
111            );
112        }
113    }
114
115
116    /**
117    *
118    * Simple method to safely get configuration key values.
119    *
120    * @access public
121    *
122    * @param string $key The configuration key.
123    *
124    * @param mixed $default If the key does not exist, return this value
125    * instead.
126    *
127    * @return mixed The configuration key value (if it exists) or the
128    * default value (if not).
129    *
130    */
131
132    function getConf($key, $default = null)
133    {
134        if (isset($this->conf[$key])) {
135            return $this->conf[$key];
136        } else {
137            return $default;
138        }
139    }
140
141
142    /**
143    *
144    * Simple method to wrap a configuration in an sprintf() format.
145    *
146    * @access public
147    *
148    * @param string $key The configuration key.
149    *
150    * @param string $format The sprintf() format string.
151    *
152    * @return mixed The formatted configuration key value (if it exists)
153    * or null (if it does not).
154    *
155    */
156
157    function formatConf($format, $key)
158    {
159        if (isset($this->conf[$key])) {
160            return sprintf($format, $this->conf[$key]);
161        } else {
162            return null;
163        }
164    }
165
166}
167?>