mirror of
https://github.com/ezyang/htmlpurifier.git
synced 2024-12-22 16:31:53 +00:00
[3.1.0] Implement ConfigSchema interchange
- Implement exception hierarchy git-svn-id: http://htmlpurifier.org/svnroot/htmlpurifier/trunk@1582 48356398-32a2-884e-a903-53898d9a118a
This commit is contained in:
parent
c521e3a534
commit
240b565513
2
NEWS
2
NEWS
@ -33,6 +33,8 @@ NEWS ( CHANGELOG and HISTORY ) HTMLPurifier
|
||||
from CSS, but you can enable it using %CSS.AllowImportant
|
||||
! Support for display and visibility CSS properties added, set %CSS.AllowTricky
|
||||
to true to use them.
|
||||
! HTML Purifier now has its own Exception hierarchy under HTMLPurifier_Exception.
|
||||
Developer error (not enduser error) can cause these to be triggered.
|
||||
- Autoclose now operates iteratively, i.e. <span><span><div> now has
|
||||
both span tags closed.
|
||||
- Various HTMLPurifier_Config convenience functions now accept another parameter
|
||||
|
@ -43,6 +43,7 @@ require 'HTMLPurifier/EntityLookup.php';
|
||||
require 'HTMLPurifier/EntityParser.php';
|
||||
require 'HTMLPurifier/Error.php';
|
||||
require 'HTMLPurifier/ErrorCollector.php';
|
||||
require 'HTMLPurifier/Exception.php';
|
||||
require 'HTMLPurifier/Filter.php';
|
||||
require 'HTMLPurifier/Generator.php';
|
||||
require 'HTMLPurifier/HTMLDefinition.php';
|
||||
@ -122,6 +123,8 @@ require 'HTMLPurifier/ChildDef/Table.php';
|
||||
require 'HTMLPurifier/ConfigDef/Directive.php';
|
||||
require 'HTMLPurifier/ConfigDef/DirectiveAlias.php';
|
||||
require 'HTMLPurifier/ConfigDef/Namespace.php';
|
||||
require 'HTMLPurifier/ConfigSchema/Exception.php';
|
||||
require 'HTMLPurifier/ConfigSchema/Interchange.php';
|
||||
require 'HTMLPurifier/ConfigSchema/StringHash.php';
|
||||
require 'HTMLPurifier/ConfigSchema/StringHashAdapter.php';
|
||||
require 'HTMLPurifier/ConfigSchema/StringHashParser.php';
|
||||
|
9
library/HTMLPurifier/ConfigSchema/Exception.php
Normal file
9
library/HTMLPurifier/ConfigSchema/Exception.php
Normal file
@ -0,0 +1,9 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Exceptions related to configuration schema
|
||||
*/
|
||||
class HTMLPurifier_ConfigSchema_Exception extends HTMLPurifier_Exception
|
||||
{
|
||||
|
||||
}
|
54
library/HTMLPurifier/ConfigSchema/Interchange.php
Normal file
54
library/HTMLPurifier/ConfigSchema/Interchange.php
Normal file
@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Generic schema interchange format that can be converted to a runtime
|
||||
* representation (HTMLPurifier_ConfigSchema) or HTML documentation. Members
|
||||
* are completely validated.
|
||||
*/
|
||||
class HTMLPurifier_ConfigSchema_Interchange
|
||||
{
|
||||
|
||||
/**
|
||||
* Hash table of allowed types.
|
||||
*/
|
||||
public $types = array(
|
||||
'string' => 'String',
|
||||
'istring' => 'Case-insensitive string',
|
||||
'text' => 'Text',
|
||||
'itext' => 'Case-insensitive text',
|
||||
'int' => 'Integer',
|
||||
'float' => 'Float',
|
||||
'bool' => 'Boolean',
|
||||
'lookup' => 'Lookup array',
|
||||
'list' => 'Array list',
|
||||
'hash' => 'Associative array',
|
||||
'mixed' => 'Mixed'
|
||||
);
|
||||
|
||||
/**
|
||||
* Array of Namespace ID => array(namespace info)
|
||||
*/
|
||||
public $namespaces;
|
||||
|
||||
/**
|
||||
* Array of Directive ID => array(directive info)
|
||||
*/
|
||||
public $directives;
|
||||
|
||||
/**
|
||||
* Adds a namespace array to $namespaces
|
||||
*/
|
||||
public function addNamespace($arr) {
|
||||
if (!isset($arr['ID'])) throw new HTMLPurifier_ConfigSchema_Exception('Namespace must have ID');
|
||||
$this->namespaces[$arr['ID']] = $arr;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a directive array to $directives
|
||||
*/
|
||||
public function addDirective($arr) {
|
||||
if (!isset($arr['ID'])) throw new HTMLPurifier_ConfigSchema_Exception('Directive must have ID');
|
||||
$this->directives[$arr['ID']] = $arr;
|
||||
}
|
||||
|
||||
}
|
@ -32,7 +32,7 @@ class HTMLPurifier_ConfigSchema_StringHashParser
|
||||
public $default = 'ID';
|
||||
|
||||
public function parseFile($file) {
|
||||
if (!file_exists($file)) throw new Exception('File does not exist');
|
||||
if (!file_exists($file)) throw new HTMLPurifier_ConfigSchema_Exception('File ' . $file . ' does not exist');
|
||||
$fh = fopen($file, 'r');
|
||||
$state = false;
|
||||
$single = false;
|
||||
|
11
library/HTMLPurifier/Exception.php
Normal file
11
library/HTMLPurifier/Exception.php
Normal file
@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Global exception class for HTML Purifier; any exceptions we throw
|
||||
* are from here.
|
||||
*/
|
||||
class HTMLPurifier_Exception extends Exception
|
||||
{
|
||||
|
||||
}
|
||||
|
44
tests/HTMLPurifier/ConfigSchema/InterchangeTest.php
Normal file
44
tests/HTMLPurifier/ConfigSchema/InterchangeTest.php
Normal file
@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
class HTMLPurifier_ConfigSchema_InterchangeTest extends UnitTestCase
|
||||
{
|
||||
|
||||
protected $interchange;
|
||||
|
||||
public function setup() {
|
||||
$this->interchange = new HTMLPurifier_ConfigSchema_Interchange();
|
||||
}
|
||||
|
||||
public function testAddNamespace() {
|
||||
$this->interchange->addNamespace($v = array(
|
||||
'ID' => 'Namespace',
|
||||
'Foo' => 'Bar',
|
||||
));
|
||||
$this->assertIdentical($v, $this->interchange->namespaces['Namespace']);
|
||||
}
|
||||
|
||||
public function testAddNamespaceError() {
|
||||
try {
|
||||
$this->interchange->addNamespace(array());
|
||||
} catch (HTMLPurifier_ConfigSchema_Exception $e) {
|
||||
$this->assertIdentical($e->getMessage(), 'Namespace must have ID');
|
||||
}
|
||||
}
|
||||
|
||||
public function testAddDirective() {
|
||||
$this->interchange->addDirective($v = array(
|
||||
'ID' => 'Namespace.Directive',
|
||||
'Foo' => 'Bar',
|
||||
));
|
||||
$this->assertIdentical($v, $this->interchange->directives['Namespace.Directive']);
|
||||
}
|
||||
|
||||
public function testAddDirectiveError() {
|
||||
try {
|
||||
$this->interchange->addDirective(array());
|
||||
} catch (HTMLPurifier_ConfigSchema_Exception $e) {
|
||||
$this->assertIdentical($e->getMessage(), 'Directive must have ID');
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -52,4 +52,12 @@ class HTMLPurifier_ConfigSchema_StringHashParserTest extends UnitTestCase
|
||||
));
|
||||
}
|
||||
|
||||
function testError() {
|
||||
try {
|
||||
$this->parser->parseFile('NoExist.txt');
|
||||
} catch (HTMLPurifier_ConfigSchema_Exception $e) {
|
||||
$this->assertIdentical($e->getMessage(), 'File NoExist.txt does not exist');
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -65,6 +65,7 @@ $test_files[] = 'HTMLPurifier/ChildDef/RequiredTest.php';
|
||||
$test_files[] = 'HTMLPurifier/ChildDef/StrictBlockquoteTest.php';
|
||||
$test_files[] = 'HTMLPurifier/ChildDef/TableTest.php';
|
||||
$test_files[] = 'HTMLPurifier/ConfigSchemaTest.php';
|
||||
$test_files[] = 'HTMLPurifier/ConfigSchema/InterchangeTest.php';
|
||||
$test_files[] = 'HTMLPurifier/ConfigSchema/StringHashAdapterTest.php';
|
||||
$test_files[] = 'HTMLPurifier/ConfigSchema/StringHashReverseAdapterTest.php';
|
||||
$test_files[] = 'HTMLPurifier/ConfigSchema/StringHashParserTest.php';
|
||||
|
Loading…
Reference in New Issue
Block a user