1: | <?php |
2: | |
3: | /** |
4: | * Factory for token generation. |
5: | * |
6: | * @note Doing some benchmarking indicates that the new operator is much |
7: | * slower than the clone operator (even discounting the cost of the |
8: | * constructor). This class is for that optimization. |
9: | * Other then that, there's not much point as we don't |
10: | * maintain parallel HTMLPurifier_Token hierarchies (the main reason why |
11: | * you'd want to use an abstract factory). |
12: | * @todo Port DirectLex to use this |
13: | */ |
14: | class HTMLPurifier_TokenFactory |
15: | { |
16: | // p stands for prototype |
17: | |
18: | /** |
19: | * @type HTMLPurifier_Token_Start |
20: | */ |
21: | private $p_start; |
22: | |
23: | /** |
24: | * @type HTMLPurifier_Token_End |
25: | */ |
26: | private $p_end; |
27: | |
28: | /** |
29: | * @type HTMLPurifier_Token_Empty |
30: | */ |
31: | private $p_empty; |
32: | |
33: | /** |
34: | * @type HTMLPurifier_Token_Text |
35: | */ |
36: | private $p_text; |
37: | |
38: | /** |
39: | * @type HTMLPurifier_Token_Comment |
40: | */ |
41: | private $p_comment; |
42: | |
43: | /** |
44: | * Generates blank prototypes for cloning. |
45: | */ |
46: | public function __construct() |
47: | { |
48: | $this->p_start = new HTMLPurifier_Token_Start('', array()); |
49: | $this->p_end = new HTMLPurifier_Token_End(''); |
50: | $this->p_empty = new HTMLPurifier_Token_Empty('', array()); |
51: | $this->p_text = new HTMLPurifier_Token_Text(''); |
52: | $this->p_comment = new HTMLPurifier_Token_Comment(''); |
53: | } |
54: | |
55: | /** |
56: | * Creates a HTMLPurifier_Token_Start. |
57: | * @param string $name Tag name |
58: | * @param array $attr Associative array of attributes |
59: | * @return HTMLPurifier_Token_Start Generated HTMLPurifier_Token_Start |
60: | */ |
61: | public function createStart($name, $attr = array()) |
62: | { |
63: | $p = clone $this->p_start; |
64: | $p->__construct($name, $attr); |
65: | return $p; |
66: | } |
67: | |
68: | /** |
69: | * Creates a HTMLPurifier_Token_End. |
70: | * @param string $name Tag name |
71: | * @return HTMLPurifier_Token_End Generated HTMLPurifier_Token_End |
72: | */ |
73: | public function createEnd($name) |
74: | { |
75: | $p = clone $this->p_end; |
76: | $p->__construct($name); |
77: | return $p; |
78: | } |
79: | |
80: | /** |
81: | * Creates a HTMLPurifier_Token_Empty. |
82: | * @param string $name Tag name |
83: | * @param array $attr Associative array of attributes |
84: | * @return HTMLPurifier_Token_Empty Generated HTMLPurifier_Token_Empty |
85: | */ |
86: | public function createEmpty($name, $attr = array()) |
87: | { |
88: | $p = clone $this->p_empty; |
89: | $p->__construct($name, $attr); |
90: | return $p; |
91: | } |
92: | |
93: | /** |
94: | * Creates a HTMLPurifier_Token_Text. |
95: | * @param string $data Data of text token |
96: | * @return HTMLPurifier_Token_Text Generated HTMLPurifier_Token_Text |
97: | */ |
98: | public function createText($data) |
99: | { |
100: | $p = clone $this->p_text; |
101: | $p->__construct($data); |
102: | return $p; |
103: | } |
104: | |
105: | /** |
106: | * Creates a HTMLPurifier_Token_Comment. |
107: | * @param string $data Data of comment token |
108: | * @return HTMLPurifier_Token_Comment Generated HTMLPurifier_Token_Comment |
109: | */ |
110: | public function createComment($data) |
111: | { |
112: | $p = clone $this->p_comment; |
113: | $p->__construct($data); |
114: | return $p; |
115: | } |
116: | } |
117: | |
118: | // vim: et sw=4 sts=4 |
119: |