Seditio Source
Root |
./othercms/ips_4.3.4/system/3rd_party/HTMLPurifier/HTMLPurifier/ChildDef/StrictBlockquote.php
<?php

/**
 * Takes the contents of blockquote when in strict and reformats for validation.
 */
class HTMLPurifier_ChildDef_StrictBlockquote extends HTMLPurifier_ChildDef_Required
{
   
/**
     * @type array
     */
   
protected $real_elements;

   
/**
     * @type array
     */
   
protected $fake_elements;

   
/**
     * @type bool
     */
   
public $allow_empty = true;

   
/**
     * @type string
     */
   
public $type = 'strictblockquote';

   
/**
     * @type bool
     */
   
protected $init = false;

   
/**
     * @param HTMLPurifier_Config $config
     * @return array
     * @note We don't want MakeWellFormed to auto-close inline elements since
     *       they might be allowed.
     */
   
public function getAllowedElements($config)
    {
       
$this->init($config);
        return
$this->fake_elements;
    }

   
/**
     * @param array $children
     * @param HTMLPurifier_Config $config
     * @param HTMLPurifier_Context $context
     * @return array
     */
   
public function validateChildren($children, $config, $context)
    {
       
$this->init($config);

       
// trick the parent class into thinking it allows more
       
$this->elements = $this->fake_elements;
       
$result = parent::validateChildren($children, $config, $context);
       
$this->elements = $this->real_elements;

        if (
$result === false) {
            return array();
        }
        if (
$result === true) {
           
$result = $children;
        }

       
$def = $config->getHTMLDefinition();
       
$block_wrap_name = $def->info_block_wrapper;
       
$block_wrap = false;
       
$ret = array();

        foreach (
$result as $node) {
            if (
$block_wrap === false) {
                if ((
$node instanceof HTMLPurifier_Node_Text && !$node->is_whitespace) ||
                    (
$node instanceof HTMLPurifier_Node_Element && !isset($this->elements[$node->name]))) {
                       
$block_wrap = new HTMLPurifier_Node_Element($def->info_block_wrapper);
                       
$ret[] = $block_wrap;
                }
            } else {
                if (
$node instanceof HTMLPurifier_Node_Element && isset($this->elements[$node->name])) {
                   
$block_wrap = false;

                }
            }
            if (
$block_wrap) {
               
$block_wrap->children[] = $node;
            } else {
               
$ret[] = $node;
            }
        }
        return
$ret;
    }

   
/**
     * @param HTMLPurifier_Config $config
     */
   
private function init($config)
    {
        if (!
$this->init) {
           
$def = $config->getHTMLDefinition();
           
// allow all inline elements
           
$this->real_elements = $this->elements;
           
$this->fake_elements = $def->info_content_sets['Flow'];
           
$this->fake_elements['#PCDATA'] = true;
           
$this->init = true;
        }
    }
}

// vim: et sw=4 sts=4