1
0
mirror of https://github.com/ezyang/htmlpurifier.git synced 2025-07-30 19:00:10 +02:00

[1.7.0] Add DefinitionCache decorators, implement Memory decorator

- Move serialization responsibility to Config
- Create DefinitionCacheFactory
- Implement Null definition cache

git-svn-id: http://htmlpurifier.org/svnroot/htmlpurifier/trunk@1117 48356398-32a2-884e-a903-53898d9a118a
This commit is contained in:
Edward Z. Yang
2007-05-29 20:21:33 +00:00
parent d1187ed331
commit 002395de09
16 changed files with 509 additions and 75 deletions

View File

@@ -6,7 +6,7 @@ require_once 'HTMLPurifier/ConfigSchema.php';
require_once 'HTMLPurifier/HTMLDefinition.php';
require_once 'HTMLPurifier/CSSDefinition.php';
require_once 'HTMLPurifier/Doctype.php';
require_once 'HTMLPurifier/DefinitionCache.php';
require_once 'HTMLPurifier/DefinitionCacheFactory.php';
// accomodations for versions earlier than 4.3.10 and 5.0.2
// borrowed from PHP_Compat, LGPL licensed, by Aidan Lister <aidan@php.net>
@@ -76,6 +76,12 @@ class HTMLPurifier_Config
*/
var $autoFinalize = true;
/**
* Namespace indexed array of serials for specific namespaces (see
* getSerial for more info).
*/
var $serials = array();
/**
* @param $definition HTMLPurifier_ConfigSchema that defines what directives
* are allowed.
@@ -149,6 +155,18 @@ class HTMLPurifier_Config
return $this->conf[$namespace];
}
/**
* Returns a md5 signature of a segment of the configuration object
* that uniquely identifies that particular configuration
* @param $namespace Namespace to get serial for
*/
function getBatchSerial($namespace) {
if (empty($this->serials[$namespace])) {
$this->serials[$namespace] = md5(serialize($this->getBatch($namespace)));
}
return $this->serials[$namespace];
}
/**
* Retrieves all directives, organized by namespace
*/
@@ -210,6 +228,8 @@ class HTMLPurifier_Config
if ($namespace == 'HTML' || $namespace == 'CSS') {
$this->definitions[$namespace] = null;
}
$this->serials[$namespace] = false;
}
/**
@@ -235,7 +255,8 @@ class HTMLPurifier_Config
*/
function &getDefinition($type, $raw = false) {
if (!$this->finalized && $this->autoFinalize) $this->finalize();
$cache = HTMLPurifier_DefinitionCache::create($type, $this);
$factory = HTMLPurifier_DefinitionCacheFactory::instance();
$cache = $factory->create($type, $this);
if (!$raw) {
// see if we can quickly supply a definition
if (!empty($this->definitions[$type])) {