get($state->getState()) === "none") { return; }; switch ($default_display) { case 'table-cell': // TD will always have 'display: table-cell' $handler->css('table-cell', $pipeline); break; case '-button': // INPUT buttons will always have 'display: -button' (in latter case if display = 'block', we'll use a wrapper box) $css_state =& $pipeline->get_current_css_state(); if ($handler->get($css_state->getState()) === 'block') { $need_block_wrapper = true; }; $handler->css('-button', $pipeline); break; }; } function is_percentage($value) { return $value{strlen($value)-1} == "%"; } /** * Handle escape sequences in CSS string values * * 4.3.7 Strings * * Strings can either be written with double quotes or with single * quotes. Double quotes cannot occur inside double quotes, unless * escaped (e.g., as '\"' or as '\22'). Analogously for single quotes * (e.g., "\'" or "\27")... * * A string cannot directly contain a newline. To include a newline in * a string, use an escape representing the line feed character in * Unicode (U+000A), such as "\A" or "\00000a"... * * It is possible to break strings over several lines, for esthetic or * other reasons, but in such a case the newline itself has to be * escaped with a backslash (\). * * 4.1.3 Characters and case * * In CSS 2.1, a backslash (\) character indicates three types of * character escapes. * * First, inside a string, a backslash followed by a newline is * ignored (i.e., the string is deemed not to contain either the * backslash or the newline). * * Second, it cancels the meaning of special CSS characters. Any * character (except a hexadecimal digit) can be escaped with a * backslash to remove its special meaning. For example, "\"" is a * string consisting of one double quote. Style sheet preprocessors * must not remove these backslashes from a style sheet since that * would change the style sheet's meaning. * * Third, backslash escapes allow authors to refer to characters they * can't easily put in a document. In this case, the backslash is * followed by at most six hexadecimal digits (0..9A..F), which stand * for the ISO 10646 ([ISO10646]) character with that number, which * must not be zero. If a character in the range [0-9a-fA-F] follows * the hexadecimal number, the end of the number needs to be made * clear. There are two ways to do that: * * 1. with a space (or other whitespace character): "\26 B" ("&B"). In * this case, user agents should treat a "CR/LF" pair * (U+000D/U+000A) as a single whitespace character. * 2. by providing exactly 6 hexadecimal digits: "\000026B" ("&B") * * In fact, these two methods may be combined. Only one whitespace * character is ignored after a hexadecimal escape. Note that this * means that a "real" space after the escape sequence must itself * either be escaped or doubled. */ function css_process_escapes($value) { $value = preg_replace_callback('/\\\\([\da-f]{1,6})( |[^][\da-f])/i', 'css_process_escapes_callback', $value); $value = preg_replace_callback('/\\\\([\da-f]{6})( ?)/i', 'css_process_escapes_callback', $value); return $value; } function css_process_escapes_callback($matches) { if ($matches[2] == ' ') { return hex_to_utf8($matches[1]); } else { return hex_to_utf8($matches[1]).$matches[2]; }; } function css_remove_value_quotes($value) { if (strlen($value) == 0) { return $value; }; if ($value{0} === "'" || $value{0} === "\"") { $value = substr($value, 1, strlen($value)-2); }; return $value; } ?>