Commit Graph

128 Commits

Author SHA1 Message Date
Maxime Coste
2f450e0080 Regex: Add support for \Q...\E quoted parts 2017-11-01 14:05:14 +08:00
Maxime Coste
7a313ddafe Regex: small error message improvement 2017-11-01 14:05:14 +08:00
Maxime Coste
c282b699d7 Regex: fix support for - at end of a character class 2017-11-01 14:05:14 +08:00
Maxime Coste
e41d228af8 Regex: Disable dumping regex instructions by default in unit tests 2017-11-01 14:05:14 +08:00
Maxime Coste
d5048281a6 Regex: slight cleanup of the unit tests 2017-11-01 14:05:14 +08:00
Maxime Coste
f7468b576e Regex: Refactor regex compilation to a regular RegexCompiler class 2017-11-01 14:05:14 +08:00
Maxime Coste
d5717edc9d Regex: improve regex parse error reporting
Display the place where parsing failed, refactor code to make
RegexParser a regular object.
2017-11-01 14:05:14 +08:00
Maxime Coste
080160553c Regex: support escaped character classes 2017-11-01 14:05:14 +08:00
Maxime Coste
1a8ad3759f Regex: fix handling of strict quantifiers {N}
Previous behaviour was treating {N} as {N,}
2017-11-01 14:05:14 +08:00
Maxime Coste
be157453ad Regex: Use a std::function based "Matcher" op to implement character classes
This is more extensible and should allow easier support for non ranges
classes.
2017-11-01 14:05:14 +08:00
Maxime Coste
eb1015cdfb Regex: whenever Kakoune compiles a regex, pass it to the custom impl as well
That way we can see which features are missing.
2017-11-01 14:05:14 +08:00
Maxime Coste
002aba562f Regex: work on unicode codepoints instead of raw bytes 2017-11-01 14:05:14 +08:00
Maxime Coste
75608ea223 Regex: when in full match mode, do not accept trailing data 2017-11-01 14:05:14 +08:00
Maxime Coste
490c130e41 Regex: Implement leftmost matching
Ensure threads are maintained in "priority" order, by having two
split instruction (prioritizing parent or child).
2017-11-01 14:05:14 +08:00
Maxime Coste
182b70cb0a Regex: Add initial support for character ranges 2017-11-01 14:05:14 +08:00
Maxime Coste
52678fafa1 Regex: Add support for searching
Always compile a `.*` as the first instructions in a regex bytecode,
depending on the match or search mode, the RegexVM will either execute
this or skip it and start directly at the matching bytecode.
2017-11-01 14:05:14 +08:00
Maxime Coste
f7b8c1c79d Regex: cleanup and reorganize regex code and improve capture support
Introduce the CompiledRegex class, rename ThreadedExecutor to
ThreadedRegexVM, remove the RegexProgram namespace.
2017-11-01 14:05:14 +08:00
Maxime Coste
023511deff Regex: WIP support for saving captures 2017-11-01 14:05:14 +08:00
Maxime Coste
ad546e516a Regex: Small comment tweaks 2017-11-01 14:05:14 +08:00
Maxime Coste
46a113e10a Regex: Add support for curly braces count expressions 2017-11-01 14:05:14 +08:00
Maxime Coste
d04c60b911 Regex: Add support for subject begin/end assertion (\` and \') 2017-11-01 14:05:14 +08:00
Maxime Coste
9c5d539616 Regex: Add word boundary assertion support 2017-11-01 14:05:14 +08:00
Maxime Coste
a9a04e81b0 Regex: Ensure we only ever have a single thread on a given instruction 2017-11-01 14:05:14 +08:00
Maxime Coste
ee42c6b0ba Regex: add unit test to check the ".*" construct 2017-11-01 14:05:14 +08:00
Maxime Coste
4010c44fc0 Regex: Make the Split op only take a single offset parameter
Split now creates a new thread and keep the current one running, as
all of its uses are compatible with this behaviour, which enable a
more compact compiled code.
2017-11-01 14:05:14 +08:00
Maxime Coste
f9dc6774b9 Regex: Introduce RegexProgram::ThreadedExecutor and add line end/begin impl 2017-11-01 14:05:14 +08:00
Maxime Coste
a448e1e222 Regex: Code cleanup in the regex impl 2017-11-01 14:05:14 +08:00
Maxime Coste
8c9976ea72 Regex: Add initial, exploratory work on a custom regex engine 2017-11-01 14:05:14 +08:00