| @@ -118,10 +118,15 @@ class _QueryParser(object): | |||||
| """Parse a query term into a tree node and return it.""" | """Parse a query term into a tree node and return it.""" | ||||
| if ":" in term and not term[0] == ":": | if ":" in term and not term[0] == ":": | ||||
| prefix, arg = term.split(":", 1) | prefix, arg = term.split(":", 1) | ||||
| invert = prefix.lower() == "not" | |||||
| if invert: | |||||
| prefix, arg = arg.split(":", 1) | |||||
| if not arg: | if not arg: | ||||
| raise QueryParseException('Incomplete query term: "%s"' % term) | raise QueryParseException('Incomplete query term: "%s"' % term) | ||||
| for meth, prefixes in self._prefixes.iteritems(): | for meth, prefixes in self._prefixes.iteritems(): | ||||
| if prefix in prefixes: | |||||
| if prefix.lower() in prefixes: | |||||
| if invert: | |||||
| return UnaryOp(UnaryOp.NOT, meth(arg)) | |||||
| return meth(arg) | return meth(arg) | ||||
| return Text(self._parse_literal(term)) | return Text(self._parse_literal(term)) | ||||
| @@ -141,34 +146,12 @@ class _QueryParser(object): | |||||
| :raises: :py:class:`.QueryParseException` | :raises: :py:class:`.QueryParseException` | ||||
| """ | """ | ||||
| print " STRING:", query | |||||
| for i, term in enumerate(split(query), 1): | |||||
| ## TODO: remove enumerate when removing debug prints | |||||
| print " in [%02d]:" % i, term | |||||
| root = None | |||||
| for term in split(query): | |||||
| node = self._parse_term(term) | node = self._parse_term(term) | ||||
| print "out [%02d]:" % i, node | |||||
| tree = Tree(node) | |||||
| print " TREE:", tree | |||||
| return tree | |||||
| ## TODO | |||||
| # language:"Python" | |||||
| # lang: | |||||
| # l: | |||||
| # author:"Ben Kurtovic" | |||||
| # modified:before | |||||
| # modified:after | |||||
| # created:before | |||||
| # created:after:"Jaunary 4, 2014" | |||||
| # func:"foobar" | |||||
| # func:re|gex:"foo?b|car" | |||||
| # "foo" -> Tree() | |||||
| # "foo bar" -> "foo bar" OR ("foo" or "bar") | |||||
| # "foo bar baz" -> ""foo bar baz" OR ("foo" OR "bar baz") OR ("foo" OR "bar baz") OR ('foo' OR 'bar' OR 'baz')" | |||||
| root = BinaryOp(root, BinaryOp.AND, node) if root else node | |||||
| tree = Tree(root) | |||||
| return tree | |||||
| parse_query = _QueryParser().parse | parse_query = _QueryParser().parse | ||||