1: <?php
2:
3: /**
4: * Decorator that, depending on a token, switches between two definitions.
5: */
6: class HTMLPurifier_AttrDef_Switch
7: {
8:
9: /**
10: * @type string
11: */
12: protected $tag;
13:
14: /**
15: * @type HTMLPurifier_AttrDef
16: */
17: protected $withTag;
18:
19: /**
20: * @type HTMLPurifier_AttrDef
21: */
22: protected $withoutTag;
23:
24: /**
25: * @param string $tag Tag name to switch upon
26: * @param HTMLPurifier_AttrDef $with_tag Call if token matches tag
27: * @param HTMLPurifier_AttrDef $without_tag Call if token doesn't match, or there is no token
28: */
29: public function __construct($tag, $with_tag, $without_tag)
30: {
31: $this->tag = $tag;
32: $this->withTag = $with_tag;
33: $this->withoutTag = $without_tag;
34: }
35:
36: /**
37: * @param string $string
38: * @param HTMLPurifier_Config $config
39: * @param HTMLPurifier_Context $context
40: * @return bool|string
41: */
42: public function validate($string, $config, $context)
43: {
44: $token = $context->get('CurrentToken', true);
45: if (!$token || $token->name !== $this->tag) {
46: return $this->withoutTag->validate($string, $config, $context);
47: } else {
48: return $this->withTag->validate($string, $config, $context);
49: }
50: }
51: }
52:
53: // vim: et sw=4 sts=4
54: