or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

css-rules.mdindex.mdparsing.mdselectors.mdserialization.mdstyle-declarations.mdstylesheets.mdutilities.md

parsing.mddocs/

0

# CSS Parsing

1

2

Comprehensive CSS parsing capabilities supporting CSS 2.1, CSS3 modules, and real-world CSS variations. Parse CSS from strings, files, URLs, and style attributes with configurable validation and error handling.

3

4

## Capabilities

5

6

### CSSParser Class

7

8

Main parser class providing full control over parsing behavior, validation, and error handling.

9

10

```python { .api }

11

class CSSParser:

12

"""

13

Parse CSS StyleSheets from various sources with configurable options.

14

15

Constructor:

16

CSSParser(log=None, loglevel=None, raiseExceptions=None, fetcher=None,

17

parseComments=True, validate=True)

18

19

Parameters:

20

- log: Custom logging object for parse messages

21

- loglevel: Logging level for parse operations

22

- raiseExceptions: Whether to raise exceptions during parsing (default: log only)

23

- fetcher: Custom URL fetcher function for @import resolution

24

- parseComments: Whether to include CSS comments in DOM (default: True)

25

- validate: Whether to validate CSS during parsing (default: True)

26

"""

27

28

def parseString(self, cssText, encoding=None, href=None, media=None, title=None, validate=None):

29

"""

30

Parse CSS from string.

31

32

Parameters:

33

- cssText (str): CSS source code to parse

34

- encoding (str): Character encoding (default: detect or utf-8)

35

- href (str): Base URL for resolving relative URLs

36

- media (str/MediaList): Media query list for stylesheet

37

- title (str): Advisory title for stylesheet

38

- validate (bool): Override parser validation setting

39

40

Returns:

41

CSSStyleSheet: Parsed stylesheet object

42

"""

43

44

def parseFile(self, filename, encoding=None, href=None, media=None, title=None, validate=None):

45

"""

46

Parse CSS from file.

47

48

Parameters:

49

- filename (str): Path to CSS file

50

- encoding (str): Character encoding (default: detect from file)

51

- href (str): Base URL for resolving relative URLs (default: file URL)

52

- media (str/MediaList): Media query list for stylesheet

53

- title (str): Advisory title for stylesheet

54

- validate (bool): Override parser validation setting

55

56

Returns:

57

CSSStyleSheet: Parsed stylesheet object

58

"""

59

60

def parseUrl(self, href, encoding=None, media=None, title=None, validate=None):

61

"""

62

Parse CSS from URL.

63

64

Parameters:

65

- href (str): URL of CSS resource to fetch and parse

66

- encoding (str): Character encoding (default: detect from HTTP headers)

67

- media (str/MediaList): Media query list for stylesheet

68

- title (str): Advisory title for stylesheet

69

- validate (bool): Override parser validation setting

70

71

Returns:

72

CSSStyleSheet: Parsed stylesheet object

73

"""

74

75

def parseStyle(self, cssText, encoding='utf-8', validate=None):

76

"""

77

Parse CSS style attribute content (property declarations only).

78

79

Parameters:

80

- cssText (str): CSS style attribute content

81

- encoding (str): Character encoding (default: utf-8)

82

- validate (bool): Override parser validation setting

83

84

Returns:

85

CSSStyleDeclaration: Parsed style declaration object

86

"""

87

88

def setFetcher(self, fetcher=None):

89

"""

90

Set custom URL fetcher function for resolving @import and url() references.

91

92

Parameters:

93

- fetcher (callable): Function that takes URL and returns (encoding, content) tuple

94

If None, uses default urllib-based fetcher

95

"""

96

```

97

98

### Convenience Parse Functions

99

100

High-level parsing functions using the default global CSSParser instance.

101

102

