mirror of
https://github.com/ezyang/htmlpurifier.git
synced 2025-01-03 13:21:51 +00:00
Handle <ol><ol> properly by adding missing <li> tag.
Signed-off-by: Edward Z. Yang <ezyang@mit.edu>
This commit is contained in:
parent
4d612d5a77
commit
70a7a3f5dd
1
NEWS
1
NEWS
@ -17,6 +17,7 @@ NEWS ( CHANGELOG and HISTORY ) HTMLPurifier
|
|||||||
! Support flashvars when using %HTML.SafeObject
|
! Support flashvars when using %HTML.SafeObject
|
||||||
! Support for Internet Explorer compatibility with %HTML.SafeObject
|
! Support for Internet Explorer compatibility with %HTML.SafeObject
|
||||||
using %Output.FlashCompat.
|
using %Output.FlashCompat.
|
||||||
|
! Handle <ol><ol> properly, by inserting the necessary <li> tag.
|
||||||
|
|
||||||
4.0.0, released 2009-07-07
|
4.0.0, released 2009-07-07
|
||||||
# APIs for ConfigSchema subsystem have substantially changed. See
|
# APIs for ConfigSchema subsystem have substantially changed. See
|
||||||
|
@ -97,6 +97,13 @@ class HTMLPurifier_ElementDef
|
|||||||
*/
|
*/
|
||||||
public $autoclose = array();
|
public $autoclose = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If a foreign element is found in this element, test if it is
|
||||||
|
* allowed by this sub-element; if it is, instead of closing the
|
||||||
|
* current element, place it inside this element.
|
||||||
|
*/
|
||||||
|
public $wrap;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Whether or not this is a formatting element affected by the
|
* Whether or not this is a formatting element affected by the
|
||||||
* "Active Formatting Elements" algorithm.
|
* "Active Formatting Elements" algorithm.
|
||||||
|
@ -20,8 +20,10 @@ class HTMLPurifier_HTMLModule_List extends HTMLPurifier_HTMLModule
|
|||||||
public $content_sets = array('Flow' => 'List');
|
public $content_sets = array('Flow' => 'List');
|
||||||
|
|
||||||
public function setup($config) {
|
public function setup($config) {
|
||||||
$this->addElement('ol', 'List', 'Required: li', 'Common');
|
$ol = $this->addElement('ol', 'List', 'Required: li', 'Common');
|
||||||
$this->addElement('ul', 'List', 'Required: li', 'Common');
|
$ol->wrap = "li";
|
||||||
|
$ul = $this->addElement('ul', 'List', 'Required: li', 'Common');
|
||||||
|
$ul->wrap = "li";
|
||||||
$this->addElement('dl', 'List', 'Required: dt | dd', 'Common');
|
$this->addElement('dl', 'List', 'Required: dt | dd', 'Common');
|
||||||
|
|
||||||
$this->addElement('li', false, 'Flow', 'Common');
|
$this->addElement('li', false, 'Flow', 'Common');
|
||||||
|
@ -220,6 +220,19 @@ class HTMLPurifier_Strategy_MakeWellFormed extends HTMLPurifier_Strategy
|
|||||||
$autoclose = false;
|
$autoclose = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($autoclose && $definition->info[$token->name]->wrap) {
|
||||||
|
// check if this is actually a wrap (mmm wraps!)
|
||||||
|
$wrapname = $definition->info[$token->name]->wrap;
|
||||||
|
$wrapdef = $definition->info[$wrapname];
|
||||||
|
$elements = $wrapdef->child->getAllowedElements($config);
|
||||||
|
if (isset($elements[$token->name])) {
|
||||||
|
$newtoken = new HTMLPurifier_Token_Start($wrapname);
|
||||||
|
$this->insertBefore($newtoken);
|
||||||
|
$reprocess = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$carryover = false;
|
$carryover = false;
|
||||||
if ($autoclose && $definition->info[$parent->name]->formatting) {
|
if ($autoclose && $definition->info[$parent->name]->formatting) {
|
||||||
$carryover = true;
|
$carryover = true;
|
||||||
|
@ -116,6 +116,27 @@ class HTMLPurifier_Strategy_MakeWellFormedTest extends HTMLPurifier_StrategyHarn
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function testNestedOl() {
|
||||||
|
$this->assertResult(
|
||||||
|
'<ol><ol></ol></ol>',
|
||||||
|
'<ol><li><ol></ol></li></ol>'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function testNestedUl() {
|
||||||
|
$this->assertResult(
|
||||||
|
'<ul><ul></ul></ul>',
|
||||||
|
'<ul><li><ul></ul></li></ul>'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function testNestedOlWithStrangeEnding() {
|
||||||
|
$this->assertResult(
|
||||||
|
'<ol><li><ol><ol><li>foo</li></ol></li><li>foo</li></ol>',
|
||||||
|
'<ol><li><ol><li><ol><li>foo</li></ol></li><li>foo</li></ol></li></ol>'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
// vim: et sw=4 sts=4
|
||||||
|
Loading…
Reference in New Issue
Block a user