[−][src]Module wlambda::selector
Selector and WLambda-Regex Syntax:
(* NOTE: Whitespace is not part of a pattern in most places. This means
if you want to match whitespace, you will have to escape
it either with a '\', with a [ ] character class or match
one whitespace char with $s. *)
class_char = { ?any character except "]"? }
(* special sequence: "\^" => "^" and "\\" => "\"
and "\]" => "]" *)
;
ident_char = { ?any character except whitespace,
"!", "?", "/", "\", "|", "^", ",",
"'", "&", ":", ";", "$", "(", ")",
"{", "}", "[", "]", "*" or "="? }
(* allows the usual backslash escaping! *)
;
ident = ident_char, { ident_char }
;
index = digit, { digit }
;
rx_atom = pat_glob
| ident_char
;
glob_atom = pat_glob
| ident
;
rx_match_mod = "L" (* transforms the input string from the match
position on to lower case. *)
| "U" (* transforms the input string from the match
position on to upper case. *)
;
pat_regex = "*", rx_atom (* matches sub pattern 0 or N times *)
| "+", rx_atom (* matches sub pattern 1 or N times *)
| "<", [ ("*" | "+" | "?") ], rx_atom
(* non greedy version of the above *)
| "?", rx_atom (* matches sub pattern 0 or 1 times *)
| "!", rx_atom (* matches (zero width) if next pattern does not match *)
| "=", rx_atom (* matches (zero width) if next pattern does match *)
| "^" (* matches (zero width) start of string *)
| "$" (* matches (zero width) end of string *)
| "s" (* matches one whitespace character *)
| "S" (* matches one non-whitespace character *)
| "&", rx_match_mod
;
glob_group = "(", "^", pattern, ")" (* capturing sub group *)
| "(", pattern, ")" (* sub group *)
;
class_range = class_char, "-", class_char (* contains a range of chars, eg. [a-z] *)
;
glob_cclass = "[", { class_char | class_range }, "]" (* character class match for 1 char *)
| "[^", { class_char | class_range }, "]" (* negated character class match for 1 char *)
;
pat_glob = "*" (* 0 or N any characters *)
| "?" (* any character *)
| "$", pat_regex
| glob_cclass
| glob_group
;
pat_branch = { glob_atom }
;
pattern = pat_branch, [ "|", pattern ]
;
key = index | pattern
;
kv = key, "=", pattern
;
kv_item = "{", kv, { ",", kv }, "}"
;
node_match = ":", ["!"], "(", selector, ")"
| ":", ["!"], kv_item
| ":", ["!"], "type", "=", pattern
(* pattern is matched against
vval type as returned by `type` *)
| ":", ["!"], "str", "=", pattern
(* pattern is matched against
the string contents or stringified
representation of the value *)
;
node_cond = node_match
| node_match, "&", node_cond
| node_match, "|", node_cond
;
node = key, { node_cond }
(* marks it for referencing it in the result set *)
| "**", { node_cond }
(* deep expensive recursion *)
| "^", node
;
selector = node, { "/", node }
;
Structs
| CaptureNode | Stores the position of a captured part of the input string of a pattern. |
| PatResult | Stores the result of a pattern match, including the captured parts of the input string. |
| RxBuf | A parse buffer, storing the current offset into the input string. |
| SelectorState | State for evaluating patterns and selectors. |
Functions
| create_regex_find_function | Creates a function that takes a string slice and tries to
find the compiled regular expression in it.
The returned function then returns a |
| create_selector_function | Creates a function that takes a VVal data structure
and runs the given selector expression on it.
The returned function then returns a list of captured nodes
or |
| parse_pattern | Parses a regex pattern from a parser State and returns the VVal data structure describing the parsed pattern. |
Type Definitions
| PatternNode | A function type for the evaluation node of a regex pattern. |
| SelNode | A function type for the evaluation node of a data structure selector. |