HTMLPurifier 4.4.0
|
00001 <?php 00002 00003 class HTMLPurifier_DoctypeRegistry 00004 { 00005 00009 protected $doctypes; 00010 00014 protected $aliases; 00015 00026 public function register($doctype, $xml = true, $modules = array(), 00027 $tidy_modules = array(), $aliases = array(), $dtd_public = null, $dtd_system = null 00028 ) { 00029 if (!is_array($modules)) $modules = array($modules); 00030 if (!is_array($tidy_modules)) $tidy_modules = array($tidy_modules); 00031 if (!is_array($aliases)) $aliases = array($aliases); 00032 if (!is_object($doctype)) { 00033 $doctype = new HTMLPurifier_Doctype( 00034 $doctype, $xml, $modules, $tidy_modules, $aliases, $dtd_public, $dtd_system 00035 ); 00036 } 00037 $this->doctypes[$doctype->name] = $doctype; 00038 $name = $doctype->name; 00039 // hookup aliases 00040 foreach ($doctype->aliases as $alias) { 00041 if (isset($this->doctypes[$alias])) continue; 00042 $this->aliases[$alias] = $name; 00043 } 00044 // remove old aliases 00045 if (isset($this->aliases[$name])) unset($this->aliases[$name]); 00046 return $doctype; 00047 } 00048 00056 public function get($doctype) { 00057 if (isset($this->aliases[$doctype])) $doctype = $this->aliases[$doctype]; 00058 if (!isset($this->doctypes[$doctype])) { 00059 trigger_error('Doctype ' . htmlspecialchars($doctype) . ' does not exist', E_USER_ERROR); 00060 $anon = new HTMLPurifier_Doctype($doctype); 00061 return $anon; 00062 } 00063 return $this->doctypes[$doctype]; 00064 } 00065 00074 public function make($config) { 00075 return clone $this->get($this->getDoctypeFromConfig($config)); 00076 } 00077 00081 public function getDoctypeFromConfig($config) { 00082 // recommended test 00083 $doctype = $config->get('HTML.Doctype'); 00084 if (!empty($doctype)) return $doctype; 00085 $doctype = $config->get('HTML.CustomDoctype'); 00086 if (!empty($doctype)) return $doctype; 00087 // backwards-compatibility 00088 if ($config->get('HTML.XHTML')) { 00089 $doctype = 'XHTML 1.0'; 00090 } else { 00091 $doctype = 'HTML 4.01'; 00092 } 00093 if ($config->get('HTML.Strict')) { 00094 $doctype .= ' Strict'; 00095 } else { 00096 $doctype .= ' Transitional'; 00097 } 00098 return $doctype; 00099 } 00100 00101 } 00102 00103 // vim: et sw=4 sts=4