1, 'th' => 1, 'td' => 1, 'iframe' => 1 ); /** * * @param HTMLPurifier_Config $config * @param HTMLPurifier_Context $context * @return void */ public function prepare($config, $context) { parent::prepare ( $config, $context ); $this->config = $config; $this->context = $context; $this->removeNbsp = $config->get ( 'AutoFormat.RemoveEmpty.RemoveNbsp' ); $this->removeNbspExceptions = $config->get ( 'AutoFormat.RemoveEmpty.RemoveNbsp.Exceptions' ); $this->attrValidator = new HTMLPurifier_AttrValidator (); } /** * * @param HTMLPurifier_Token $token */ public function handleElement(&$token) { if (! $token instanceof HTMLPurifier_Token_Start) { return; } $next = false; $deleted = 1; // the current tag for($i = count ( $this->inputZipper->back ) - 1; $i >= 0; $i --, $deleted ++) { $next = $this->inputZipper->back [$i]; if ($next instanceof HTMLPurifier_Token_Text) { if ($next->is_whitespace) { continue; } if ($this->removeNbsp && ! isset ( $this->removeNbspExceptions [$token->name] )) { $plain = str_replace ( "\xC2\xA0", "", $next->data ); $isWsOrNbsp = $plain === '' || ctype_space ( $plain ); if ($isWsOrNbsp) { continue; } } } break; } if (! $next || ($next instanceof HTMLPurifier_Token_End && $next->name == $token->name)) { if (isset ( $this->_exclude [$token->name] )) { return; } $this->attrValidator->validateToken ( $token, $this->config, $this->context ); $token->armor ['ValidateAttributes'] = true; if (isset ( $token->attr ['id'] ) || isset ( $token->attr ['name'] )) { return; } $token = $deleted + 1; for($b = 0, $c = count ( $this->inputZipper->front ); $b < $c; $b ++) { $prev = $this->inputZipper->front [$b]; if ($prev instanceof HTMLPurifier_Token_Text && $prev->is_whitespace) { continue; } break; } // This is safe because we removed the token that triggered this. $this->rewindOffset ( $b + $deleted ); return; } } } // vim: et sw=4 sts=4