]> git.llucax.com Git - mecon/meconlib.git/blob - pear_lib_tmp/HTML/Common.php
Agrego Arbol a meconlib
[mecon/meconlib.git] / pear_lib_tmp / HTML / Common.php
1 <?php
2 /* vim: set expandtab tabstop=4 shiftwidth=4: */
3 // +----------------------------------------------------------------------+
4 // | PHP Version 4                                                        |
5 // +----------------------------------------------------------------------+
6 // | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group             |
7 // +----------------------------------------------------------------------+
8 // | This source file is subject to version 2.0 of the PHP license,       |
9 // | that is bundled with this package in the file LICENSE, and is        |
10 // | available at through the world-wide-web at                           |
11 // | http://www.php.net/license/2_02.txt.                                 |
12 // | If you did not receive a copy of the PHP license and are unable to   |
13 // | obtain it through the world-wide-web, please send a note to          |
14 // | license@php.net so we can mail you a copy immediately.               |
15 // +----------------------------------------------------------------------+
16 // | Author: Adam Daniel <adaniel1@eesus.jnj.com>                         |
17 // +----------------------------------------------------------------------+
18 //
19 // $Id$
20
21 /**
22  * Base class for all HTML classes
23  *
24  * @author      Adam Daniel <adaniel1@eesus.jnj.com>
25  * @version     1.7
26  * @since       PHP 4.0.3pl1
27  * @abstract
28  */
29 class HTML_Common {
30
31     /**
32      * Associative array of table attributes
33      * 
34      * @var       array
35      * @access    private
36      */
37     var $_attributes = array();
38
39     /**
40      * Tab offset of the object
41      * 
42      * @var          int
43      * @access       private
44      */
45     var $_tabOffset = 0;
46
47     /**
48      * Tab string
49      *
50      * @var       string
51      * @since     1.7
52      * @access    private
53      */
54     var $_tab = "\11";
55
56     /**
57      * HTML comment on the object
58      * @var       string
59      * @since     1.5
60      * @access    private
61      */
62     var $_comment = '';
63
64     /**
65      * Contains the line end string
66      * 
67      * @var       string
68      * @since     1.7
69      * @access    private
70      */
71     var $_lineEnd = "\12";
72     
73     /**
74      * Class constructor
75      * @param    mixed   $attributes     Associative array of table tag attributes 
76      *                                   or HTML attributes name="value" pairs
77      * @param    int     $tabOffset      Indent offset in tabs
78      * @access   public
79      */
80     function HTML_Common($attributes = null, $tabOffset = 0)
81     {
82         $this->setAttributes($attributes);
83         $this->setTabOffset($tabOffset);
84     } // end constructor
85
86     /**
87      * Returns the current API version
88      * @access   public
89      * @returns  double
90      */
91     function apiVersion()
92     {
93         return 1.7;
94     } // end func apiVersion
95
96     /**
97      * Returns the lineEnd
98      * 
99      * @since     1.7
100      * @access    private
101      * @return    string
102      * @throws
103      */
104     function _getLineEnd()
105     {
106         return $this->_lineEnd;
107     } //end func getLineEnd
108
109     /**
110      * Returns a string containing the unit for indenting HTML
111      * 
112      * @since     1.7
113      * @access    private
114      * @return    string
115      */
116     function _getTab()
117     {
118         return $this->_tab;
119     } // end func _getTab
120
121     /**
122      * Returns a string containing the offset for the whole HTML code
123      * 
124      * @access   private
125      * @return    string
126      */
127     function _getTabs()
128     {
129         return str_repeat($this->_getTab(), $this->_tabOffset);
130     } // end func _getTabs
131
132     /**
133      * Returns an HTML formatted attribute string
134      * @param    array   $attributes
135      * @return   string
136      * @access   private
137      */
138     function _getAttrString($attributes)
139     {
140         $strAttr = '';
141         if (is_array($attributes)) {
142             foreach ($attributes as $key => $value) {
143                 $strAttr .= ' ' . $key . '="' . htmlspecialchars($value) . '"';
144             }
145         }
146         return $strAttr;
147     } // end func _getAttrString
148
149     /**
150      * Returns a valid atrributes array from either a string or array
151      * @param    mixed   $attributes     Either a typical HTML attribute string or an associative array
152      * @access   private
153      */
154     function _parseAttributes($attributes)
155     {
156         if (is_array($attributes)) {
157             $ret = array();
158             foreach ($attributes as $key => $value) {
159                 if (is_int($key)) {
160                     $key = $value = strtolower($value);
161                 } else {
162                     $key = strtolower($key);
163                 }
164                 $ret[$key] = $value;
165             }
166             return $ret;
167
168         } elseif (is_string($attributes)) {
169             $preg = "/(([A-Za-z_:]|[^\\x00-\\x7F])([A-Za-z0-9_:.-]|[^\\x00-\\x7F])*)" .
170                 "([ \\n\\t\\r]+)?(=([ \\n\\t\\r]+)?(\"[^\"]*\"|'[^']*'|[^ \\n\\t\\r]*))?/";
171             if (preg_match_all($preg, $attributes, $regs)) {
172                 for ($counter=0; $counter<count($regs[1]); $counter++) {
173                     $name  = $regs[1][$counter];
174                     $check = $regs[0][$counter];
175                     $value = $regs[7][$counter];
176                     if (trim($name) == trim($check)) {
177                         $arrAttr[strtolower(trim($name))] = strtolower(trim($name));
178                     } else {
179                         if (substr($value, 0, 1) == "\"" || substr($value, 0, 1) == "'") {
180                             $value = substr($value, 1, -1);
181                         }
182                         $arrAttr[strtolower(trim($name))] = trim($value);
183                     }
184                 }
185                 return $arrAttr;
186             }
187         }
188     } // end func _parseAttributes
189
190     /**
191      * Returns the array key for the given non-name-value pair attribute
192      * 
193      * @param     string    $attr         Attribute
194      * @param     array     $attributes   Array of attribute
195      * @since     1.0
196      * @access    private
197      * @return    array key
198      * @throws
199      */
200     function _getAttrKey($attr, $attributes)
201     {
202         if (isset($attributes[strtolower($attr)])) {
203             return true;
204         } else {
205             return null;
206         }
207     } //end func _getAttrKey
208
209     /**
210      * Updates the attributes in $attr1 with the values in $attr2 without changing the other existing attributes
211      * @param    array   $attr1      Original attributes array
212      * @param    array   $attr2      New attributes array
213      * @access   private
214      * @return   array
215      */
216     function _updateAttrArray(&$attr1, $attr2)
217     {
218         if (!is_array($attr2)) {
219             return false;
220         }
221         foreach ($attr2 as $key => $value) {
222             $attr1[$key] = $value;
223         }
224     } // end func _updateAtrrArray
225
226     /**
227      * Removes the given attribute from the given array
228      * 
229      * @param     string    $attr           Attribute name
230      * @param     array     $attributes     Attribute array
231      * @since     1.4
232      * @access    public
233      * @return    void
234      * @throws
235      */
236     function _removeAttr($attr, &$attributes)
237     {
238         $attr = strtolower($attr);
239         if (isset($attributes[$attr])) {
240             unset($attributes[$attr]);
241         }
242     } //end func _removeAttr
243
244     /**
245      * Returns the value of the given attribute
246      * 
247      * @param     string    $attr   Attribute name
248      * @since     1.5
249      * @access    public
250      * @return    void
251      * @throws
252      */
253     function getAttribute($attr)
254     {
255         $attr = strtolower($attr);
256         if (isset($this->_attributes[$attr])) {
257             return $this->_attributes[$attr];
258         }
259         return null;
260     } //end func getAttribute
261
262     /**
263      * Sets the HTML attributes
264      * @param    mixed   $attributes     Either a typical HTML attribute string or an associative array
265      * @access   public
266      */
267     function setAttributes($attributes)
268     {
269         $this->_attributes = $this->_parseAttributes($attributes);
270     } // end func _setAttributes
271
272     /**
273      * Returns an assoc array of attributes
274      * 
275      * @since     1.6
276      * @access    public
277      * @return    void
278      * @throws
279      */
280     function getAttributes()
281     {
282         return $this->_attributes;
283     } //end func getAttributes
284
285     /**
286      * Updates the passed attributes without changing the other existing attributes
287      * @param    mixed   $attributes     Either a typical HTML attribute string or an associative array
288      * @access   public
289      */
290     function updateAttributes($attributes)
291     {
292         $this->_updateAttrArray($this->_attributes, $this->_parseAttributes($attributes));
293     } // end func updateAttributes
294
295     /**
296      * Removes an attribute
297      * 
298      * @param     string    $attr   Attribute name
299      * @since     1.4
300      * @access    public
301      * @return    void
302      * @throws
303      */
304     function removeAttribute($attr)
305     {
306         $this->_removeAttr($attr, $this->_attributes);
307     } //end func removeAttribute
308
309     /**
310      * Sets the line end style to Windows, Mac, Unix or a custom string.
311      * 
312      * @param   string  $style  "win", "mac", "unix" or custom string.
313      * @since   1.7
314      * @access  public
315      * @return  void
316      */
317     function setLineEnd($style)
318     {
319         switch ($style) {
320             case 'win':
321             $this->_lineEnd = "\15\12";
322             break;
323             case 'unix':
324             $this->_lineEnd = "\12";
325             break;
326             case 'mac';
327             $this->_lineEnd = "\15";
328             break;
329             default:
330             $this->_lineEnd = $style;
331             break;
332         }
333     } // end func setLineEnd
334
335     /**
336      * Sets the tab offset
337      * 
338      * @param    int      $offset
339      * @access   public
340      */
341     function setTabOffset($offset)
342     {
343         $this->_tabOffset = $offset;
344     } // end func setTabOffset
345
346     /**
347      * Returns the tabOffset
348      * 
349      * @since     1.5
350      * @access    public
351      * @return    void
352      * @throws
353      */
354     function getTabOffset()
355     {
356         return $this->_tabOffset;
357     } //end func getTabOffset
358
359     /**
360      * Sets the string used to indent HTML
361      * 
362      * @since     1.7
363      * @param     string    $string     String used to indent ("\11", "\t", '  ', etc.).
364      * @access    public
365      * @return    void
366      */
367     function setTab($string)
368     {
369         $this->_tab = $string;
370     } // end func setTab
371
372     /**
373      * Sets the HTML comment to be displayed at the beginning of the HTML string
374      *
375      * @param     string
376      * @since     1.4
377      * @access    public
378      * @return    void
379      * @throws
380      */
381     function setComment($comment)
382     {
383         $this->_comment = $comment;
384     } // end func setHtmlComment
385
386     /**
387      * Returns the HTML comment
388      * 
389      * @since     1.5
390      * @access    public
391      * @return    void
392      * @throws
393      */
394     function getComment()
395     {
396         return $this->_comment;
397     } //end func getComment
398
399     /**
400      * Abstract method.  Must be extended to return the objects HTML
401      *
402      * @access    public
403      * @return    string
404      * @abstract
405      */
406     function toHtml()
407     {
408         return '';
409     } // end func toHtml
410
411     /**
412      * Displays the HTML to the screen
413      *
414      * @access    public
415      */
416     function display()
417     {
418         print $this->toHtml();
419     } // end func display
420
421 } // end class HTML_Common
422 ?>