Subversion-Projekte lars-tiefland.php_share

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
1 lars 1
<?php
2
// $Header: /cvsroot/html2ps/css.inc.php,v 1.28 2007/04/07 11:16:34 Konstantin Exp $
3
 
4
class CSS {
5
  var $_handlers;
6
  var $_mapping;
7
  var $_defaultState;
8
  var $_defaultStateFlags;
9
 
10
  function _getDefaultState() {
11
    if (!isset($this->_defaultState)) {
12
      $this->_defaultState = array();
13
 
14
      $handlers = $this->getHandlers();
15
      foreach ($handlers as $property => $handler) {
16
        $this->_defaultState[$property] = $handler->default_value();
17
      };
18
    };
19
 
20
    return $this->_defaultState;
21
  }
22
 
23
  function _getDefaultStateFlags() {
24
    if (!isset($this->_defaultStateFlags)) {
25
      $this->_defaultStateFlags = array();
26
 
27
      $handlers = $this->getHandlers();
28
      foreach ($handlers as $property => $handler) {
29
        $this->_defaultStateFlags[$property] = true;
30
      };
31
    };
32
 
33
    return $this->_defaultStateFlags;
34
  }
35
 
36
  function getHandlers() {
37
    return $this->_handlers;
38
  }
39
 
40
  function getInheritableTextHandlers() {
41
    if (!isset($this->_handlersInheritableText)) {
42
      $this->_handlersInheritabletext = array();
43
      foreach ($this->_handlers as $property => $handler) {
44
        if ($handler->isInheritableText()) {
45
          $this->_handlersInheritableText[$property] =& $this->_handlers[$property];
46
        };
47
      }
48
    }
49
 
50
    return $this->_handlersInheritableText;
51
  }
52
 
53
  function getInheritableHandlers() {
54
    if (!isset($this->_handlersInheritable)) {
55
      $this->_handlersInheritable = array();
56
      foreach ($this->_handlers as $property => $handler) {
57
        if ($handler->isInheritable()) {
58
          $this->_handlersInheritable[$property] =& $this->_handlers[$property];
59
        };
60
      }
61
    }
62
 
63
    return $this->_handlersInheritable;
64
  }
65
 
66
  function &get() {
67
    global $__g_css_handler_set;
68
 
69
    if (!isset($__g_css_handler_set)) {
70
      $__g_css_handler_set = new CSS();
71
    };
72
 
73
    return $__g_css_handler_set;
74
  }
75
 
76
  function CSS() {
77
    $this->_handlers = array();
78
    $this->_mapping  = array();
79
  }
80
 
81
  function getDefaultValue($property) {
82
    $css =& CSS::get();
83
    $handler =& $css->_get_handler($property);
84
    $value = $handler->default_value();
85
 
86
    if (is_object($value)) {
87
      return $value->copy();
88
    } else {
89
      return $value;
90
    };
91
  }
92
 
93
  function &get_handler($property) {
94
    $css =& CSS::get();
95
    $handler =& $css->_get_handler($property);
96
    return $handler;
97
  }
98
 
99
  function &_get_handler($property) {
100
    if (isset($this->_handlers[$property])) {
101
      return $this->_handlers[$property];
102
    } else {
103
      $dumb = null;
104
      return $dumb;
105
    };
106
  }
107
 
108
  function _name2code($key) {
109
    if (!isset($this->_mapping[$key])) {
110
      return null;
111
    };
112
 
113
    return $this->_mapping[$key];
114
  }
115
 
116
  function name2code($key) {
117
    $css =& CSS::get();
118
    return $css->_name2code($key);
119
  }
120
 
121
  function register_css_property(&$handler) {
122
    $property = $handler->get_property_code();
123
    $name     = $handler->get_property_name();
124
 
125
    $css =& CSS::get();
126
    $css->_handlers[$property] =& $handler;
127
    $css->_mapping[$name] = $property;
128
  }
129
 
130
  /**
131
   * Refer to CSS 2.1 G.2 Lexical scanner
132
   * h		[0-9a-f]
133
   * nonascii	[\200-\377]
134
   * unicode		\\{h}{1,6}(\r\n|[ \t\r\n\f])?
135
   * escape		{unicode}|\\[^\r\n\f0-9a-f]
136
   * nmstart		[_a-z]|{nonascii}|{escape}
137
   * nmchar		[_a-z0-9-]|{nonascii}|{escape}
138
   * ident		-?{nmstart}{nmchar}*
139
   */
140
  function get_identifier_regexp() {
141
    return '-?(?:[_a-z]|[\200-\377]|\\[0-9a-f]{1,6}(?:\r\n|[ \t\r\n\f])?|\\[^\r\n\f0-9a-f])(?:[_a-z0-9-]|[\200-\377]|\\[0-9a-f]{1,6}(?:\r\n|[ \t\r\n\f])?|\\[^\r\n\f0-9a-f])*';
142
  }
143
 
144
  function is_identifier($string) {
145
    return preg_match(sprintf('/%s/',
146
                              CSS::get_identifier_regexp()),
147
                      $string);
148
  }
149
 
150
  function parse_string($string) {
151
    if (preg_match(sprintf('/^(%s)\s*(.*)$/s', CSS_STRING1_REGEXP), $string, $matches)) {
152
      $value = $matches[1];
153
      $rest = $matches[2];
154
 
155
      $value = CSS::remove_backslash_at_newline($value);
156
 
157
      return array($value, $rest);
158
    };
159
 
160
    if (preg_match(sprintf('/^(%s)\s*(.*)$/s', CSS_STRING2_REGEXP), $string, $matches)) {
161
      $value = $matches[1];
162
      $rest = $matches[2];
163
 
164
      $value = CSS::remove_backslash_at_newline($value);
165
 
166
      return array($value, $rest);
167
    };
168
 
169
    return array(null, $string);
170
  }
171
 
172
  function remove_backslash_at_newline($value) {
173
    return preg_replace("/\\\\\n/", '', $value);
174
  }
175
}
176
 
177
?>