1<?php
2
3/**
4 * Generic pre-transform that converts an attribute with a fixed number of
5 * values (enumerated) to CSS.
6 */
7class HTMLPurifier_AttrTransform_EnumToCSS extends HTMLPurifier_AttrTransform
8{
9    /**
10     * Name of attribute to transform from.
11     * @type string
12     */
13    protected $attr;
14
15    /**
16     * Lookup array of attribute values to CSS.
17     * @type array
18     */
19    protected $enumToCSS = array();
20
21    /**
22     * Case sensitivity of the matching.
23     * @type bool
24     * @warning Currently can only be guaranteed to work with ASCII
25     *          values.
26     */
27    protected $caseSensitive = false;
28
29    /**
30     * @param string $attr Attribute name to transform from
31     * @param array $enum_to_css Lookup array of attribute values to CSS
32     * @param bool $case_sensitive Case sensitivity indicator, default false
33     */
34    public function __construct($attr, $enum_to_css, $case_sensitive = false)
35    {
36        $this->attr = $attr;
37        $this->enumToCSS = $enum_to_css;
38        $this->caseSensitive = (bool)$case_sensitive;
39    }
40
41    /**
42     * @param array $attr
43     * @param HTMLPurifier_Config $config
44     * @param HTMLPurifier_Context $context
45     * @return array
46     */
47    public function transform($attr, $config, $context)
48    {
49        if (!isset($attr[$this->attr])) {
50            return $attr;
51        }
52
53        $value = trim($attr[$this->attr]);
54        unset($attr[$this->attr]);
55
56        if (!$this->caseSensitive) {
57            $value = strtolower($value);
58        }
59
60        if (!isset($this->enumToCSS[$value])) {
61            return $attr;
62        }
63        $this->prependCSS($attr, $this->enumToCSS[$value]);
64        return $attr;
65    }
66}
67
68// vim: et sw=4 sts=4
69