merge from 1.6 ( html purifier lib )

git-svn-id: http://xe-core.googlecode.com/svn/branches/1.5.0@10579 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
ovclas 2012-04-20 07:34:00 +00:00
parent 8943ff97f3
commit 7ea7157ce7
813 changed files with 65203 additions and 0 deletions

View file

@ -0,0 +1,18 @@
<?php
class HTMLPurifier_Strategy_MakeWellFormed_EndInsertInjector extends HTMLPurifier_Injector
{
public $name = 'EndInsertInjector';
public $needed = array('span');
public function handleEnd(&$token) {
if ($token->name == 'div') return;
$token = array(
new HTMLPurifier_Token_Start('b'),
new HTMLPurifier_Token_Text('Comment'),
new HTMLPurifier_Token_End('b'),
$token
);
}
}
// vim: et sw=4 sts=4

View file

@ -0,0 +1,38 @@
<?php
class HTMLPurifier_Strategy_MakeWellFormed_EndInsertInjectorTest extends HTMLPurifier_StrategyHarness
{
function setUp() {
parent::setUp();
$this->obj = new HTMLPurifier_Strategy_MakeWellFormed();
$this->config->set('AutoFormat.Custom', array(
new HTMLPurifier_Strategy_MakeWellFormed_EndInsertInjector()
));
}
function testEmpty() {
$this->assertResult('');
}
function testNormal() {
$this->assertResult('<i>Foo</i>', '<i>Foo<b>Comment</b></i>');
}
function testEndOfDocumentProcessing() {
$this->assertResult('<i>Foo', '<i>Foo<b>Comment</b></i>');
}
function testDoubleEndOfDocumentProcessing() {
$this->assertResult('<i><i>Foo', '<i><i>Foo<b>Comment</b></i><b>Comment</b></i>');
}
function testEndOfNodeProcessing() {
$this->assertResult('<div><i>Foo</div>asdf', '<div><i>Foo<b>Comment</b></i></div><i>asdf<b>Comment</b></i>');
}
function testEmptyToStartEndProcessing() {
$this->assertResult('<i />', '<i><b>Comment</b></i>');
}
function testSpuriousEndTag() {
$this->assertResult('</i>', '');
}
function testLessButStillSpuriousEndTag() {
$this->assertResult('<div></i></div>', '<div></div>');
}
}
// vim: et sw=4 sts=4

View file

@ -0,0 +1,29 @@
<?php
class HTMLPurifier_Strategy_MakeWellFormed_EndRewindInjector extends HTMLPurifier_Injector
{
public $name = 'EndRewindInjector';
public $needed = array('span');
public function handleElement(&$token) {
if (isset($token->_InjectorTest_EndRewindInjector_delete)) {
$token = false;
}
}
public function handleText(&$token) {
$token = false;
}
public function handleEnd(&$token) {
$i = null;
if (
$this->backward($i, $prev) &&
$prev instanceof HTMLPurifier_Token_Start &&
$prev->name == 'span'
) {
$token = false;
$prev->_InjectorTest_EndRewindInjector_delete = true;
$this->rewind($i);
}
}
}
// vim: et sw=4 sts=4

View file

@ -0,0 +1,33 @@
<?php
class HTMLPurifier_Strategy_MakeWellFormed_EndRewindInjectorTest extends HTMLPurifier_StrategyHarness
{
function setUp() {
parent::setUp();
$this->obj = new HTMLPurifier_Strategy_MakeWellFormed();
$this->config->set('AutoFormat.Custom', array(
new HTMLPurifier_Strategy_MakeWellFormed_EndRewindInjector()
));
}
function testBasic() {
$this->assertResult('');
}
function testFunction() {
$this->assertResult('<span>asdf</span>','');
}
function testFailedFunction() {
$this->assertResult('<span>asd<b>asdf</b>asdf</span>','<span><b></b></span>');
}
function testPadded() {
$this->assertResult('<b></b><span>asdf</span><b></b>','<b></b><b></b>');
}
function testDoubled() {
$this->config->set('AutoFormat.Custom', array(
new HTMLPurifier_Strategy_MakeWellFormed_EndRewindInjector(),
new HTMLPurifier_Strategy_MakeWellFormed_EndRewindInjector(),
));
$this->assertResult('<b></b><span>asdf</span>', '<b></b>');
}
}
// vim: et sw=4 sts=4

View file

@ -0,0 +1,12 @@
<?php
class HTMLPurifier_Strategy_MakeWellFormed_SkipInjector extends HTMLPurifier_Injector
{
public $name = 'EndRewindInjector';
public $needed = array('span');
public function handleElement(&$token) {
$token = array(clone $token, clone $token);
}
}
// vim: et sw=4 sts=4

View file

@ -0,0 +1,27 @@
<?php
class HTMLPurifier_Strategy_MakeWellFormed_SkipInjectorTest extends HTMLPurifier_StrategyHarness
{
function setUp() {
parent::setUp();
$this->obj = new HTMLPurifier_Strategy_MakeWellFormed();
$this->config->set('AutoFormat.Custom', array(
new HTMLPurifier_Strategy_MakeWellFormed_SkipInjector()
));
}
function testEmpty() {
$this->assertResult('');
}
function testMultiply() {
$this->assertResult('<br />', '<br /><br />');
}
function testMultiplyMultiply() {
$this->config->set('AutoFormat.Custom', array(
new HTMLPurifier_Strategy_MakeWellFormed_SkipInjector(),
new HTMLPurifier_Strategy_MakeWellFormed_SkipInjector()
));
$this->assertResult('<br />', '<br /><br /><br /><br />');
}
}
// vim: et sw=4 sts=4