| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 | <?php/** * Factory for token generation. * * @note Doing some benchmarking indicates that the new operator is much *       slower than the clone operator (even discounting the cost of the *       constructor).  This class is for that optimization. *       Other then that, there's not much point as we don't *       maintain parallel HTMLPurifier_Token hierarchies (the main reason why *       you'd want to use an abstract factory). * @todo Port DirectLex to use this */class HTMLPurifier_TokenFactory{    // p stands for prototype    /**     * @type HTMLPurifier_Token_Start     */    private $p_start;    /**     * @type HTMLPurifier_Token_End     */    private $p_end;    /**     * @type HTMLPurifier_Token_Empty     */    private $p_empty;    /**     * @type HTMLPurifier_Token_Text     */    private $p_text;    /**     * @type HTMLPurifier_Token_Comment     */    private $p_comment;    /**     * Generates blank prototypes for cloning.     */    public function __construct()    {        $this->p_start = new HTMLPurifier_Token_Start('', array());        $this->p_end = new HTMLPurifier_Token_End('');        $this->p_empty = new HTMLPurifier_Token_Empty('', array());        $this->p_text = new HTMLPurifier_Token_Text('');        $this->p_comment = new HTMLPurifier_Token_Comment('');    }    /**     * Creates a HTMLPurifier_Token_Start.     * @param string $name Tag name     * @param array $attr Associative array of attributes     * @return HTMLPurifier_Token_Start Generated HTMLPurifier_Token_Start     */    public function createStart($name, $attr = array())    {        $p = clone $this->p_start;        $p->__construct($name, $attr);        return $p;    }    /**     * Creates a HTMLPurifier_Token_End.     * @param string $name Tag name     * @return HTMLPurifier_Token_End Generated HTMLPurifier_Token_End     */    public function createEnd($name)    {        $p = clone $this->p_end;        $p->__construct($name);        return $p;    }    /**     * Creates a HTMLPurifier_Token_Empty.     * @param string $name Tag name     * @param array $attr Associative array of attributes     * @return HTMLPurifier_Token_Empty Generated HTMLPurifier_Token_Empty     */    public function createEmpty($name, $attr = array())    {        $p = clone $this->p_empty;        $p->__construct($name, $attr);        return $p;    }    /**     * Creates a HTMLPurifier_Token_Text.     * @param string $data Data of text token     * @return HTMLPurifier_Token_Text Generated HTMLPurifier_Token_Text     */    public function createText($data)    {        $p = clone $this->p_text;        $p->__construct($data);        return $p;    }    /**     * Creates a HTMLPurifier_Token_Comment.     * @param string $data Data of comment token     * @return HTMLPurifier_Token_Comment Generated HTMLPurifier_Token_Comment     */    public function createComment($data)    {        $p = clone $this->p_comment;        $p->__construct($data);        return $p;    }}// vim: et sw=4 sts=4
 |