/[cvs]/nfo/php/libs/com.newsblob.phphtmllib/HTMLTagClass.inc
ViewVC logotype

Contents of /nfo/php/libs/com.newsblob.phphtmllib/HTMLTagClass.inc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (show annotations)
Thu Jan 30 03:29:08 2003 UTC (21 years, 5 months ago) by jonen
Branch: MAIN
Branch point for: no_vendor_tag
Initial revision

1 <?php
2
3 /**
4 * Holds the HTMLTagClass
5 *
6 * $Id: HTMLTagClass.inc,v 1.20 2002/10/30 21:12:53 hemna Exp $
7 *
8 * @author Walter A. Boring IV <waboring@buildabetterweb.com>
9 * @package phpHtmlLib
10 *
11 * @copyright LGPL - See LICENCE
12 *
13 */
14
15
16 /**
17 * make sure we include the parent class.
18 */
19 require_once( $phphtmllib."/XMLTagClass.inc" );
20
21 /**
22 * Base class for all HTML Tag classes.
23 * Tag class renders an html tag, its
24 * attributes, the content (if any),
25 * and close tag (if needed).
26 *
27 * @author Walter A. Boring IV <waboring@buildabetterweb.com>
28 * @link http://phphtmllib.sourceforge.net
29 */
30 class HTMLTagClass extends XMLTagClass {
31
32
33 /**
34 * Flag to tell the renderer not to
35 * place the /> if we are in xhtml
36 * compliant mode.
37 */
38 var $_no_finish_slash_xhtml = FALSE;
39
40
41 /**
42 * Flag to let us know to render XHTML 1.0
43 * compliant output. defaulted to FALSE
44 * @var boolean
45 * @access private
46 */
47 var $_xhtml_compliant = FALSE;
48
49 /**
50 * Flag to denote that this tag is
51 * depricated by the HTML standard.
52 *
53 */
54 var $_depricated = FALSE;
55
56 /**
57 * the list of tag attributes that we
58 * should create a clickable link for
59 * when in debug mode.
60 * @var array
61 * @access private
62 */
63 var $_debug_link_attributes = array("background");
64
65 /**
66 * The list of attributes not to render
67 * if HTML_RENDER_TYPE is "XHTML STRICT"
68 *
69 */
70 var $_xhtml_strict_attributes = array();
71
72
73 /**
74 * The list of attributes that we want to run
75 * htmlentities() on if we are in XHTML_STRICT
76 * mode. Otherwise the validator complains about
77 * html characters such as &.
78 * @var array.
79 * @access private
80 */
81 var $_htmlentities_attributes = array();
82
83
84 /**
85 * Class Constructor
86 * @param array - Associative array of
87 * name="value" pairs of
88 * tag atributes.
89 * ie array("border"=>0, "class"=>"hover");
90 *
91 * @param mixed You can have any number
92 * of parameters that will
93 * be added to the content
94 * of the tag automatically.
95 *
96 * @access public
97 */
98 function HTMLTagClass( $attributes=NULL ) {
99 if ( $attributes ) {
100 $this->set_tag_attributes( $attributes );
101 }
102
103 //add the content if any.
104 $num_args = func_num_args();
105 for ($i = 1; $i < $num_args; $i++) {
106 $this->add(func_get_arg($i));
107 }
108
109 //what version of html is this tag going to
110 //be rendered as?
111 //this is a magic test. It assumes that
112 //someone has created the define for
113 //HTML_RENDER_TYPE
114 if ( HTML_RENDER_TYPE == XHTML ||
115 HTML_RENDER_TYPE == XHTML_STRICT ) {
116 $this->_xhtml_compliant = TRUE;
117
118 }
119
120 //if the tag is depricated
121 //we raise an alert.
122 if ( $this->_depricated ) {
123 trigger_error(htmlspecialchars($this->_tag) . " has been depricated in HTML 4.0", E_USER_NOTICE);
124 }
125 }
126
127
128 /**
129 * Renders the tag, attributes, content and close tag.
130 * @param int $indent_level the indentation level for this tag.
131 * @return string
132 * @access public
133 */
134 function render($indent_level=NULL, $output_debug=0) {
135
136 //try and guess the indentation flags
137 //based on the data
138 $this->_prepare_flags();
139
140 if ( $indent_level==NULL ) {
141 $indent_level = $this->_indent_level;
142 }
143
144 $html = $this->_render_tag($indent_level, $output_debug);
145
146 if ( $this->_content_required ) {
147 $html .= $this->_render_content($indent_level, $output_debug);
148 }
149 if ( $this->_close_tag_required ) {
150 $html .= $this->_render_close_tag($indent_level, $output_debug);
151 }
152
153 return $html;
154 }
155
156 //****************************************************************
157 // HTML specific routines
158 //****************************************************************
159
160 /**
161 * This function is a shorthand helper
162 * to setting the style attribute on a
163 * tag.
164 *
165 * @param string - the style value.
166 */
167 function set_style( $value ) {
168 $this->set_tag_attribute("style", $value);
169 }
170
171 /**
172 * This function is a shorthand helper
173 * to setting the class attribute on a
174 * tag.
175 *
176 * @param string - the class value.
177 */
178 function set_class( $value ) {
179 $this->set_tag_attribute("class", $value);
180 }
181
182 /**
183 * This function is a shorthand helper
184 * to setting the id attribute on a
185 * tag.
186 *
187 * @param string - the class value.
188 */
189 function set_id( $value ) {
190 $this->set_tag_attribute("id", $value);
191 }
192
193
194 //****************************************************************
195 // Tag rendering routines.
196 //****************************************************************
197
198 /**
199 * renders the open tag. is <TABLE>
200 * @param int $indent_level the indentation level for this tag.
201 * @return string
202 * @access private
203 */
204 function _render_tag($indent_level, $output_debug=0) {
205 if ( $output_debug ) {
206 //lets call the special render tag debug function
207 return $this->_render_tag_debug( $indent_level );
208 } else {
209 return XMLTag::_render_open_tag($indent_level, $this->_xhtml_compliant);
210 }
211 }
212
213 /**
214 * Renders all of the content.
215 * Content can be raw strings, or tag objects.
216 * @param int $indent_level the indentation level for this tag.
217 * @return string
218 * @access private
219 */
220 function _render_content($indent_level, $output_debug=0) {
221 if ( $output_debug ) {
222 return $this->_render_content_debug( $indent_level );
223 } else {
224 return XMLTag::_render_content( $indent_level, $output_debug);
225 }
226 }
227
228 /**
229 * Renders the close tag (if needed)
230 * @param int $indent_level the indentation level for this tag.
231 * @return string
232 * @access private
233 */
234 function _render_close_tag($indent_level, $output_debug=0) {
235 if ( $output_debug ) {
236 return $this->_render_close_tag_debug( $indent_level );
237 } else {
238 return XMLTag::_render_close_tag($indent_level);
239 }
240 }
241
242
243 /**
244 * This renders that open tag in debug mode.
245 * We do this as a seperate function,
246 * so we can override this by the child
247 * tag, so it can add a link on content or
248 * one of the attributes.
249 */
250 function _render_tag_debug($indent_level) {
251
252 $indent = $this->_render_indent($indent_level, TRUE);
253
254 $tag_prefix = htmlspecialchars( $this->_tag_prefix );
255 $tab_postfix = htmlspecialchars( $this->_tag_postfix );
256 $str = $indent . $tag_prefix. "<span class=\"purple\" style=\"white-space:nowrap;\">";
257 $str .= $this->_tag . "</span>";
258
259 if ( $this->_xhtml_compliant && !$this->_always_upper_case ) {
260 //we have to have the tag name be lower case.
261 $str = strtolower( $str );
262 }
263
264 foreach( $this->_attributes as $name => $value) {
265 $str .= $this->_build_attribute_string($name, $value, TRUE);
266 }
267
268 //if we want to output xhtml compliant code, we have to
269 //render a special tag closing.
270 if ( $this->_xhtml_compliant ) {
271 //we have to render a special close for the
272 //open tag, if the tag doesn't require a close
273 //tag or content.
274 if ( !$this->_close_tag_required && !$this->_no_finish_slash_xhtml ) {
275 $html = $str . "&nbsp;/&gt;";
276 } else {
277 $html = $str."&gt;";
278 }
279 } else {
280 $html = $str."&gt;";
281 }
282
283 if ( $this->newline_after_opentag ) {
284 $html .= "<br>\n";
285 }
286 return $html;
287 }
288
289 /**
290 * This renders the content in debug mode.
291 * lets us wrap the content w/ a <nobr></nobr>
292 * so it acts like view source.
293 *
294 * Content can be raw strings, or tag objects.
295 * @param int $indent_level the indentation level for this tag.
296 * @return string
297 * @access private
298 */
299 function _render_content_debug($indent_level) {
300
301 $html = '';
302 //walk through the content
303 foreach ($this->_content as $item) {
304 if (method_exists($item, "render")) {
305 if ($this->_collapse_flag && method_exists($item, "set_collapse")) {
306 $item->set_collapse(TRUE, FALSE);
307 }
308 if ($indent_level == INDENT_LEFT_JUSTIFY) {
309 $indent = INDENT_LEFT_JUSTIFY;
310 } else {
311 $indent = $indent_level + 1;
312 }
313 $html .= $item->render($indent, TRUE);
314 } else {
315 if ($this->_collapse_flag) {
316 $html .= htmlspecialchars($item);
317 } else {
318 if ($indent_level == INDENT_LEFT_JUSTIFY) {
319 $indent = INDENT_LEFT_JUSTIFY;
320 } else {
321 $indent = $indent_level + 1;
322 }
323 $indent = $this->_render_indent($indent, TRUE);
324 if ( $this->newline_after_opentag ) {
325 $item = htmlspecialchars($item);
326 $item = str_replace("\n", "<br>\n" . $indent, $item);
327 $html .= $indent . "<span style=\"white-space:nowrap\">" .$item . "</span><br>\n";
328 } else {
329 $item = htmlspecialchars($item);
330 $item = str_replace("\n", "<br>\n" . $indent, $item);
331 $html .= $item;
332 }
333 }
334 }
335 }
336 return $html;
337 }
338
339
340 /**
341 * this renders the close tag in debugging mode.
342 * @param int $indent_level the indentation level for this tag.
343 * @return string
344 * @access private
345 */
346 function _render_close_tag_debug( $indent_level ) {
347
348 $indent ="";
349 if ( $this->indent_flag && $this->newline_after_opentag ) {
350 $indent = $this->_render_indent($indent_level, TRUE);
351 }
352 $str = $indent . "&lt;/" . "<span class=\"purple\">";
353 $str .= $this->_tag . "</span>&gt;";
354
355 if ( $this->_xhtml_compliant ) {
356 $str = strtolower( $str );
357 }
358
359 if ( $this->newline_after_closetag ) {
360 $str .= "<br>\n";
361 }
362
363 return $str;
364
365 }
366
367
368 //****************************************************************
369 // Utility functions for attributes.
370 //****************************************************************
371
372 /**
373 * this builds an attribute for a tag.
374 * It also filters out any attributes
375 * that shouldn't be rendered if they
376 * are in the $this->_xhtml_strict_attributes
377 * array and HTML_RENDER_TYPE = XHTML STRICT
378 *
379 * @param string - $name attribute name
380 * @param mixed - $value attribute value
381 * @return the tag attribute name=value pair.
382 * to be added to the tag.
383 */
384 function _build_attribute_string($name, $value, $debug=0) {
385
386 if ( $debug ) {
387 //hack to make non name-value pair work.
388 //ie <option name=foo value=bar CHECKED>
389 if ( is_int($name) ) {
390 $returnval = " <span class=\"black\">$value</span>";
391 } else if ( $value === NULL ) {
392 $returnval = " <span class=\"black\">$name</span>";
393 } else {
394 if ( in_array($name, $this->_debug_link_attributes) ) {
395 //lets create a clickable link for the value
396 //of this attribute
397 $value = "<a href=\"$value\">$value</a>";
398 $returnval = " <span class=\"black\">$name=</span><span class=\"blue\">\"$value\"</span>";
399 } else {
400 $returnval = " <span class=\"black\">$name=</span><span class=\"blue\">\"$value\"</span>";
401 }
402 }
403
404 if ( HTML_RENDER_TYPE == XHTML_STRICT &&
405 in_array($name, $this->_xhtml_strict_attributes) ) {
406 $returnval = NULL;
407 }
408 } else {
409 //hack to make non name-value pair work.
410 //ie <option name=foo value=bar CHECKED>
411 if ( HTML_RENDER_TYPE == XHTML_STRICT && !is_int($name) ) {
412 //We do this because XHTML STRICT complains about
413 //html characters such as &. So we mask them.
414 $value = htmlentities($value);
415 }
416
417 if ( HTML_RENDER_TYPE == XHTML_STRICT &&
418 in_array($name, $this->_xhtml_strict_attributes) ) {
419 $returnval = NULL;
420 } else {
421 $returnval = XMLTagClass::_build_attribute_string($name, $value);
422 }
423 }
424 return $returnval;
425 }
426
427 //****************************************************************
428 // Misc functions
429 //****************************************************************
430
431 }
432 ?>

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed