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
00040 foreach ($doctype->aliases as $alias) {
00041 if (isset($this->doctypes[$alias])) continue;
00042 $this->aliases[$alias] = $name;
00043 }
00044
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
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
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