1
2 """cssutils - CSS Cascading Style Sheets library for Python
3
4 Copyright (C) 2004-2008 Christof Hoeke
5
6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Lesser General Public
8 License as published by the Free Software Foundation; either
9 version 2.1 of the License, or (at your option) any later version.
10
11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Lesser General Public License for more details.
15
16 You should have received a copy of the GNU Lesser General Public
17 License along with this library; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
20 A Python package to parse and build CSS Cascading Style Sheets.
21
22 Based upon and partly implements the following specifications (DOM only, not any rendering facilities):
23
24 `DOM Level 2 Style CSS <http://www.w3.org/TR/DOM-Level-2-Style/css.html>`__
25 DOM for package css
26 `DOM Level 2 Style Stylesheets <http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html>`__
27 DOM for package stylesheets
28 `CSSOM <http://dev.w3.org/csswg/cssom/>`__
29 A few details (mainly the NamespaceRule DOM) is taken from here. Plan is to move implementation to the stuff defined here which is newer but still no REC so might change in the future
30
31 `CSS 2.1 <http://www.w3.org/TR/CSS21/>`__
32 Rules and properties are defined here
33 `CSS 2.1 Errata <http://www.w3.org/Style/css2-updates/CR-CSS21-20070719-errata.html>`__
34 A few erratas, mainly the definition of CHARSET_SYM tokens
35 `MediaQueries <http://www.w3.org/TR/css3-mediaqueries/>`__
36 MediaQueries are part of ``stylesheets.MediaList`` since v0.9.4, used in @import and @media rules.
37 `Namespaces <http://www.w3.org/TR/css3-namespace/>`__
38 Added in v0.9.1 and updated to definition in CSSOM in v0.9.4
39 `Selectors <http://www.w3.org/TR/css3-selectors/>`__
40 The selector syntax defined here (and not in CSS 2.1) should be parsable with cssutils (*should* mind though ;) )
41
42
43 Please visit http://cthedot.de/cssutils/ for full details and updates.
44
45 Tested with Python 2.5 on Windows XP.
46
47
48 This library is optimized for usage of ``from cssutils import *`` which
49 import subpackages ``css`` and ``stylesheets``, CSSParser and
50 CSSSerializer classes only.
51
52 Usage may be::
53
54 >>> from cssutils import *
55 >>> parser = CSSParser()
56 >>> sheet = parser.parseString(u'a { color: red}')
57 >>> print sheet.cssText
58
59 """
60 __all__ = ['css', 'stylesheets', 'CSSParser', 'CSSSerializer']
61 __docformat__ = 'restructuredtext'
62 __author__ = '$LastChangedBy: cthedot $'
63 __date__ = '$LastChangedDate: 2008-02-03 21:07:12 +0100 (So, 03 Feb 2008) $'
64 __version__ = '0.9.5a3 $LastChangedRevision: 985 $'
65
66 import codec
67
68
69 import xml.dom
70
71 import errorhandler
72 log = errorhandler.ErrorHandler()
73
74 import util
75 import css
76 import stylesheets
77 from parse import CSSParser
78
79 from serialize import CSSSerializer
80 ser = CSSSerializer()
81
82
83 _ANYNS = -1
84
86 """
87 This interface allows the DOM user to create a CSSStyleSheet
88 outside the context of a document. There is no way to associate
89 the new CSSStyleSheet with a document in DOM Level 2.
90
91 This class is its *own factory*, as it is given to
92 xml.dom.registerDOMImplementation which simply calls it and receives
93 an instance of this class then.
94 """
95 _features = [
96 ('css', '1.0'),
97 ('css', '2.0'),
98 ('stylesheets', '1.0'),
99 ('stylesheets', '2.0')
100 ]
101
103 """
104 Creates a new CSSStyleSheet.
105
106 title of type DOMString
107 The advisory title. See also the Style Sheet Interfaces
108 section.
109 media of type DOMString
110 The comma-separated list of media associated with the new style
111 sheet. See also the Style Sheet Interfaces section.
112
113 returns
114 CSSStyleSheet: A new CSS style sheet.
115
116 TODO: DOMException
117 SYNTAX_ERR: Raised if the specified media string value has a
118 syntax error and is unparsable.
119 """
120 return css.CSSStyleSheet(title=title, media=media)
121
123
124 raise NotImplementedError
125
127
128 raise NotImplementedError
129
131 return (feature.lower(), unicode(version)) in self._features
132
133 xml.dom.registerDOMImplementation('cssutils', DOMImplementationCSS)
134
135
136
137 -def parse(filename, encoding=None, href=None, media=None):
138 """
139 reads file with given filename in given encoding (if given)
140 and returns CSSStyleSheet object
141 """
142 return CSSParser().parse(filename, encoding)
143
149
150
152 """
153 sets the global serializer used by all class in cssutils
154 """
155 global ser
156 ser = serializer
157
158
159 if __name__ == '__main__':
160 print __doc__
161