From 73949b9740cbdc2be9168fec46cbe4121878bba1 Mon Sep 17 00:00:00 2001 From: jtm Date: Fri, 23 Mar 2012 16:45:28 +0000 Subject: [PATCH] keyframes --- lesscpy/lessc/parser.py | 8 +++++++- lesscpy/lib/dom.py | 2 ++ lesscpy/plib/block.py | 2 +- lesscpy/plib/identifier.py | 10 ++++++++-- lesscpy/test/css/keyframes.css | 24 ++++++++++++++++++++++++ lesscpy/test/css/keyframes.min.css | 9 +++++++++ lesscpy/test/less/keyframes.less | 17 +++++++++++++++++ 7 files changed, 68 insertions(+), 4 deletions(-) create mode 100644 lesscpy/test/css/keyframes.css create mode 100644 lesscpy/test/css/keyframes.min.css create mode 100644 lesscpy/test/less/keyframes.less diff --git a/lesscpy/lessc/parser.py b/lesscpy/lessc/parser.py index fb8fa5c..e758a6f 100644 --- a/lesscpy/lessc/parser.py +++ b/lesscpy/lessc/parser.py @@ -52,7 +52,7 @@ class LessParser(object): tabfile = 'yacctab' self.ignored = ('css_comment', 'less_comment', - 'css_vendor_hack', 'css_keyframes') + 'css_vendor_hack') self.tokens = [t for t in self.lex.tokens if t not in self.ignored] @@ -398,6 +398,12 @@ class LessParser(object): """ p[0] = p[1] + def p_identifier_list_keyframe(self, p): + """ identifier_list : css_keyframes t_ws css_ident + | css_keyframes t_ws css_ident t_ws + """ + p[0] = list(p)[1:] + def p_identifier_group_op(self, p): """ identifier_group : identifier_group child_selector ident_parts | identifier_group '+' ident_parts diff --git a/lesscpy/lib/dom.py b/lesscpy/lib/dom.py index 77bbc18..c31e7fc 100644 --- a/lesscpy/lib/dom.py +++ b/lesscpy/lib/dom.py @@ -102,6 +102,8 @@ html4 = [ 'screen', 'all', 'projection', + 'from', + 'to' ] html5 = [ 'article', diff --git a/lesscpy/plib/block.py b/lesscpy/plib/block.py index 76ab8e8..27bdd0d 100644 --- a/lesscpy/plib/block.py +++ b/lesscpy/plib/block.py @@ -46,7 +46,7 @@ class Block(Node): }) out.append(f % fills) if self.inner: - if name.startswith('@media'): + if self.name.subparse: # @media inner = ''.join([p.fmt(fills) for p in self.inner]) inner = inner.replace(fills['nl'], fills['nl'] + fills['tab']).rstrip(fills['tab']) diff --git a/lesscpy/plib/identifier.py b/lesscpy/plib/identifier.py index ecec106..415d909 100644 --- a/lesscpy/plib/identifier.py +++ b/lesscpy/plib/identifier.py @@ -9,9 +9,15 @@ class Identifier(Node): """ names = [] name = [] - if self.tokens and self.tokens[0] == '@media': + self._subp = ( + '@media', '@keyframes', + '@-moz-keyframes', '@-webkit-keyframes' + ) + if self.tokens and self.tokens[0] in self._subp: name = list(utility.flatten(self.tokens)) + self.subparse = True else: + self.subparse = False for n in utility.flatten(self.tokens): if n == '*': name.append('* ') @@ -38,7 +44,7 @@ class Identifier(Node): if parent: parent = parent[-1] return [self._pscn(part, n) - if part[0] != '@media' + if part[0] not in self._subp else n for part in parent.parsed for n in names] diff --git a/lesscpy/test/css/keyframes.css b/lesscpy/test/css/keyframes.css new file mode 100644 index 0000000..0008872 --- /dev/null +++ b/lesscpy/test/css/keyframes.css @@ -0,0 +1,24 @@ +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 0 0; + } + to { + background-position: 40px 0; + } +} +@-moz-keyframes progress-bar-stripes { + from { + background-position: 0 0; + } + to { + background-position: 40px 0; + } +} +@keyframes progress-bar-stripes { + from { + background-position: 0 0; + } + to { + background-position: 40px 0; + } +} diff --git a/lesscpy/test/css/keyframes.min.css b/lesscpy/test/css/keyframes.min.css new file mode 100644 index 0000000..e029dd3 --- /dev/null +++ b/lesscpy/test/css/keyframes.min.css @@ -0,0 +1,9 @@ +@-webkit-keyframes progress-bar-stripes{from{background-position:0 0;} +to{background-position:40px 0;} +} +@-moz-keyframes progress-bar-stripes{from{background-position:0 0;} +to{background-position:40px 0;} +} +@keyframes progress-bar-stripes{from{background-position:0 0;} +to{background-position:40px 0;} +} diff --git a/lesscpy/test/less/keyframes.less b/lesscpy/test/less/keyframes.less new file mode 100644 index 0000000..af7f48e --- /dev/null +++ b/lesscpy/test/less/keyframes.less @@ -0,0 +1,17 @@ +// Webkit +@-webkit-keyframes progress-bar-stripes { + from { background-position: 0 0; } + to { background-position: 40px 0; } +} + +// Firefox +@-moz-keyframes progress-bar-stripes { + from { background-position: 0 0; } + to { background-position: 40px 0; } +} + +// Spec +@keyframes progress-bar-stripes { + from { background-position: 0 0; } + to { background-position: 40px 0; } +} \ No newline at end of file