mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-01-07 04:40:05 -06:00
39 lines
1.9 KiB
Go
39 lines
1.9 KiB
Go
package provider
|
|
|
|
import "github.com/CiscoM31/godata"
|
|
|
|
// FilterTokenizer creates a tokenizer capable of tokenizing filter statements
|
|
// TODO disable tokens we don't handle anyway
|
|
func FilterTokenizer() *godata.Tokenizer {
|
|
t := godata.Tokenizer{}
|
|
t.Add("^[0-9]{4,4}-[0-9]{2,2}-[0-9]{2,2}T[0-9]{2,2}:[0-9]{2,2}(:[0-9]{2,2}(.[0-9]+)?)?(Z|[+-][0-9]{2,2}:[0-9]{2,2})", godata.FilterTokenDateTime)
|
|
t.Add("^-?[0-9]{4,4}-[0-9]{2,2}-[0-9]{2,2}", godata.FilterTokenDate)
|
|
t.Add("^[0-9]{2,2}:[0-9]{2,2}(:[0-9]{2,2}(.[0-9]+)?)?", godata.FilterTokenTime)
|
|
t.Add("^\\(", godata.FilterTokenOpenParen)
|
|
t.Add("^\\)", godata.FilterTokenCloseParen)
|
|
t.Add("^/", godata.FilterTokenNav)
|
|
t.Add("^:", godata.FilterTokenColon)
|
|
t.Add("^,", godata.FilterTokenComma)
|
|
t.Add("^(geo.distance|geo.intersects|geo.length)", godata.FilterTokenFunc)
|
|
t.Add("^(substringof|substring|length|indexof)", godata.FilterTokenFunc)
|
|
// only change from the global tokenizer is the added ap
|
|
t.Add("^(eq|ne|gt|ge|lt|le|and|or|not|has|in|ap)", godata.FilterTokenLogical)
|
|
t.Add("^(add|sub|mul|divby|div|mod)", godata.FilterTokenOp)
|
|
t.Add("^(contains|endswith|startswith|tolower|toupper|"+
|
|
"trim|concat|year|month|day|hour|minute|second|fractionalseconds|date|"+
|
|
"time|totaloffsetminutes|now|maxdatetime|mindatetime|totalseconds|round|"+
|
|
"floor|ceiling|isof|cast)", godata.FilterTokenFunc)
|
|
t.Add("^(any|all)", godata.FilterTokenLambda)
|
|
t.Add("^null", godata.FilterTokenNull)
|
|
t.Add("^\\$it", godata.FilterTokenIt)
|
|
t.Add("^\\$root", godata.FilterTokenRoot)
|
|
t.Add("^-?[0-9]+\\.[0-9]+", godata.FilterTokenFloat)
|
|
t.Add("^-?[0-9]+", godata.FilterTokenInteger)
|
|
t.Add("^'(''|[^'])*'", godata.FilterTokenString)
|
|
t.Add("^(true|false)", godata.FilterTokenBoolean)
|
|
t.Add("^@*[a-zA-Z][a-zA-Z0-9_.]*", godata.FilterTokenLiteral) // The optional '@' character is used to identify parameter aliases
|
|
t.Ignore("^ ", godata.FilterTokenWhitespace)
|
|
|
|
return &t
|
|
}
|