summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEevee (Alex Munroe) <eevee.git@veekun.com>2013-08-15 15:47:43 -0700
committerEevee (Alex Munroe) <eevee.git@veekun.com>2013-08-15 15:47:43 -0700
commit1b97eefb7895435203631c79ce9c32192927e7b7 (patch)
tree4ba9bd5380f4a9f5c0c4b16b9ef3e7c09be821eb
parent0f12919835eabdfef8a7b3b981de057bb8bc5957 (diff)
downloadpyscss-1b97eefb7895435203631c79ce9c32192927e7b7.tar.gz
Remove the need for _rewind.
-rw-r--r--scss/expression.py27
-rw-r--r--scss/src/grammar/grammar.g11
-rw-r--r--scss/src/grammar/grammar.py23
3 files changed, 26 insertions, 35 deletions
diff --git a/scss/expression.py b/scss/expression.py
index 802d35a..e970ccf 100644
--- a/scss/expression.py
+++ b/scss/expression.py
@@ -430,10 +430,6 @@ class Parser(object):
self._pos += 1
return tok[3]
- def _rewind(self, n=1):
- self._pos -= min(n, self._pos)
- self._scanner.rewind(self._pos)
-
################################################################################
## Grammar compiled using Yapps:
@@ -671,15 +667,15 @@ class SassExpression(Parser):
return ArgspecLiteral(v)
def argspec_item(self):
- var = None
- if self._peek(self.argspec_item_rsts) == 'VAR':
- VAR = self._scan('VAR')
- if self._peek(self.argspec_item_rsts_) == '":"':
- self._scan('":"')
- var = VAR
- else: self._rewind()
- expr_slst = self.expr_slst()
- return (var, expr_slst)
+ _token_ = self._peek(self.argspec_item_rsts)
+ if _token_ == 'KWVAR':
+ KWVAR = self._scan('KWVAR')
+ self._scan('":"')
+ expr_slst = self.expr_slst()
+ return (KWVAR, expr_slst)
+ else: # in self.not_expr_rsts
+ expr_slst = self.expr_slst()
+ return (None, expr_slst)
def expr_lst(self):
expr_slst = self.expr_slst()
@@ -711,12 +707,11 @@ class SassExpression(Parser):
u_expr_rsts = set(['LPAR', 'COLOR', 'QSTR', 'SIGN', 'ADD', 'NUM', 'FNCT', 'STR', 'VAR', 'BANG_IMPORTANT', 'ID'])
expr_rsts = set(['LPAR', 'END', 'COLOR', 'QSTR', 'SIGN', 'VAR', 'ADD', 'NUM', 'RPAR', 'FNCT', 'STR', 'NOT', 'ID', 'BANG_IMPORTANT', 'OR', '","'])
not_expr_rsts = set(['LPAR', 'COLOR', 'QSTR', 'SIGN', 'VAR', 'ADD', 'NUM', 'FNCT', 'STR', 'NOT', 'BANG_IMPORTANT', 'ID'])
- argspec_item_rsts = set(['LPAR', 'COLOR', 'QSTR', 'SIGN', 'NOT', 'ADD', 'NUM', 'FNCT', 'STR', 'VAR', 'BANG_IMPORTANT', 'ID'])
- atom_rsts_ = set(['LPAR', 'BANG_IMPORTANT', 'COLOR', 'QSTR', 'SIGN', 'NOT', 'ADD', 'NUM', 'FNCT', 'STR', 'VAR', 'RPAR', 'ID'])
+ argspec_item_rsts = set(['KWVAR', 'LPAR', 'COLOR', 'QSTR', 'SIGN', 'VAR', 'ADD', 'NUM', 'FNCT', 'STR', 'NOT', 'BANG_IMPORTANT', 'ID'])
+ atom_rsts_ = set(['KWVAR', 'LPAR', 'BANG_IMPORTANT', 'COLOR', 'QSTR', 'SIGN', 'VAR', 'ADD', 'NUM', 'FNCT', 'STR', 'NOT', 'RPAR', 'ID'])
comparison_chks = set(['GT', 'GE', 'NE', 'LT', 'LE', 'EQ'])
a_expr_chks = set(['ADD', 'SUB'])
a_expr_rsts = set(['LPAR', 'SUB', 'QSTR', 'RPAR', 'BANG_IMPORTANT', 'LE', 'COLOR', 'NE', 'LT', 'NUM', 'GT', 'END', 'SIGN', 'GE', 'FNCT', 'STR', 'VAR', 'EQ', 'ID', 'AND', 'ADD', 'NOT', 'OR', '","'])
- argspec_item_rsts_ = set(['LPAR', 'COLOR', 'QSTR', 'SIGN', 'VAR', 'ADD', 'NUM', '":"', 'STR', 'NOT', 'BANG_IMPORTANT', 'ID', 'FNCT'])
expr_slst_rsts = set(['LPAR', 'END', 'COLOR', 'QSTR', 'SIGN', 'VAR', 'ADD', 'NUM', 'RPAR', 'FNCT', 'STR', 'NOT', 'BANG_IMPORTANT', 'ID', '","'])
diff --git a/scss/src/grammar/grammar.g b/scss/src/grammar/grammar.g
index 4eac9ef..5a27baa 100644
--- a/scss/src/grammar/grammar.g
+++ b/scss/src/grammar/grammar.g
@@ -114,13 +114,10 @@ parser SassExpression:
argspec_item {{ v.append(argspec_item) }}
)* {{ return ArgspecLiteral(v) }}
- rule argspec_item: {{ var = None }}
- [
- VAR
- [ ":" {{ var = VAR }}
- ] {{ else: self._rewind() }}
- ]
- expr_slst {{ return (var, expr_slst) }}
+ rule argspec_item: (
+ KWVAR ":" expr_slst {{ return (KWVAR, expr_slst) }}
+ | expr_slst {{ return (None, expr_slst) }}
+ )
rule expr_lst: expr_slst {{ v = [expr_slst] }}
(
diff --git a/scss/src/grammar/grammar.py b/scss/src/grammar/grammar.py
index d78b65f..ebfa9e0 100644
--- a/scss/src/grammar/grammar.py
+++ b/scss/src/grammar/grammar.py
@@ -242,15 +242,15 @@ class SassExpression(Parser):
return ArgspecLiteral(v)
def argspec_item(self):
- var = None
- if self._peek(self.argspec_item_rsts) == 'VAR':
- VAR = self._scan('VAR')
- if self._peek(self.argspec_item_rsts_) == '":"':
- self._scan('":"')
- var = VAR
- else: self._rewind()
- expr_slst = self.expr_slst()
- return (var, expr_slst)
+ _token_ = self._peek(self.argspec_item_rsts)
+ if _token_ == 'KWVAR':
+ KWVAR = self._scan('KWVAR')
+ self._scan('":"')
+ expr_slst = self.expr_slst()
+ return (KWVAR, expr_slst)
+ else: # in self.not_expr_rsts
+ expr_slst = self.expr_slst()
+ return (None, expr_slst)
def expr_lst(self):
expr_slst = self.expr_slst()
@@ -282,12 +282,11 @@ class SassExpression(Parser):
u_expr_rsts = set(['LPAR', 'COLOR', 'QSTR', 'SIGN', 'ADD', 'NUM', 'FNCT', 'STR', 'VAR', 'BANG_IMPORTANT', 'ID'])
expr_rsts = set(['LPAR', 'END', 'COLOR', 'QSTR', 'SIGN', 'VAR', 'ADD', 'NUM', 'RPAR', 'FNCT', 'STR', 'NOT', 'ID', 'BANG_IMPORTANT', 'OR', '","'])
not_expr_rsts = set(['LPAR', 'COLOR', 'QSTR', 'SIGN', 'VAR', 'ADD', 'NUM', 'FNCT', 'STR', 'NOT', 'BANG_IMPORTANT', 'ID'])
- argspec_item_rsts = set(['LPAR', 'COLOR', 'QSTR', 'SIGN', 'NOT', 'ADD', 'NUM', 'FNCT', 'STR', 'VAR', 'BANG_IMPORTANT', 'ID'])
- atom_rsts_ = set(['LPAR', 'BANG_IMPORTANT', 'COLOR', 'QSTR', 'SIGN', 'NOT', 'ADD', 'NUM', 'FNCT', 'STR', 'VAR', 'RPAR', 'ID'])
+ argspec_item_rsts = set(['KWVAR', 'LPAR', 'COLOR', 'QSTR', 'SIGN', 'VAR', 'ADD', 'NUM', 'FNCT', 'STR', 'NOT', 'BANG_IMPORTANT', 'ID'])
+ atom_rsts_ = set(['KWVAR', 'LPAR', 'BANG_IMPORTANT', 'COLOR', 'QSTR', 'SIGN', 'VAR', 'ADD', 'NUM', 'FNCT', 'STR', 'NOT', 'RPAR', 'ID'])
comparison_chks = set(['GT', 'GE', 'NE', 'LT', 'LE', 'EQ'])
a_expr_chks = set(['ADD', 'SUB'])
a_expr_rsts = set(['LPAR', 'SUB', 'QSTR', 'RPAR', 'BANG_IMPORTANT', 'LE', 'COLOR', 'NE', 'LT', 'NUM', 'GT', 'END', 'SIGN', 'GE', 'FNCT', 'STR', 'VAR', 'EQ', 'ID', 'AND', 'ADD', 'NOT', 'OR', '","'])
- argspec_item_rsts_ = set(['LPAR', 'COLOR', 'QSTR', 'SIGN', 'VAR', 'ADD', 'NUM', '":"', 'STR', 'NOT', 'BANG_IMPORTANT', 'ID', 'FNCT'])
expr_slst_rsts = set(['LPAR', 'END', 'COLOR', 'QSTR', 'SIGN', 'VAR', 'ADD', 'NUM', 'RPAR', 'FNCT', 'STR', 'NOT', 'BANG_IMPORTANT', 'ID', '","'])