# Name tokens are always acceptable and don't change direction
if ttype == qmod.TokenType.PARTIAL:
+ # qualifiers cannot appear in the middle of the qeury. They need
+ # to be near the next phrase.
+ if self.direction == -1 \
+ and any(t.ttype == qmod.TokenType.QUALIFIER for t in self.seq[:-1]):
+ return None
return self.direction
# Other tokens may only appear once
(BreakType.WORD, PhraseType.NONE, [(3, TokenType.PARTIAL)]))
check_assignments(yield_token_assignments(q))
+
+
+def test_qualifier_in_middle_of_phrase():
+ q = make_query((BreakType.START, PhraseType.NONE, [(1, TokenType.PARTIAL)]),
+ (BreakType.PHRASE, PhraseType.NONE, [(2, TokenType.PARTIAL)]),
+ (BreakType.WORD, PhraseType.NONE, [(3, TokenType.QUALIFIER)]),
+ (BreakType.WORD, PhraseType.NONE, [(4, TokenType.PARTIAL)]),
+ (BreakType.PHRASE, PhraseType.NONE, [(5, TokenType.PARTIAL)]))
+
+ check_assignments(yield_token_assignments(q))
+