e05e58353293f229165db1c8be33fd90f97a05e5
[lhc/web/wiklou.git] / PHPTAL-NP-0.7.0 / libs / PHPTAL.php
1 <?php
2 /* vim: set expandtab tabstop=4 shiftwidth=4: */
3 //
4 // Copyright (c) 2003 Laurent Bedubourg
5 //
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
10 //
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
15 //
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 //
20 // Authors: Laurent Bedubourg <laurent.bedubourg@free.fr>
21 //
22
23 /*
24 * This file:
25 *
26 * - Include PHPTAL dependencies
27 * - Define PHPTAL attributes
28 * - Define PHPTAL aliases
29 * - Define PHPTAL rules
30 *
31 * @author Laurent Bedubourg <laurent.bedubourg@free.fr>
32 */
33
34 $__d = dirname(__FILE__);
35 require_once "PEAR.php";
36
37 if (OS_WINDOWS) {
38 define('PHPTAL_PATH_SEP', '\\');
39 } else {
40 define('PHPTAL_PATH_SEP', '/');
41 }
42
43 function _phptal_os_path_join()
44 {
45 $args = func_get_args();
46 return join(PHPTAL_PATH_SEP, $args);
47 }
48
49 require_once 'Types/Errors.php';
50 require_once 'Types/OString.php';
51
52 require_once _phptal_os_path_join($__d, 'PHPTAL', 'Cache.php');
53 require_once _phptal_os_path_join($__d, 'PHPTAL', 'Context.php');
54 require_once _phptal_os_path_join($__d, 'PHPTAL', 'Filter.php');
55 require_once _phptal_os_path_join($__d, 'PHPTAL', 'LoopControler.php');
56 require_once _phptal_os_path_join($__d, 'PHPTAL', 'OutputControl.php');
57 require_once _phptal_os_path_join($__d, 'PHPTAL', 'Template.php');
58 require_once _phptal_os_path_join($__d, 'PHPTAL', 'Macro.php');
59 require_once _phptal_os_path_join($__d, 'PHPTAL', 'I18N.php');
60
61 require_once _phptal_os_path_join($__d, 'PHPTAL', 'SourceResolver.php');
62 require_once _phptal_os_path_join($__d, 'PHPTAL', 'SourceLocator.php');
63
64
65 define('PHPTAL_VERSION', '0.7.0');
66 define('PHPTAL_MARK', str_replace('.', '_', PHPTAL_VERSION) . '_');
67 define('PHPTAL_DEFAULT_CACHE_DIR', '/tmp/');
68
69 /**
70 * This define is used to select the templates output format.
71 *
72 * There's few differences between XHTML and XML but they these differences can
73 * break some browsers output.
74 *
75 * Default PHPTAL output mode is XHTML.
76 */
77 define('PHPTAL_XHTML', 1);
78
79 /**
80 * This define is used to select the templates output format.
81 *
82 * The XML mode does not worry about XHTML specificity and echo every entity
83 * in a <entity></entity> format.
84 */
85 define('PHPTAL_XML', 2);
86
87 /**
88 * @var _phptal_namespaces
89 * @type array
90 *
91 * This array contains the list of all known attribute namespaces, if an
92 * attribute belonging to one of this namespaces is not recognized by PHPTAL,
93 * an exception will be raised.
94 *
95 * These namespaces will be drop from resulting xml/xhtml unless the parser
96 * is told to keep them.
97 *
98 * @access private
99 * @static 1
100 */
101 global $_phptal_namespaces;
102 $_phptal_namespaces = array('TAL', 'METAL', 'I18N', 'PHPTAL');
103
104
105 define('_PHPTAL_SURROUND', 1);
106 define('_PHPTAL_REPLACE', 2);
107 define('_PHPTAL_CONTENT', 3);
108
109 /**
110 * @var _phptal_dictionary
111 * @type hashtable
112 *
113 * This dictionary contains ALL known PHPTAL attributes. Unknown attributes
114 * will be echoed in result as xhtml/xml ones.
115 *
116 * The value define how and when the attribute handler will be called during
117 * code generation.
118 *
119 * @access private
120 * @static 1
121 */
122 global $_phptal_dictionary;
123 $_phptal_dictionary = array(
124 'TAL:DEFINE' => _PHPTAL_REPLACE, // set a context variable
125 'TAL:CONDITION' => _PHPTAL_SURROUND, // print tag content only when condition true
126 'TAL:REPEAT' => _PHPTAL_SURROUND, // repeat over an iterable
127 'TAL:CONTENT' => _PHPTAL_CONTENT, // replace tag content
128 'TAL:REPLACE' => _PHPTAL_REPLACE, // replace entire tag
129 'TAL:ATTRIBUTES' => _PHPTAL_REPLACE, // dynamically set tag attributes
130 'TAL:OMIT-TAG' => _PHPTAL_SURROUND, // omit to print tag but not its content
131 'TAL:COMMENT' => _PHPTAL_SURROUND, // do nothing
132 'TAL:ON-ERROR' => _PHPTAL_SURROUND, // replace content with this if error occurs
133
134 'METAL:DEFINE-MACRO' => _PHPTAL_SURROUND, // define a template macro
135 'METAL:USE-MACRO' => _PHPTAL_REPLACE, // use a template macro
136 'METAL:DEFINE-SLOT' => _PHPTAL_SURROUND, // define a macro slot
137 'METAL:FILL-SLOT' => _PHPTAL_SURROUND, // fill a macro slot
138
139 'PHPTAL:INCLUDE' => _PHPTAL_REPLACE, // include an external template
140 'PHPTAL:SRC-INCLUDE' => _PHPTAL_CONTENT, // include external file without parsing
141
142 'I18N:TRANSLATE' => _PHPTAL_CONTENT, // translate some data using GetText package
143 'I18N:NAME' => _PHPTAL_SURROUND, // prepare a translation name
144 'I18N:ATTRIBUTES' => _PHPTAL_REPLACE, // translate tag attributes values
145 );
146
147 /**
148 * @var _phptal_aliases
149 * @type hashtable
150 *
151 * Create aliases for attributes. If an alias is found during parsing, the
152 * matching phptal attribute will be used.
153 *
154 * @access private
155 * @static 1
156 */
157 global $_phptal_aliases;
158 $_phptal_aliases = array(
159 'TAL:INCLUDE' => 'PHPTAL:INCLUDE',
160 'TAL:SRC-INCLUDE'=> 'PHPTAL:SRC-INCLUDE',
161 );
162
163 /**
164 * @var _phptal_rules_order
165 * @type hashtable
166 *
167 * This rule associative array represents both ordering and exclusion
168 * mecanism for template attributes.
169 *
170 * All known attributes must appear here and must be associated with
171 * an occurence priority.
172 *
173 * When more than one phptal attribute appear in the same tag, they
174 * will execute in following order.
175 *
176 * @access private
177 * @static 1
178 */
179 global $_phptal_rules_order;
180 $_phptal_rules_order = array(
181 'TAL:OMIT-TAG' => 0, // surround -> $tag->disableHeadFootPrint()
182
183 'TAL:ON-ERROR' => 1, // surround
184
185 'METAL:DEFINE-MACRO' => 3, // surround
186 'TAL:DEFINE' => 3, // replace
187 'I18N:NAME' => 3, // replace
188 'I18N:TRANSLATE' => 3, // content
189
190 'TAL:CONDITION' => 4, // surround
191
192 'TAL:REPEAT' => 5, // surround
193
194 'I18N:ATTRIBUTES' => 6, // replace
195 'TAL:ATTRIBUTES' => 6, // replace
196 'TAL:REPLACE' => 6, // replace
197 'METAL:USE-MACRO' => 6, // replace
198 'PHPTAL:SRC-INCLUDE' => 6, // replace
199 'PHPTAL:INCLUDE' => 6, // replace
200 'METAL:DEFINE-SLOT' => 6, // replace
201 'METAL:FILL-SLOT' => 6, // replace
202
203 'TAL:CONTENT' => 7, // content
204
205 'TAL:COMMENT' => 8, // surround
206 );
207
208 /**
209 * @var _phptal_xhtml_content_free_tags
210 * @type array
211 *
212 * This array contains XHTML tags that must be echoed in a &lt;tag/&gt; form
213 * instead of the &lt;tag&gt;&lt;/tag&gt; form.
214 *
215 * In fact, some browsers does not support the later form so PHPTAL
216 * ensure these tags are correctly echoed.
217 */
218 global $_phptal_xhtml_empty_tags;
219 $_phptal_xhtml_empty_tags = array(
220 'AREA',
221 'BASE',
222 'BASEFONT',
223 'BR',
224 'COL',
225 'FRAME',
226 'HR',
227 'IMG',
228 'INPUT',
229 'ISINDEX',
230 'LINK',
231 'META',
232 'PARAM',
233 );
234
235 /**
236 * @var _phptal_xhtml_boolean_attributes
237 * @type array
238 *
239 * This array contains XHTML attributes that must be echoed in a minimized
240 * form. Some browsers (non HTML4 compliants are unable to interpret those
241 * attributes.
242 *
243 * The output will definitively not be an xml document !!
244 * PreFilters should be set to modify xhtml input containing these attributes.
245 */
246 global $_phptal_xhtml_boolean_attributes;
247 $_phptal_xhtml_boolean_attributes = array(
248 'compact',
249 'nowrap',
250 'ismap',
251 'declare',
252 'noshade',
253 'checked',
254 'disabled',
255 'readonly',
256 'multiple',
257 'selected',
258 'noresize',
259 'defer'
260 );
261
262 /**
263 * Shortcut to PHPTAL_Template for lazzy ones (me first).
264 */
265 class PHPTAL extends PHPTAL_Template {}
266
267 /**
268 * PEAR compliant class name.
269 */
270 class HTML_Template_PHPTAL extends PHPTAL_Template {}
271
272 /**
273 * PEAR compliant class name.
274 */
275 class HTML_Template_PHPTAL_Filter extends PHPTAL_Filter {}
276
277 /**
278 * PEAR compliant class name.
279 */
280 class HTML_Template_PHPTAL_SourceLocator extends PHPTAL_SourceLocator {}
281
282 /**
283 * PEAR compliant class name.
284 */
285 class HTML_Template_PHPTAL_SourceResolver extends PHPTAL_SourceResolver {}
286
287
288 ?>