0
0
mirror of https://github.com/ezyang/htmlpurifier.git synced 2024-12-22 16:31:53 +00:00

Optimize files by removing is_a() calls in favor of static type member variables.

git-svn-id: http://htmlpurifier.org/svnroot/html_purifier/trunk@56 48356398-32a2-884e-a903-53898d9a118a
This commit is contained in:
Edward Z. Yang 2006-07-18 23:40:20 +00:00
parent 5391195170
commit 2a2d8cbd76
2 changed files with 44 additions and 18 deletions

View File

@ -5,7 +5,7 @@
class MF {}
class MF_Tag extends MF
class MF_Tag extends MF // abstract
{
var $name;
function MF_Tag($name) {
@ -14,7 +14,7 @@ class MF_Tag extends MF
}
}
class MF_TagWithAttributes extends MF_Tag
class MF_TagWithAttributes extends MF_Tag // abstract
{
var $attributes = array();
function MF_TagWithAttributes($name, $attributes = array()) {
@ -23,13 +23,25 @@ class MF_TagWithAttributes extends MF_Tag
}
}
class MF_StartTag extends MF_TagWithAttributes {}
class MF_EmptyTag extends MF_TagWithAttributes {}
class MF_EndTag extends MF_Tag {}
class MF_StartTag extends MF_TagWithAttributes
{
var $type = 'start';
}
class MF_EmptyTag extends MF_TagWithAttributes
{
var $type = 'empty';
}
class MF_EndTag extends MF_Tag
{
var $type = 'end';
}
class MF_Text extends MF
{
var $name = '#PCDATA';
var $type = 'text';
var $data;
var $is_whitespace = false;
function MF_Text($data) {
@ -44,6 +56,7 @@ class MF_Text extends MF
class MF_Comment extends MF
{
var $data;
var $type = 'comment';
function MF_Comment($data) {
$this->data = $data;
}

View File

@ -165,10 +165,10 @@ class PureHTMLDefinition
$this->generator->generateFromToken($token)
);
}
} elseif (is_a($token, 'MF_Comment')) {
} elseif ($token->type == 'comment') {
// strip comments
continue;
} elseif (is_a($token, 'MF_Text')) {
} elseif ($token->type == 'text') {
} else {
continue;
}
@ -189,16 +189,16 @@ class PureHTMLDefinition
$info = $this->info[$token->name]; // assumption but valid
// test if it claims to be a start tag but is empty
if (is_a($info->child_def, 'HTMLDTD_ChildDef_Empty') &&
is_a($token, 'MF_StartTag') ) {
if ($info->child_def->type == 'empty' &&
$token->type == 'start' ) {
$result[] = new MF_EmptyTag($token->name, $token->attributes);
continue;
}
// test if it claims to be empty but really is a start tag
if (!is_a($info->child_def, 'HTMLDTD_ChildDef_Empty') &&
is_a($token, 'MF_EmptyTag') ) {
if ($info->child_def->type != 'empty' &&
$token->type == 'empty' ) {
$result[] = new MF_StartTag($token->name, $token->attributes);
$result[] = new MF_EndTag($token->name);
@ -207,14 +207,14 @@ class PureHTMLDefinition
}
// automatically insert empty tags
if (is_a($token, 'MF_EmptyTag')) {
if ($token->type == 'empty') {
$result[] = $token;
continue;
}
// we give start tags precedence, so automatically accept unless...
// it's one of those special cases
if (is_a($token, 'MF_StartTag')) {
if ($token->type == 'start') {
// if there's a parent, check for special case
if (!empty($current_nesting)) {
@ -253,7 +253,7 @@ class PureHTMLDefinition
}
// sanity check
if (!is_a($token, 'MF_EndTag')) continue;
if ($token->type != 'end') continue;
// okay, we're dealing with a closing tag
@ -326,6 +326,16 @@ class PureHTMLDefinition
function fixNesting($tokens) {
if (empty($this->info)) $this->loadData();
/*$to_next_node = 0; // defines how much further to scroll to get
// to next node.
for ($i = 0, $size = count($tokens) ; $i < $size; $i += $to_next_node) {
// scroll to the end of this node, and report number
for ($j = $i, $depth = 0; ; $j++) {
}
}*/
}
function validateAttributes($tokens) {
@ -384,9 +394,9 @@ class HTMLDTD_ChildDef
$is_child = ($nesting == 0); // direct
if (is_a($token, 'MF_StartTag')) {
if ($token->type == 'start') {
$nesting++;
} elseif (is_a($token, 'MF_EndTag')) {
} elseif ($token->type == 'end') {
$nesting--;
}
@ -424,6 +434,7 @@ class HTMLDTD_ChildDef_Simple extends HTMLDTD_ChildDef
}
class HTMLDTD_ChildDef_Required extends HTMLDTD_ChildDef_Simple
{
var $type = 'required';
function validateChildren($tokens_of_children) {
// if there are no tokens, delete parent node
if (empty($tokens_of_children)) return false;
@ -454,9 +465,9 @@ class HTMLDTD_ChildDef_Required extends HTMLDTD_ChildDef_Simple
$is_child = ($nesting == 0);
if (is_a($token, 'MF_StartTag')) {
if ($token->type == 'start') {
$nesting++;
} elseif (is_a($token, 'MF_EndTag')) {
} elseif ($token->type == 'end') {
$nesting--;
}
@ -491,6 +502,7 @@ class HTMLDTD_ChildDef_Required extends HTMLDTD_ChildDef_Simple
// instead of a false (to delete the node)
class HTMLDTD_ChildDef_Optional extends HTMLDTD_ChildDef_Required
{
var $type = 'optional';
function validateChildren($tokens_of_children) {
$result = parent::validateChildren($tokens_of_children);
if ($result === false) return array();
@ -501,6 +513,7 @@ class HTMLDTD_ChildDef_Optional extends HTMLDTD_ChildDef_Required
// placeholder
class HTMLDTD_ChildDef_Empty extends HTMLDTD_ChildDef
{
var $type = 'empty';
function HTMLDTD_ChildDef_Empty() {}
function validateChildren() {
return false;