Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
2
 
3
class HTMLPurifier_HTMLModule_Tidy_XHTMLAndHTML4 extends HTMLPurifier_HTMLModule_Tidy
4
{
5
 
6
    /**
7
     * @return array
8
     */
9
    public function makeFixes()
10
    {
11
        $r = array();
12
 
13
        // == deprecated tag transforms ===================================
14
 
15
        $r['font'] = new HTMLPurifier_TagTransform_Font();
16
        $r['menu'] = new HTMLPurifier_TagTransform_Simple('ul');
17
        $r['dir'] = new HTMLPurifier_TagTransform_Simple('ul');
18
        $r['center'] = new HTMLPurifier_TagTransform_Simple('div', 'text-align:center;');
19
        $r['u'] = new HTMLPurifier_TagTransform_Simple('span', 'text-decoration:underline;');
20
        $r['s'] = new HTMLPurifier_TagTransform_Simple('span', 'text-decoration:line-through;');
21
        $r['strike'] = new HTMLPurifier_TagTransform_Simple('span', 'text-decoration:line-through;');
22
 
23
        // == deprecated attribute transforms =============================
24
 
25
        $r['caption@align'] =
26
            new HTMLPurifier_AttrTransform_EnumToCSS(
27
                'align',
28
                array(
29
                    // we're following IE's behavior, not Firefox's, due
30
                    // to the fact that no one supports caption-side:right,
31
                    // W3C included (with CSS 2.1). This is a slightly
32
                    // unreasonable attribute!
33
                    'left' => 'text-align:left;',
34
                    'right' => 'text-align:right;',
35
                    'top' => 'caption-side:top;',
36
                    'bottom' => 'caption-side:bottom;' // not supported by IE
37
                )
38
            );
39
 
40
        // @align for img -------------------------------------------------
41
        $r['img@align'] =
42
            new HTMLPurifier_AttrTransform_EnumToCSS(
43
                'align',
44
                array(
45
                    'left' => 'float:left;',
46
                    'right' => 'float:right;',
47
                    'top' => 'vertical-align:top;',
48
                    'middle' => 'vertical-align:middle;',
49
                    'bottom' => 'vertical-align:baseline;',
50
                )
51
            );
52
 
53
        // @align for table -----------------------------------------------
54
        $r['table@align'] =
55
            new HTMLPurifier_AttrTransform_EnumToCSS(
56
                'align',
57
                array(
58
                    'left' => 'float:left;',
59
                    'center' => 'margin-left:auto;margin-right:auto;',
60
                    'right' => 'float:right;'
61
                )
62
            );
63
 
64
        // @align for hr -----------------------------------------------
65
        $r['hr@align'] =
66
            new HTMLPurifier_AttrTransform_EnumToCSS(
67
                'align',
68
                array(
69
                    // we use both text-align and margin because these work
70
                    // for different browsers (IE and Firefox, respectively)
71
                    // and the melange makes for a pretty cross-compatible
72
                    // solution
73
                    'left' => 'margin-left:0;margin-right:auto;text-align:left;',
74
                    'center' => 'margin-left:auto;margin-right:auto;text-align:center;',
75
                    'right' => 'margin-left:auto;margin-right:0;text-align:right;'
76
                )
77
            );
78
 
79
        // @align for h1, h2, h3, h4, h5, h6, p, div ----------------------
80
        // {{{
81
        $align_lookup = array();
82
        $align_values = array('left', 'right', 'center', 'justify');
83
        foreach ($align_values as $v) {
84
            $align_lookup[$v] = "text-align:$v;";
85
        }
86
        // }}}
87
        $r['h1@align'] =
88
        $r['h2@align'] =
89
        $r['h3@align'] =
90
        $r['h4@align'] =
91
        $r['h5@align'] =
92
        $r['h6@align'] =
93
        $r['p@align'] =
94
        $r['div@align'] =
95
            new HTMLPurifier_AttrTransform_EnumToCSS('align', $align_lookup);
96
 
97
        // @bgcolor for table, tr, td, th ---------------------------------
98
        $r['table@bgcolor'] =
99
        $r['tr@bgcolor'] =
100
        $r['td@bgcolor'] =
101
        $r['th@bgcolor'] =
102
            new HTMLPurifier_AttrTransform_BgColor();
103
 
104
        // @border for img ------------------------------------------------
105
        $r['img@border'] = new HTMLPurifier_AttrTransform_Border();
106
 
107
        // @clear for br --------------------------------------------------
108
        $r['br@clear'] =
109
            new HTMLPurifier_AttrTransform_EnumToCSS(
110
                'clear',
111
                array(
112
                    'left' => 'clear:left;',
113
                    'right' => 'clear:right;',
114
                    'all' => 'clear:both;',
115
                    'none' => 'clear:none;',
116
                )
117
            );
118
 
119
        // @height for td, th ---------------------------------------------
120
        $r['td@height'] =
121
        $r['th@height'] =
122
            new HTMLPurifier_AttrTransform_Length('height');
123
 
124
        // @hspace for img ------------------------------------------------
125
        $r['img@hspace'] = new HTMLPurifier_AttrTransform_ImgSpace('hspace');
126
 
127
        // @noshade for hr ------------------------------------------------
128
        // this transformation is not precise but often good enough.
129
        // different browsers use different styles to designate noshade
130
        $r['hr@noshade'] =
131
            new HTMLPurifier_AttrTransform_BoolToCSS(
132
                'noshade',
133
                'color:#808080;background-color:#808080;border:0;'
134
            );
135
 
136
        // @nowrap for td, th ---------------------------------------------
137
        $r['td@nowrap'] =
138
        $r['th@nowrap'] =
139
            new HTMLPurifier_AttrTransform_BoolToCSS(
140
                'nowrap',
141
                'white-space:nowrap;'
142
            );
143
 
144
        // @size for hr  --------------------------------------------------
145
        $r['hr@size'] = new HTMLPurifier_AttrTransform_Length('size', 'height');
146
 
147
        // @type for li, ol, ul -------------------------------------------
148
        // {{{
149
        $ul_types = array(
150
            'disc' => 'list-style-type:disc;',
151
            'square' => 'list-style-type:square;',
152
            'circle' => 'list-style-type:circle;'
153
        );
154
        $ol_types = array(
155
            '1' => 'list-style-type:decimal;',
156
            'i' => 'list-style-type:lower-roman;',
157
            'I' => 'list-style-type:upper-roman;',
158
            'a' => 'list-style-type:lower-alpha;',
159
            'A' => 'list-style-type:upper-alpha;'
160
        );
161
        $li_types = $ul_types + $ol_types;
162
        // }}}
163
 
164
        $r['ul@type'] = new HTMLPurifier_AttrTransform_EnumToCSS('type', $ul_types);
165
        $r['ol@type'] = new HTMLPurifier_AttrTransform_EnumToCSS('type', $ol_types, true);
166
        $r['li@type'] = new HTMLPurifier_AttrTransform_EnumToCSS('type', $li_types, true);
167
 
168
        // @vspace for img ------------------------------------------------
169
        $r['img@vspace'] = new HTMLPurifier_AttrTransform_ImgSpace('vspace');
170
 
171
        // @width for table, hr, td, th, col ------------------------------------------
172
        $r['table@width'] =
173
        $r['td@width'] =
174
        $r['th@width'] =
175
        $r['col@width'] =
176
        $r['hr@width'] = new HTMLPurifier_AttrTransform_Length('width');
177
 
178
        return $r;
179
    }
180
}
181
 
182
// vim: et sw=4 sts=4