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