HTMLPurifier_AttrTypes   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 88
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 34
c 0
b 0
f 0
dl 0
loc 88
rs 10
wmc 6

4 Methods

Rating   Name   Duplication   Size   Complexity  
A get() 0 14 3
A __construct() 0 40 1
A set() 0 3 1
A makeEnum() 0 3 1
1
<?php
2
3
/**
4
 * Provides lookup array of attribute types to HTMLPurifier_AttrDef objects
5
 */
6
class HTMLPurifier_AttrTypes
7
{
8
    /**
9
     * Lookup array of attribute string identifiers to concrete implementations.
10
     * @type HTMLPurifier_AttrDef[]
11
     */
12
    protected $info = array();
13
14
    /**
15
     * Constructs the info array, supplying default implementations for attribute
16
     * types.
17
     */
18
    public function __construct()
19
    {
20
        // XXX This is kind of poor, since we don't actually /clone/
21
        // instances; instead, we use the supplied make() attribute. So,
22
        // the underlying class must know how to deal with arguments.
23
        // With the old implementation of Enum, that ignored its
24
        // arguments when handling a make dispatch, the IAlign
25
        // definition wouldn't work.
26
27
        // pseudo-types, must be instantiated via shorthand
28
        $this->info['Enum']    = new HTMLPurifier_AttrDef_Enum();
29
        $this->info['Bool']    = new HTMLPurifier_AttrDef_HTML_Bool();
30
31
        $this->info['CDATA']    = new HTMLPurifier_AttrDef_Text();
32
        $this->info['ID']       = new HTMLPurifier_AttrDef_HTML_ID();
33
        $this->info['Length']   = new HTMLPurifier_AttrDef_HTML_Length();
34
        $this->info['MultiLength'] = new HTMLPurifier_AttrDef_HTML_MultiLength();
35
        $this->info['NMTOKENS'] = new HTMLPurifier_AttrDef_HTML_Nmtokens();
36
        $this->info['Pixels']   = new HTMLPurifier_AttrDef_HTML_Pixels();
37
        $this->info['Text']     = new HTMLPurifier_AttrDef_Text();
38
        $this->info['URI']      = new HTMLPurifier_AttrDef_URI();
39
        $this->info['LanguageCode'] = new HTMLPurifier_AttrDef_Lang();
40
        $this->info['Color']    = new HTMLPurifier_AttrDef_HTML_Color();
41
        $this->info['IAlign']   = self::makeEnum('top,middle,bottom,left,right');
42
        $this->info['LAlign']   = self::makeEnum('top,bottom,left,right');
43
        $this->info['FrameTarget'] = new HTMLPurifier_AttrDef_HTML_FrameTarget();
44
        $this->info['ContentEditable'] = new HTMLPurifier_AttrDef_HTML_ContentEditable();
45
46
        // unimplemented aliases
47
        $this->info['ContentType'] = new HTMLPurifier_AttrDef_Text();
48
        $this->info['ContentTypes'] = new HTMLPurifier_AttrDef_Text();
49
        $this->info['Charsets'] = new HTMLPurifier_AttrDef_Text();
50
        $this->info['Character'] = new HTMLPurifier_AttrDef_Text();
51
52
        // "proprietary" types
53
        $this->info['Class'] = new HTMLPurifier_AttrDef_HTML_Class();
54
55
        // number is really a positive integer (one or more digits)
56
        // FIXME: ^^ not always, see start and value of list items
57
        $this->info['Number']   = new HTMLPurifier_AttrDef_Integer(false, false, true);
58
    }
59
60
    private static function makeEnum($in)
61
    {
62
        return new HTMLPurifier_AttrDef_Clone(new HTMLPurifier_AttrDef_Enum(explode(',', $in)));
63
    }
64
65
    /**
66
     * Retrieves a type
67
     * @param string $type String type name
68
     * @return HTMLPurifier_AttrDef Object AttrDef for type
69
     */
70
    public function get($type)
71
    {
72
        // determine if there is any extra info tacked on
73
        if (strpos($type, '#') !== false) {
74
            list($type, $string) = explode('#', $type, 2);
75
        } else {
76
            $string = '';
77
        }
78
79
        if (!isset($this->info[$type])) {
80
            trigger_error('Cannot retrieve undefined attribute type ' . $type, E_USER_ERROR);
81
            return;
82
        }
83
        return $this->info[$type]->make($string);
84
    }
85
86
    /**
87
     * Sets a new implementation for a type
88
     * @param string $type String type name
89
     * @param HTMLPurifier_AttrDef $impl Object AttrDef for type
90
     */
91
    public function set($type, $impl)
92
    {
93
        $this->info[$type] = $impl;
94
    }
95
}
96
97
// vim: et sw=4 sts=4
98