HTMLPurifier 4.4.0
/home/ezyang/Dev/htmlpurifier/library/HTMLPurifier/DoctypeRegistry.php
Go to the documentation of this file.
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