1<?php
2
3/**
4 * Validates the border property as defined by CSS.
5 */
6class HTMLPurifier_AttrDef_CSS_Border extends HTMLPurifier_AttrDef
7{
8
9    /**
10     * Local copy of properties this property is shorthand for.
11     * @type HTMLPurifier_AttrDef[]
12     */
13    protected $info = array();
14
15    /**
16     * @param HTMLPurifier_Config $config
17     */
18    public function __construct($config)
19    {
20        $def = $config->getCSSDefinition();
21        $this->info['border-width'] = $def->info['border-width'];
22        $this->info['border-style'] = $def->info['border-style'];
23        $this->info['border-top-color'] = $def->info['border-top-color'];
24    }
25
26    /**
27     * @param string $string
28     * @param HTMLPurifier_Config $config
29     * @param HTMLPurifier_Context $context
30     * @return bool|string
31     */
32    public function validate($string, $config, $context)
33    {
34        $string = $this->parseCDATA($string);
35        $string = $this->mungeRgb($string);
36        $bits = explode(' ', $string);
37        $done = array(); // segments we've finished
38        $ret = ''; // return value
39        foreach ($bits as $bit) {
40            foreach ($this->info as $propname => $validator) {
41                if (isset($done[$propname])) {
42                    continue;
43                }
44                $r = $validator->validate($bit, $config, $context);
45                if ($r !== false) {
46                    $ret .= $r . ' ';
47                    $done[$propname] = true;
48                    break;
49                }
50            }
51        }
52        return rtrim($ret);
53    }
54}
55
56// vim: et sw=4 sts=4
57