Skip to content

Commit

Permalink
Added @media type support
Browse files Browse the repository at this point in the history
  • Loading branch information
akaihola committed Aug 8, 2010
1 parent 1874e7b commit 0f75dcd
Showing 1 changed file with 25 additions and 12 deletions.
37 changes: 25 additions & 12 deletions clevercss/engine.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,30 +43,38 @@ def evaluate(self, context=None):
for selectors, defs in Engine(source[1], fname=fname).evaluate(context):
yield selectors, defs

for selectors, defs in self.rules:
yield selectors, [(key, expr.to_string(context))
for key, expr in defs]
for media, selectors, defs in self.rules:
yield media, selectors, [(key, expr.to_string(context))
for key, expr in defs]

def to_css(self, context=None):
"""Evaluate the code and generate a CSS file."""
if context.minified:
return self.to_css_min(context)
blocks = []
for selectors, defs in self.evaluate(context):
current_media = None
for media, selectors, defs in self.evaluate(context):
block = []
if media != current_media:
if current_media:
block.append('} /* @ media %s */\n\n' % media)
block.append('@media %s {\n' % media)
current_media = media
block.append(u',\n'.join(selectors) + ' {')
for key, value in defs:
block.append(u' %s: %s;' % (key, value))
block.append('}')
blocks.append(u'\n'.join(block))
if current_media:
blocks.append('} /* @ media %s */' % current_media)
return u'\n\n'.join(blocks)

def to_css_min(self, context=None):
"""Evaluate the code and generate a CSS file."""
return u''.join(u'%s{%s}' % (
u','.join(s),
u';'.join(u'%s:%s' % kv for kv in d))
for s, d in self.evaluate(context))
for m, s, d in self.evaluate(context))

class TokenStream(object):
"""
Expand Down Expand Up @@ -269,18 +277,22 @@ def recurse(macroses):
styles.extend(expand_defs(macros_defs))
else:
styles.append(expand_def((lineno, k, v)))
result.append((get_selectors(), styles))
result.append((media[0], get_selectors(), styles))
for i_r, i_c, i_d in children:
handle_rule(i_r, i_c, i_d, macroses)

local_rules = []
reference_rules = []
for r in rule.split(','):
r = r.strip()
if '&' in r:
reference_rules.append(r)
else:
local_rules.append(r)
if rule.startswith('@media '):
media[:] = rule.split(None, 1)[1:]
recurse(macroses)
else:
for r in rule.split(','):
r = r.strip()
if '&' in r:
reference_rules.append(r)
else:
local_rules.append(r)

if local_rules:
stack.append(local_rules)
Expand Down Expand Up @@ -317,6 +329,7 @@ def get_selectors():
root_rules, vars, imports, macroses = self.preparse(source)
result = []
stack = []
media = [None]
for i_r, i_c, i_d in root_rules:
handle_rule(i_r, i_c, i_d, macroses)

Expand Down

0 comments on commit 0f75dcd

Please sign in to comment.