1: | <?php
|
2: |
|
3: | |
4: | |
5: |
|
6: | class HTMLPurifier_ChildDef_StrictBlockquote extends HTMLPurifier_ChildDef_Required
|
7: | {
|
8: | |
9: | |
10: |
|
11: | protected $real_elements;
|
12: |
|
13: | |
14: | |
15: |
|
16: | protected $fake_elements;
|
17: |
|
18: | |
19: | |
20: |
|
21: | public $allow_empty = true;
|
22: |
|
23: | |
24: | |
25: |
|
26: | public $type = 'strictblockquote';
|
27: |
|
28: | |
29: | |
30: |
|
31: | protected $init = false;
|
32: |
|
33: | |
34: | |
35: | |
36: | |
37: | |
38: |
|
39: | public function getAllowedElements($config)
|
40: | {
|
41: | $this->init($config);
|
42: | return $this->fake_elements;
|
43: | }
|
44: |
|
45: | |
46: | |
47: | |
48: | |
49: | |
50: |
|
51: | public function validateChildren($children, $config, $context)
|
52: | {
|
53: | $this->init($config);
|
54: |
|
55: |
|
56: | $this->elements = $this->fake_elements;
|
57: | $result = parent::validateChildren($children, $config, $context);
|
58: | $this->elements = $this->real_elements;
|
59: |
|
60: | if ($result === false) {
|
61: | return array();
|
62: | }
|
63: | if ($result === true) {
|
64: | $result = $children;
|
65: | }
|
66: |
|
67: | $def = $config->getHTMLDefinition();
|
68: | $block_wrap_name = $def->info_block_wrapper;
|
69: | $block_wrap = false;
|
70: | $ret = array();
|
71: |
|
72: | foreach ($result as $node) {
|
73: | if ($block_wrap === false) {
|
74: | if (($node instanceof HTMLPurifier_Node_Text && !$node->is_whitespace) ||
|
75: | ($node instanceof HTMLPurifier_Node_Element && !isset($this->elements[$node->name]))) {
|
76: | $block_wrap = new HTMLPurifier_Node_Element($def->info_block_wrapper);
|
77: | $ret[] = $block_wrap;
|
78: | }
|
79: | } else {
|
80: | if ($node instanceof HTMLPurifier_Node_Element && isset($this->elements[$node->name])) {
|
81: | $block_wrap = false;
|
82: |
|
83: | }
|
84: | }
|
85: | if ($block_wrap) {
|
86: | $block_wrap->children[] = $node;
|
87: | } else {
|
88: | $ret[] = $node;
|
89: | }
|
90: | }
|
91: | return $ret;
|
92: | }
|
93: |
|
94: | |
95: | |
96: |
|
97: | private function init($config)
|
98: | {
|
99: | if (!$this->init) {
|
100: | $def = $config->getHTMLDefinition();
|
101: |
|
102: | $this->real_elements = $this->elements;
|
103: | $this->fake_elements = $def->info_content_sets['Flow'];
|
104: | $this->fake_elements['#PCDATA'] = true;
|
105: | $this->init = true;
|
106: | }
|
107: | }
|
108: | }
|
109: |
|
110: |
|
111: | |