1<?php
2
3function &parse_css_property($string, &$pipeline) {
4  $collection =& parse_css_properties($string, $pipeline);
5  return $collection;
6}
7
8function &parse_css_properties($string, &$pipeline) {
9  $property_collection =& new CSSPropertyCollection();
10
11  while ($string != '') {
12    $string = parse_css_properties_property($string, $code);
13
14    if (preg_match('/^\s*:\s*(.*?)$/si', $string, $matches)) {
15      $string = $matches[1];
16    };
17
18    $string = parse_css_properties_value($string, $value);
19
20    if (preg_match('/^\s*;\s*(.*)$/si', $string, $matches)) {
21      $string = $matches[1];
22    };
23
24    $property =& CSSPropertyDeclaration::create($code, $value, $pipeline);
25    if (!is_null($property)) {
26      $property_collection->add_property($property);
27    };
28  };
29
30  return $property_collection;
31}
32
33function parse_css_properties_property($string, &$code) {
34  $identifier_regexp = CSS::get_identifier_regexp();
35
36  if (!preg_match(sprintf('/^\s*(%s)(.*)/si', $identifier_regexp), $string, $matches)) {
37    $code = null;
38    return '';
39  };
40
41  $name = strtolower(trim($matches[1]));
42  $rest = $matches[2];
43  $code = CSS::name2code($name);
44  return $rest;
45}
46
47function parse_css_properties_value($string, &$value) {
48  $string1_regexp = CSS_STRING1_REGEXP;
49  $string2_regexp = CSS_STRING2_REGEXP;
50
51  $value = '';
52
53  do {
54    $matched = false;
55
56    list($new_value, $string) = CSS::parse_string($string);
57    if (!is_null($new_value)) {
58      $value .= $new_value;
59      $matched = true;
60    };
61
62    if (preg_match('/^('.CSS_FUNCTION_REGEXP.CSS_IDENT_REGEXP.'\))\s*(.*)$/si', $string, $matches)) {
63      $value .= $matches[1];
64      $string = $matches[2];
65      $matched = true;
66    };
67  } while ($matched);
68
69  $value_regexp = '[^;]*?';
70  if (preg_match(sprintf('/^(%s)(\s*;.*)/si', $value_regexp), $string, $matches)) {
71    $value .= trim($matches[1]);
72    $rest = $matches[2];
73
74    return $rest;
75  };
76
77  $value = $value.trim($string);
78  return '';
79}
80
81?>