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