| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 | 
							- <?php
 
- class HTMLPurifier_Injector_RemoveEmpty extends HTMLPurifier_Injector
 
- {
 
-     /**
 
-      * @type HTMLPurifier_Context
 
-      */
 
-     private $context;
 
-     /**
 
-      * @type HTMLPurifier_Config
 
-      */
 
-     private $config;
 
-     /**
 
-      * @type HTMLPurifier_AttrValidator
 
-      */
 
-     private $attrValidator;
 
-     /**
 
-      * @type bool
 
-      */
 
-     private $removeNbsp;
 
-     /**
 
-      * @type bool
 
-      */
 
-     private $removeNbspExceptions;
 
-     /**
 
-      * Cached contents of %AutoFormat.RemoveEmpty.Predicate
 
-      * @type array
 
-      */
 
-     private $exclude;
 
-     /**
 
-      * @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->exclude = $config->get('AutoFormat.RemoveEmpty.Predicate');
 
-         foreach ($this->exclude as $key => $attrs) {
 
-             if (!is_array($attrs)) {
 
-                 // HACK, see HTMLPurifier/Printer/ConfigForm.php
 
-                 $this->exclude[$key] = explode(';', $attrs);
 
-             }
 
-         }
 
-         $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)) {
 
-             $this->attrValidator->validateToken($token, $this->config, $this->context);
 
-             $token->armor['ValidateAttributes'] = true;
 
-             if (isset($this->exclude[$token->name])) {
 
-                 $r = true;
 
-                 foreach ($this->exclude[$token->name] as $elem) {
 
-                     if (!isset($token->attr[$elem])) $r = false;
 
-                 }
 
-                 if ($r) return;
 
-             }
 
-             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
 
 
  |