HTMLPurifier 4.4.0
/home/ezyang/Dev/htmlpurifier/library/HTMLPurifier/Printer.php
Go to the documentation of this file.
00001 <?php
00002 
00003 // OUT OF DATE, NEEDS UPDATING!
00004 // USE XMLWRITER!
00005 
00006 class HTMLPurifier_Printer
00007 {
00008 
00012     protected $generator;
00013 
00017     protected $config;
00018 
00022     public function __construct() {
00023     }
00024 
00028     public function prepareGenerator($config) {
00029         $all = $config->getAll();
00030         $context = new HTMLPurifier_Context();
00031         $this->generator = new HTMLPurifier_Generator($config, $context);
00032     }
00033 
00038     // function render() {}
00039 
00045     protected function start($tag, $attr = array()) {
00046         return $this->generator->generateFromToken(
00047                     new HTMLPurifier_Token_Start($tag, $attr ? $attr : array())
00048                );
00049     }
00050 
00055     protected function end($tag) {
00056         return $this->generator->generateFromToken(
00057                     new HTMLPurifier_Token_End($tag)
00058                );
00059     }
00060 
00068     protected function element($tag, $contents, $attr = array(), $escape = true) {
00069         return $this->start($tag, $attr) .
00070                ($escape ? $this->escape($contents) : $contents) .
00071                $this->end($tag);
00072     }
00073 
00074     protected function elementEmpty($tag, $attr = array()) {
00075         return $this->generator->generateFromToken(
00076             new HTMLPurifier_Token_Empty($tag, $attr)
00077         );
00078     }
00079 
00080     protected function text($text) {
00081         return $this->generator->generateFromToken(
00082             new HTMLPurifier_Token_Text($text)
00083         );
00084     }
00085 
00091     protected function row($name, $value) {
00092         if (is_bool($value)) $value = $value ? 'On' : 'Off';
00093         return
00094             $this->start('tr') . "\n" .
00095                 $this->element('th', $name) . "\n" .
00096                 $this->element('td', $value) . "\n" .
00097             $this->end('tr')
00098         ;
00099     }
00100 
00105     protected function escape($string) {
00106         $string = HTMLPurifier_Encoder::cleanUTF8($string);
00107         $string = htmlspecialchars($string, ENT_COMPAT, 'UTF-8');
00108         return $string;
00109     }
00110 
00116     protected function listify($array, $polite = false) {
00117         if (empty($array)) return 'None';
00118         $ret = '';
00119         $i = count($array);
00120         foreach ($array as $value) {
00121             $i--;
00122             $ret .= $value;
00123             if ($i > 0 && !($polite && $i == 1)) $ret .= ', ';
00124             if ($polite && $i == 1) $ret .= 'and ';
00125         }
00126         return $ret;
00127     }
00128 
00134     protected function getClass($obj, $sec_prefix = '') {
00135         static $five = null;
00136         if ($five === null) $five = version_compare(PHP_VERSION, '5', '>=');
00137         $prefix = 'HTMLPurifier_' . $sec_prefix;
00138         if (!$five) $prefix = strtolower($prefix);
00139         $class = str_replace($prefix, '', get_class($obj));
00140         $lclass = strtolower($class);
00141         $class .= '(';
00142         switch ($lclass) {
00143             case 'enum':
00144                 $values = array();
00145                 foreach ($obj->valid_values as $value => $bool) {
00146                     $values[] = $value;
00147                 }
00148                 $class .= implode(', ', $values);
00149                 break;
00150             case 'css_composite':
00151                 $values = array();
00152                 foreach ($obj->defs as $def) {
00153                     $values[] = $this->getClass($def, $sec_prefix);
00154                 }
00155                 $class .= implode(', ', $values);
00156                 break;
00157             case 'css_multiple':
00158                 $class .= $this->getClass($obj->single, $sec_prefix) . ', ';
00159                 $class .= $obj->max;
00160                 break;
00161             case 'css_denyelementdecorator':
00162                 $class .= $this->getClass($obj->def, $sec_prefix) . ', ';
00163                 $class .= $obj->element;
00164                 break;
00165             case 'css_importantdecorator':
00166                 $class .= $this->getClass($obj->def, $sec_prefix);
00167                 if ($obj->allow) $class .= ', !important';
00168                 break;
00169         }
00170         $class .= ')';
00171         return $class;
00172     }
00173 
00174 }
00175 
00176 // vim: et sw=4 sts=4