```python { .api }

103

def parseString(cssText, encoding=None, href=None, media=None, title=None, validate=None):

104

"""

105

Parse CSS string using default parser.

106

107

Parameters:

108

- cssText (str): CSS source code to parse

109

- encoding (str): Character encoding

110

- href (str): Base URL for resolving relative URLs

111

- media (str/MediaList): Media query list

112

- title (str): Advisory title

113

- validate (bool): Whether to validate CSS

114

115

Returns:

116

CSSStyleSheet: Parsed stylesheet object

117

"""

118

119

def parseFile(filename, encoding=None, href=None, media=None, title=None, validate=None):

120

"""

121

Parse CSS file using default parser.

122

123

Parameters:

124

- filename (str): Path to CSS file

125

- encoding (str): Character encoding

126

- href (str): Base URL for resolving relative URLs

127

- media (str/MediaList): Media query list

128

- title (str): Advisory title

129

- validate (bool): Whether to validate CSS

130

131

Returns:

132

CSSStyleSheet: Parsed stylesheet object

133

"""

134

135

def parseUrl(href, encoding=None, media=None, title=None, validate=None):

136

"""

137

Parse CSS from URL using default parser.

138

139

Parameters:

140

- href (str): URL of CSS resource

141

- encoding (str): Character encoding

142

- media (str/MediaList): Media query list

143

- title (str): Advisory title

144

- validate (bool): Whether to validate CSS

145

146

Returns:

147

CSSStyleSheet: Parsed stylesheet object

148

"""

149

150

def parseStyle(cssText, encoding='utf-8', validate=None):

151

"""

152

Parse CSS style attribute using default parser.

153

154

Parameters:

155

- cssText (str): CSS style attribute content

156

- encoding (str): Character encoding

157

- validate (bool): Whether to validate CSS

158

159

Returns:

160

CSSStyleDeclaration: Parsed style declaration object

161

"""

162

```

163

164

## Usage Examples

165

166

### Basic Parsing

167

168

```python

169

import cssutils

170

171

# Parse from string

172

css = "body { color: red; font-size: 14px; }"

173

stylesheet = cssutils.parseString(css)

174

175

# Parse from file

176

stylesheet = cssutils.parseFile('styles.css')

177

178

# Parse from URL

179

stylesheet = cssutils.parseUrl('http://example.com/styles.css')

180

181

# Parse style attribute

182

style = cssutils.parseStyle('color: blue; margin: 10px')

183

```

184

185

### Advanced Parser Configuration

186

187

```python

188

import cssutils

189

import logging

190

191

# Create custom parser with logging

192

parser = cssutils.CSSParser(

193

loglevel=logging.WARNING,

194

raiseExceptions=False,

195

parseComments=True,

196

validate=True

197

)

198

199

# Custom URL fetcher for @import resolution

200

def custom_fetcher(url):

201

# Custom logic to fetch URLs

202

import urllib2

203

response = urllib2.urlopen(url)

204

encoding = response.headers.get('charset', 'utf-8')

205

content = response.read()

206

return encoding, content

207

208

parser.setFetcher(custom_fetcher)

209

210

# Parse with custom configuration

211

stylesheet = parser.parseString(css_text,

212

href='http://example.com/base/',

213

media='screen, print',

214

title='Main Stylesheet')

215

```

216

217

### Error Handling

218

219

```python

220

import cssutils

221

222

# Configure parser to raise exceptions

223

parser = cssutils.CSSParser(raiseExceptions=True)

224

225

try:

226

# This will raise an exception for invalid CSS

227

stylesheet = parser.parseString('invalid { css syntax }')

228

except xml.dom.SyntaxErr as e:

229

print(f"CSS parsing error: {e}")

230

231

# Or use logging mode (default)

232

parser = cssutils.CSSParser(raiseExceptions=False)

233

stylesheet = parser.parseString('invalid { css syntax }')

234

# Errors logged but parsing continues with recoverable portions

235

```

236

237

### Encoding Handling

238

239

```python

240

import cssutils

241

242

# Explicit encoding

243

stylesheet = cssutils.parseString(css_bytes, encoding='utf-8')

244

245

# Auto-detection from @charset rule

246

css_with_charset = '@charset "iso-8859-1"; body { color: red; }'

247

stylesheet = cssutils.parseString(css_with_charset) # encoding detected

248

249

# File with BOM or encoding detection

250

stylesheet = cssutils.parseFile('styles.css') # encoding auto-detected

251

```