aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/query/lexer.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/query/lexer.go')
-rw-r--r--pkg/query/lexer.go13
1 files changed, 9 insertions, 4 deletions
diff --git a/pkg/query/lexer.go b/pkg/query/lexer.go
index 9e64b82..a421fbc 100644
--- a/pkg/query/lexer.go
+++ b/pkg/query/lexer.go
@@ -33,6 +33,7 @@ const (
TOK_OP_PIPE // external pipe
TOK_OP_ARG // external arg
// categories
+ TOK_CAT_PATH
TOK_CAT_TITLE
TOK_CAT_AUTHOR
TOK_CAT_DATE
@@ -82,6 +83,8 @@ func (tokType queryTokenType) String() string {
return "Pipe External Command"
case TOK_OP_ARG:
return "Argument External Command"
+ case TOK_CAT_PATH:
+ return "Filepath Category"
case TOK_CAT_TITLE:
return "Title Category"
case TOK_CAT_AUTHOR:
@@ -126,7 +129,7 @@ func (t queryTokenType) isClause() bool {
}
func (t queryTokenType) isCategory() bool {
- return t.Any(TOK_CAT_TITLE, TOK_CAT_AUTHOR, TOK_CAT_DATE, TOK_CAT_FILETIME, TOK_CAT_TAGS, TOK_CAT_LINKS, TOK_CAT_META)
+ return t.Any(TOK_CAT_PATH, TOK_CAT_TITLE, TOK_CAT_AUTHOR, TOK_CAT_DATE, TOK_CAT_FILETIME, TOK_CAT_TAGS, TOK_CAT_LINKS, TOK_CAT_META)
}
func (t queryTokenType) isOperation() bool {
return t.Any(TOK_OP_EQ, TOK_OP_AP, TOK_OP_NE, TOK_OP_LT, TOK_OP_LE, TOK_OP_GE, TOK_OP_GT, TOK_OP_PIPE, TOK_OP_ARG)
@@ -248,6 +251,8 @@ func tokenizeOperation(s string) Token {
func tokenizeCategory(s string) Token {
t := Token{Value: s}
switch s {
+ case "p", "path":
+ t.Type = TOK_CAT_PATH
case "T", "title":
t.Type = TOK_CAT_TITLE
case "a", "author":
@@ -276,7 +281,7 @@ func tokenizeValue(s string, catType queryTokenType) Token {
switch catType {
case TOK_CAT_DATE, TOK_CAT_FILETIME:
t.Type = TOK_VAL_DATETIME
- case TOK_CAT_TITLE, TOK_CAT_AUTHOR, TOK_CAT_TAGS, TOK_CAT_LINKS, TOK_CAT_META:
+ case TOK_CAT_PATH, TOK_CAT_TITLE, TOK_CAT_AUTHOR, TOK_CAT_TAGS, TOK_CAT_LINKS, TOK_CAT_META:
t.Type = TOK_VAL_STR
}
return t
@@ -307,7 +312,7 @@ func TokensStringify(tokens []Token) string {
case TOK_CLAUSE_AND:
b.WriteString("and\n")
indentLvl += 1
- case TOK_CAT_TITLE, TOK_CAT_AUTHOR, TOK_CAT_DATE, TOK_CAT_FILETIME, TOK_CAT_TAGS, TOK_CAT_LINKS, TOK_CAT_META, TOK_OP_NEG:
+ case TOK_CAT_PATH, TOK_CAT_TITLE, TOK_CAT_AUTHOR, TOK_CAT_DATE, TOK_CAT_FILETIME, TOK_CAT_TAGS, TOK_CAT_LINKS, TOK_CAT_META, TOK_OP_NEG:
if i == 0 || tokens[i-1].Type != TOK_OP_NEG {
writeIndent(&b, indentLvl)
}
@@ -325,7 +330,7 @@ func TokensStringify(tokens []Token) string {
func init() {
negPattern := `(?<negation>-?)`
- categoryPattern := `(?<category>T|a(?:uthor)?|d(?:ate)?|f(?:iletime)?|t(?:ags|itle)?|l(?:inks)?|m(?:eta)?)`
+ categoryPattern := `(?<category>T|p(?:ath)?|a(?:uthor)?|d(?:ate)?|f(?:iletime)?|t(?:ags|itle)?|l(?:inks)?|m(?:eta)?)`
opPattern := `(?<operator>!=|!+|<=|>=|=|:|~|<|>|!)`
valPattern := `(?<value>".*?"|\S*[^\s\)])`
statementPattern := `(?<statement>` + negPattern + categoryPattern + opPattern + valPattern + `)`