1: <?php
2:
3: /**
4: * Definition that uses different definitions depending on context.
5: *
6: * The del and ins tags are notable because they allow different types of
7: * elements depending on whether or not they're in a block or inline context.
8: * Chameleon allows this behavior to happen by using two different
9: * definitions depending on context. While this somewhat generalized,
10: * it is specifically intended for those two tags.
11: */
12: class HTMLPurifier_ChildDef_Chameleon extends HTMLPurifier_ChildDef
13: {
14:
15: /**
16: * Instance of the definition object to use when inline. Usually stricter.
17: * @type HTMLPurifier_ChildDef_Optional
18: */
19: public $inline;
20:
21: /**
22: * Instance of the definition object to use when block.
23: * @type HTMLPurifier_ChildDef_Optional
24: */
25: public $block;
26:
27: /**
28: * @type string
29: */
30: public $type = 'chameleon';
31:
32: /**
33: * @param array $inline List of elements to allow when inline.
34: * @param array $block List of elements to allow when block.
35: */
36: public function __construct($inline, $block)
37: {
38: $this->inline = new HTMLPurifier_ChildDef_Optional($inline);
39: $this->block = new HTMLPurifier_ChildDef_Optional($block);
40: $this->elements = $this->block->elements;
41: }
42:
43: /**
44: * @param HTMLPurifier_Node[] $children
45: * @param HTMLPurifier_Config $config
46: * @param HTMLPurifier_Context $context
47: * @return bool
48: */
49: public function validateChildren($children, $config, $context)
50: {
51: if ($context->get('IsInline') === false) {
52: return $this->block->validateChildren(
53: $children,
54: $config,
55: $context
56: );
57: } else {
58: return $this->inline->validateChildren(
59: $children,
60: $config,
61: $context
62: );
63: }
64: }
65: }
66:
67: // vim: et sw=4 sts=4
68: