filipp
c501457322
Move some logic to EditorResetConsumer
2024-02-23 15:09:45 +02:00
filipp
46425a24c3
Move some logic to DeleteCommandConsumer
2024-02-23 15:09:45 +02:00
filipp
9826f0a7f0
Move some logic to CommandCountConsumer
2024-02-23 15:09:45 +02:00
filipp
43175061e0
Fix broken digraphSequence
...
It shouldn't be retested on partial reset
2024-02-23 15:09:45 +02:00
filipp
0ab32cac34
Make MappingProcessor a KeyConsumer
2024-02-23 15:09:45 +02:00
filipp
e3ec9c614b
Add KeyConsumer
...
It will help us to have a more modular KeyHandler in future (chain of different consumers)
2024-02-23 15:09:45 +02:00
filipp
f454d60234
Add MutableBoolean to be able to pass and modify shouldRecord in methods
2024-02-23 15:09:45 +02:00
filipp
19fa00837c
Use KeyProcessResultBuilder
...
It will help us to build the KeyProcessResult that we need for asynchronous key processing
2024-02-23 15:09:45 +02:00
filipp
275c5d28e1
Add KeyProcessResultBuilder
2024-02-23 15:09:45 +02:00
filipp
15ae069f6f
Make keyHandlerState argument not null
...
Applying default values may lead to unexpected results, especially if we sometimes want to use the global state (IJ), and at other times, its clone for asynchronous processing (Fleet).
2024-02-23 15:09:45 +02:00
Filipp Vakhitov
00f5541dc6
Add KeyProcessResult interface
2024-02-23 15:09:45 +02:00
Filipp Vakhitov
02540eb303
Pass KeyHandlerState as a method argument
2024-02-23 15:09:45 +02:00
Filipp Vakhitov
282e581bdb
Make state cloneable
2024-02-23 15:09:45 +02:00
Filipp Vakhitov
31e7c49608
Add equals & hashCode
2024-02-23 15:09:45 +02:00
filipp
7966a6dc91
Create KeyHandlerState
...
We do not need multiple commandBuilder, digraphSequence or mappingState and this class will be a singleton containing them
2024-02-23 15:09:45 +02:00
filipp
5fc2f04224
Remove mappingMode from MappingState
...
It unnecessarily binds mappingState to mode and thus to editor. And we want to simplify things and have a single MappingState instead of multiple of them
2024-02-23 15:09:45 +02:00
filipp
6edfd8ed22
Remove deprecated showmode status bar text update that does not work with the new UI and will be replaced with widget
2024-02-23 15:09:45 +02:00
filipp
363db05db7
Macro recording state is no longer per editor
...
It will not only simplify VimStateMachine, but also help us to support multi-editor macros in future
2024-02-23 15:09:45 +02:00
filipp
3738012dd6
Listeners refactoring
...
1. Listeners now disposed after turning plugin off
2. Change widget listeners to be recreated on plugin toggle
3. Add CaretVisualAttributesListener
2024-02-23 15:09:45 +02:00
filipp
355cfe035d
Remove Editor from VimStateMachine
...
Rationale:
1. A much more experienced developer, whom I highly respect, suggested to empty VimStateMachineImpl constructor in his TODO comment.
2. I aim for VimStateMachine to be a data class rather than being a container for both data and complex logic.
3. From an architectural perspective, it is more correct. Editors do have state (or they may possess a single global state if the corresponding option is set), but a state does not own an editor.
2024-02-23 15:09:44 +02:00
6dd924b2b2
Implement motions to go to next/previous misspelled word
2024-02-23 10:17:25 +02:00
Matt Ellis
f439474b73
Fix set command tests
...
Also hides more feature flags and diagnostic settings from users and unit tests. Shows them when in internal mode.
2024-02-23 10:04:23 +02:00
Matt Ellis
d6cd92e256
Migrate extensions to use operatorfunc option
2024-02-23 10:04:23 +02:00
Matt Ellis
3a294268d9
Introduce operatorfunc option
...
Allows creating custom operators in script, as shown in JetBrains/ideavim#702
2024-02-23 10:04:23 +02:00
Alex Plate
73c3c9f7fe
Replace Enum.values() with Enum.entries, as suggested since 1.9
2024-02-20 16:12:34 +02:00
Alex Plate
328bc5e95a
Convert some services to light services
2024-02-20 16:10:07 +02:00
Alex Plate
12d0d2613f
Allow sneak plugin to be registered with the original mappings from the sneak plugin
2024-02-13 19:20:41 +02:00
f69630b668
VIM-3238 Fix recording a macro that replays another macro
2024-02-10 20:05:47 +02:00
Alex Plate
855dbfab16
Fix issues with enter in python console
...
VIM-3287
2024-02-05 18:31:43 +02:00
Filipp Vakhitov
63995e8c61
Support e flag for search
2024-02-05 16:29:49 +02:00
Filipp Vakhitov
6386770ff3
Move more tests to src
2024-02-05 16:29:49 +02:00
Filipp Vakhitov
b4e831a81f
Fix VisualAreaMatcher & TextRange
2024-02-05 16:29:49 +02:00
Filipp Vakhitov
9b283360ce
Minor improvements
2024-02-05 16:29:49 +02:00
Filipp Vakhitov
fabbd4d156
Better SelectionInfo implementation
2024-02-05 16:29:49 +02:00
filipp
9bea5bf5f7
Remove deprecated code
2024-02-05 16:29:49 +02:00
filipp
9fbc990493
Fix visual matching
2024-02-05 16:29:49 +02:00
filipp
b05fdaaa73
Fix tests
2024-02-05 16:29:49 +02:00
filipp
52d5d4d64c
Fix Keyword token
2024-02-05 16:29:49 +02:00
filipp
6ec712466c
Fix StartOfWordMatcher & EndOfWordMatcher
2024-02-05 16:29:49 +02:00
filipp
6616b8dc07
Simplify MarkMatchers
2024-02-05 16:29:49 +02:00
filipp
807457c718
Hide method and add Deprecated annotation
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
13d2a40903
removing print
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
022b196d6a
adding comments and small refactors
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
7a64216830
getting rid of usages of deprecated classes
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
bf7d2bd465
marking classes as deprecated
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
6e97b591de
fixing some error messages
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
fc7c470966
fixing nohlsearch command
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
51492ca121
moving seach methods back to VimSearchGroup base
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
ce1df84330
creating new IjVimSearchGroup class
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
9b43e2a715
working on kotlin implementation of SearchGroup class
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
732cabd6aa
working on processSearchCommand
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
7c14801d5c
deprecating most of SearchHelper
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
8fd6985316
deprecating SearchHelper find and findAll
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
feac001499
substitute command working with new engine
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
4c47e3a8eb
integrating new regex into global command
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
7773b625a5
\c token can't get overrided by \C
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
abe1abec72
test for \c token always taking priority
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
023838a96b
working on implicit DFA algorithm optimization
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
f4e743acc5
VimRegex uses wrapscan option
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
06d58cbda5
integrating options into the main module
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
d199dea204
using options in findPrevious
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
5722060ed9
testing VimRegex with smartcase set
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
d4f7e727c1
VimRegex methods now receive options
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
39897bd012
allow findAll to have a max index
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
2bf46ce2f3
fixing findPrevious not wraping around in some cases
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
b49a185efc
using the count parameter in find()
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
e305ebd1ed
fixing patterns with just a AND operator
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
6f5c9826f4
fixing patterns with single ^ or $
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
b2441c3cca
throwing and catching VimRegexException
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
a73599e9ee
use non-exact nfas for slightly faster matches
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
43f5d5a8e8
integrating findAll
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
b20cbd3558
fix findNext getting stuck at line ends
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
7f835a407c
fix findPrevious not finding matches that start at end-of-line
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
9859974db7
integrating findNext and findPrevious
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
bd92ef08ec
use explicit stack instead of recursion for backtracking
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
8de6107a17
getting rid of handleTransition method
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
e639f03ac7
stop using non-exact start nfas
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
f9aac442c1
findAll returns List instead of Sequence
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
5fdf675168
rename NFATest to VimRegexEngineTest
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
232f81ff48
commenting new classes
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
1c4a6b2274
refactoring nfa simulation logic to its own class
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
deb71f8efc
cleaning comments
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
4596596d9f
new findPrevious API method
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
bbb6d42f8d
changing find to findNext
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
01efd0f9f0
trying to get antlr to report vim errors
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
2d7597d206
clearing some TODOS in VimRegex
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
221741c891
assuring that cursor line and column tokens belong to the same cursor
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
9f69beb450
test for pattern with multiple cursors
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
e843d9e9c3
assuring that visual selection tokens belong to the same cursor
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
008b3d94fb
assuring that all cursor and mark tokens belong to the same cursor
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
6756d83c55
test for tokens belonging to the same cursor
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
b52072a2e3
visitors for mark related tokens
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
3afb00d563
tests for mark related tokens
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
a30c94fd2f
mock mark related methods for regex testing
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
f50c29a285
matchers for mark related tokens
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
f238b0f138
parsing more mark registers
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
d0a8c98040
parsing mark related tokens
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
b3d161ad97
fix tests not detecting visual area selection properly
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
fce9cf2077
visitor for visual area token
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
efd0e56697
visual area matcher
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
b94a9bb9d9
nfa tests for matching inside visual area
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
c153cc5a29
mock visual selection
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
a680e9a25a
visual columns matching
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
3c18c4ef22
fixing parsing of optionally matched sequence
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
c4e11b5976
visitor for optionally matched sequence
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
65be51dd48
tests for optionally matched sequence
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
9684103f97
parsing optionally matched atoms tokens
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
f4c647d430
new doTest method for VimRegexTest
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
f1eab3b9c1
dividing regex api tests into seperate classes
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
545d52bd93
dividing regex tests into internal and public api tests
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
4e42198c09
using multi line strings in VimRegexTest
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
44736a51b9
new NFA doTest method
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
e675ffd623
cleaning multiline strings in tests
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
1f14e06bd3
refactoring editor mock methods
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
9871078269
tests receive caret indexes in the text
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
5e7a7f4d62
fixing cursor line and column matchers
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
7d690c6809
visitors for cursor line and column tokens
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
6edb4266d5
nfa tests for cursor line and column tokens
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
799e82d501
matchers for cursor line anc column tokens
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
a2370bff68
parsing cursor column tokens
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
c72f3bcd12
parsing cursor line tokens
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
295964a74d
mocking VimEditor.offsetToBuffer position and fixing visitors
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
d77cda0fae
visitors for line and column tokens
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
6da072d47d
matchers for line and column tokens
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
471a5a1b3e
tests for line and column tokens
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
cd5da2d237
parsing column related tokens
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
62f67cd626
parsing line related tokens
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
70db96d9e5
allow larger decimal codes inside collections
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
98470111fb
fixing octal codes larger than 0o377
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
557a3bb01f
fixing mixing % in match character by code tokens
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
dee70acdcb
tests for match character by code
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
862b16879c
visitors for character codes
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
ed7249558e
parsing match character by code
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
4f6c6f4d10
fixing rebase problems
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
650d02d9b3
using TextRange instead of IntRange
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
e4041a2f69
adding comments
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
4c284a6d13
visitor for negative limited lookbehind
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
e14fc801bd
fix lookbehinds matches not ending where they were supposed to
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
0478d468e0
adding tests for limited lookbehinds
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
4ac98710fb
implement limit lookbehinds
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
f256f6417e
parsing limited lookbehinds
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
ca94d55b62
implementing negative lookbehind
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
c11c061113
add tests for negative lookbehind
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
c15c3eb802
implementing positive lookbehind
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
0ce102b782
visitor for positive lookbehind
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
cc48207a99
adding tests for positive lookbehind
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
353ea5fc5d
reworking nfa to ignore input until first match
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
64138310cc
add more complex \& tests
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
1c4538af72
implementing \& operator
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
755b47ef19
adding nfa tests for \& operator
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
c78a5d3cab
allow for a state to have multiple assertitions
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
b9b8d30f3b
fixing collections with only char class expressions
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
9be93212c3
fname class visitor
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
89973809af
keyword class visitor
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
e324af356d
ident class visitor
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
f51fc6ed47
return, tab, escape, backspace class visitors
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
ecce98289a
xdigit class
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
23c14aa2e4
upper class visitor
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
678d04c5db
space class visitor
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
691ba75372
punct class visitor
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
d2d7bbc632
print class visitor
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
b3b1a6bdb9
lower class visitor
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
310125ea01
graph class visitor
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
208d1cbba2
digit class visitor
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
e94154ba80
cntrl class visitor
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
582fbdd9e7
blank class visitor
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
dd175912f4
alnum class visitor
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
a6a0ae7a51
alpha class visitor
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
8cdac91a01
base code for char classes expressions
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
4c89f41daa
adding nfa tests for collection char classes expressions
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
512e826a42
adding new parser tests for collection char classes
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
bc0d277a21
parsing collection char class expressions
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
169fe5fc5b
parse visual \%V token
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
30867702a4
parsing lookbehind tokens
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
6131f92ae6
parsing ~ token
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
823a52583c
documenting regex code
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
e2c6c0539f
add more lookahead tests
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
f7f1c0e90d
making nested lookahead tests pass
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
eca12607dd
pattern visitor is now a singleton
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
006e3e11f9
parser class is now a singleton
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
a9982cbdca
refactoring temporary field out of parser class
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
0fa9c5a2a2
moving all parsing logic to VimRegexParser class
...
rebasing
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
cdcc9729d3
add more failing lookahead tests
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
4acf651aa7
adding tests for nested lookahead tokens
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
4bba791c65
adding comments and small cleanups
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
662688d3b9
refactoring inappropriate intimacy between nfa and nfaassertion classes
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
21a3e8fdc4
extract methods refactor in nfa simulation code
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
3815a1d538
add more lookahead tests
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
cbe0c5cfec
implementing negative lookahead
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
15db9b30e1
add tests for negative lookahead
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
e891294c0f
parsing negative lookahead
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
f6b9e7cc26
implementing positive lookahead
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
052fd7162f
parsing positive lookahead
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
189acb73f5
dealing with atomic groups in a different way
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
ec7c1677b4
allow special escape characters in collections \e \t \r \b \n
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
a9474c8e67
allow character codes inside collections \d \o \x \u \U
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
3a70dfc5f3
implementing collections with EOL \_[]
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
669177d803
implementing and testing start and end of word tokens
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
b1f43b061c
parsing start and end of word tokens
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
7ff3c84deb
commenting new atomic groups code
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
ee642b63ce
adding explanatory comment on wierd atomic group test
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
17315e5096
implementing atomic groups
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
4e9d52fc62
placeholder for atomic groups
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
d7e87f8fc8
rename MultiBoundary to RangeBoundary
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
3efe11f393
refactoring visitors to prepare for different types of multis
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
26c6c464d8
adding tests for atomic groups
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
4db654e653
parsing atomic groups
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
048759d374
implement and test start and end of line anywhere in pattern
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
db2424057f
parsing start and end line anywhere in pattern
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
472a53e3b9
start and end of line anchors
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
9e15d91900
adding tests for empty editors
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
d5cff281c0
adding comments on new Matchers
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
57b6c4dffb
collection matcher uses set instead of list
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
908a2d1d8c
start and end of file
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
69bdea9273
character classes never ignore case
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
5b21a653ee
add test for case insensitive matching
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
cfddcf1630
ignore case tokens
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
f009687ddf
matchesAt API function
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
6ddfe29465
matches API function
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
715c51f673
matchEntire API function
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
b443e8f06a
fix quantified capture groups not updating properly
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
0bd0466c9c
cleaning adding transitions to states
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
ad5db3c9e5
fix capturing groups not updating properly
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
fa3182cb5e
adding failing backreferences test
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
3f44bed66e
adding comments to Matchers
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
2a70530d0f
matchAt API function
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
7c542d5fc7
implementing character classes with EOL
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
638dfb7777
parsing character classes with new line
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
1323536a63
testing and implementing backreferences
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
419212e2d4
parsing backreferences
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
5f1c234a7d
refactor Matcher to return number of consumed characters
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
db1e8301cd
implementing and testing lazy quantifiers
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
bf94a3c68d
parsing lazy quantifiers
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
96baa4ffc6
all named character classes
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
7d472afe61
set match start and end \zs \ze
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
f32a4d33a7
support unicode escape sequence in collections
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
0722991955
add test for collection with not special escaped character
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
bcc740cdbc
implementing custom collections
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
5cf46097f7
ascii character classes
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
61dc189f8b
char classes and collections base code
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
23c2b008c9
implementing cursor and using mockito to mock editor
...
rebasing
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
db14afdf3a
dot with and without newline
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
b7927336d1
implementing dot
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
ee23a3d4cd
commenting findAll
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
63c0112ffb
findAll API function
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
db08d7d280
find API function
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
9892525fbc
containsMatchIn API function
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
34b87ff6bf
adding comments
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
241ad68bd5
fix nfa looping in epsilon transitions
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
a0ec18921b
more correct way of handling quantifiers
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
45e17eb0b2
fixing quantifiers
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
59f0e9ae67
add test for updating capture group
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
af24611c73
capture group submatch
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
d4502dda3f
VimMatchResult stores matched string value
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
c0efa8af5d
use IntRange for match range
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
1c06a3fc89
add test for empty group
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
c19fb38d1c
implementing grouping
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
5dc1de9daf
add nfa test for escaped character
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
6774301938
updating comments
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
4ef6cf0428
implementing quantifiers
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
ca5f8e4b44
skeleton for NFA testing
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
1907f03abe
nfa simulation uses VimEditor instead of String
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
6351a4e4f3
initial nfa
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
fa34c3937f
initial nfa definition
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
cdac97ebf5
adding some zero-width tokens
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
fe958d28b8
lexer fixing what chars are taken literally
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
f71982e1d5
support unicode in collections
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
cb2bfcea53
unicode chars in all lexer modes
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
4a9d5bbceb
lexer support for unicode characters
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
10809eade6
regex very magic and very nomagic modes
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
43d63527f8
adding comments to parser grammar
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
df51eb54ed
using antlr token types
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
b47109ab4d
grammar add EOF at end of pattern
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
15b2b68940
making new collection tests pass
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
62a239f6fe
add tests for collections
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
d89bc95a0a
altering antlr error handling
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
2a76f21b31
regex range basic tests
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
f07e22d742
delete duplicate files
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
058ab7a1ea
gradle generate antlr files
...
rebasing
2024-02-05 16:29:49 +02:00
Emanuel Gestosa
fae3baa640
initial regex grammar
2024-02-05 16:29:49 +02:00
Filipp Vakhitov
11761b66b2
Revert "Fix(VIM-3183): Execute .ideavimrc on pooled thread"
...
This reverts commit 1d7796805c
.
2024-01-31 20:10:32 +02:00
Filipp Vakhitov
f83f107bd1
Revert "Support triggering option listeners outside EDT"
...
This reverts commit 5a6f54c96c
.
2024-01-31 20:10:18 +02:00
Filipp Vakhitov
f1b90857ff
Revert "Fix code in execute requiring EDT or write actions"
...
This reverts commit e7236beedd
.
2024-01-31 20:10:15 +02:00
Filipp Vakhitov
1822a59c70
Revert "Fix(VIM-3273): Config file stopped working"
...
This reverts commit 04230fdd9c
.
2024-01-31 20:09:31 +02:00
Filipp Vakhitov
90c7f747a4
Revert "Fix(VIM-3278) Relative number is broken in 2.8.0"
...
This reverts commit a1646a7a88
.
2024-01-31 20:09:23 +02:00
Filipp Vakhitov
0119912318
Revert "Add readActions & EDT"
...
This reverts commit 45a2eadc58
.
2024-01-31 20:09:08 +02:00
Filipp Vakhitov
45a2eadc58
Add readActions & EDT
2024-01-31 14:43:23 +02:00
Filipp Vakhitov
a1646a7a88
Fix(VIM-3278) Relative number is broken in 2.8.0
...
Proper options initialization order
2024-01-31 13:34:33 +02:00
Filipp Vakhitov
04230fdd9c
Fix(VIM-3273): Config file stopped working
2024-01-31 09:12:23 +02:00
Filipp Vakhitov
24e044bcda
Remove deprecated ComplicatedKeysAction.kt
2024-01-30 18:56:38 +02:00
Filipp Vakhitov
e87290aeea
Simplify storing global variables
2024-01-29 12:58:31 +02:00
Filipp Vakhitov
e7236beedd
Fix code in execute requiring EDT or write actions
2024-01-29 10:00:55 +02:00
Filipp Vakhitov
5a6f54c96c
Support triggering option listeners outside EDT
2024-01-28 14:00:36 +02:00
Alex Plate
808533b110
Fix(VIM-3260): Processing the offsets at the file end
2024-01-26 17:49:44 +02:00
Alex Plate
26d4074a61
[VIM-2974] Adopt other parts of key handling to the octopus handler switcher
2024-01-26 16:40:34 +02:00
Alex Plate
db6786414a
[VIM-2974] WIP: Bringing back the octopus handler switch
2024-01-26 15:32:29 +02:00
filipp
6c9ad4ded2
Remove deprecated xml-related code
2024-01-26 13:45:46 +02:00
filipp
32cae8ca11
Remove more deprecated things
2024-01-26 13:05:48 +02:00
filipp
0cb65279d9
Remove deprecated mark-related methods
2024-01-26 13:02:23 +02:00
filipp
412da06554
Remove deprecated ToggleOption.kt
2024-01-26 12:47:06 +02:00
filipp
017c9a6a70
Remove deprecated OptionService.kt
2024-01-26 12:43:06 +02:00
filipp
1d7796805c
Fix(VIM-3183): Execute .ideavimrc on pooled thread
2024-01-26 12:27:03 +02:00
Filipp Vakhitov
1da8cd53d2
VIM-1377 Normal mode needs to be more obvious
...
Save mode widget colors state in XML
2024-01-23 01:27:57 +02:00
Filipp Vakhitov
a9ededc997
VIM-1377 Normal mode needs to be more obvious
...
Add color customization to mode widget
2024-01-23 01:27:57 +02:00
Matt Ellis
825b62a2a9
Refactor to remove lazy properties
2024-01-04 15:58:36 +02:00
Matt Ellis
5ec817776c
Use "vim" prefix for option keys
2024-01-04 15:58:36 +02:00
Matt Ellis
3ad0519add
Extract initialisation strategies to new class
2024-01-04 15:58:36 +02:00
Matt Ellis
9868522341
Only calculate stack trace if logging is enabled
2024-01-04 15:58:36 +02:00
Matt Ellis
5b8d8c617f
Improve type handling
2024-01-04 15:58:36 +02:00
Matt Ellis
a1f66061e3
Extract option storage to separate class
2024-01-04 15:58:36 +02:00
Matt Ellis
d8811933c9
Simplify resetting options for testing
2024-01-04 15:58:36 +02:00
Matt Ellis
c9864dde8d
Extract parsed values cache
2024-01-04 15:58:36 +02:00
Matt Ellis
ca849d6649
Simplify API of OptionListenersImpl
2024-01-04 15:58:36 +02:00
Matt Ellis
95a2354a86
Fix issue where global value wasn't properly set
2024-01-04 15:58:36 +02:00
Matt Ellis
538e0ac48c
Extract listener notification
...
Refactoring - no intentional changes in behaviour
2024-01-04 15:58:36 +02:00
Matt Ellis
cbe0f89548
Extract listener registration to separate class
...
Refactoring - no intentional changes in behaviour
2024-01-04 15:58:36 +02:00
Matt Ellis
615b071dcb
Rename methods for clarity
2024-01-04 15:58:36 +02:00
Filipp Vakhitov
fc46acb2e4
Move to concurrent list
2024-01-03 12:15:31 +02:00
Filipp Vakhitov
2f20193086
Post-review improvements
2024-01-03 12:15:31 +02:00
Filipp Vakhitov
e02d34f023
Better ShowMode widget & Macro recording widget
2024-01-03 12:15:31 +02:00
filipp
216f020b70
Add new listeners
2024-01-03 12:15:31 +02:00
Alex Plate
b307c7d88b
[VIM-2929]: Reset the key stack in case of exception during the execution
2024-01-02 13:57:12 +02:00
Alex Plate
7098d2633a
Add a helper function to key keystokes from string
2024-01-02 13:57:12 +02:00
Alex Plate
e36131b38b
[VIM-2929]: Adding logging for tracing the keyStack
2023-12-28 11:24:13 +02:00
Matt Ellis
8ab43e98fe
Remove unnecessary keeping visual mode flag
...
The value was only ever set to false.
2023-12-22 10:55:00 +02:00
Matt Ellis
4f407ccc03
Remove unused multikey-undo flag
...
It's uncertain what this was introduced for, and it's no longer used for any behaviour
2023-12-22 10:55:00 +02:00
Matt Ellis
5f3fddd3e4
Remove unnecessary post process method
...
We no longer need to post process the selection because it is up to the operator implementation to end in the correct mode
2023-12-22 10:55:00 +02:00
Matt Ellis
392f3b536d
Remove unnecessary mode reset
...
Visual mode should already have been exited before executing the operator. The operator's implementation is responsible for handling the final mode
2023-12-22 10:55:00 +02:00
Matt Ellis
155de2b396
Remove always true check and always exit visual
2023-12-22 10:55:00 +02:00
Matt Ellis
6c9930ac2a
Removes unnecessary 'exit visual' command flag
...
This flag is only used to modify the behaviour of visual operators, but all visual operators have the flag, which means it's unnecessary. The only behaviour for visual operators now is to exit visual mode.
Note that visual motions are implemented separately, and handle their own visual mode requirements (e.g. MotionArrowLeftAction).
2023-12-22 10:55:00 +02:00
Matt Ellis
9dddf4f4bc
Minor cleanup
2023-12-22 10:55:00 +02:00
Alex Plate
6384b28689
Refactor listeners to avoid manual unregister
...
However, manual removal of listeners may cause "double" remove in cause the user turns off the plugin and then closes IDE: firstly listener is removed manually, and then by dispose call
2023-12-19 01:44:57 +02:00
Alex Plate
e661466558
Small refactorings on IdeaSelectionControl
...
They are done because if we don't set timer to null after tests, we have a leaked project
2023-12-19 00:12:54 +02:00
filipp
5afd161fba
Update minimal supported version to 2023.3
2023-11-24 20:42:48 +02:00
Alex Plate
568d5ca4ff
Fix(VIM-3090): Cmd line mode saves the visual mode
...
Previously, cmd line mode always returned to normal mode. However, it should keep the visual or one-time modes
2023-11-24 17:42:33 +02:00
Alex Plate
a9991f2a50
Convert ProcessGroup to kotlin
2023-11-24 17:00:06 +02:00
Filipp Vakhitov
8fcca05565
Fix(VIM-3176): Reselecting visual selection after pasting above it select wrong lines
2023-11-23 22:53:07 +02:00
Alex Plate
22062f0c77
Fix(VIM-3190): Do not use octopus handler if the enter key is used with modifiers like shift or control
2023-11-22 11:51:57 +02:00
Alex Plate
f6eab62c3c
Fix(VIM-3184): Revert "VIM-3184: Temporally disable new handlers for the thin client"
...
This reverts commit 6960a34d02
.
2023-11-22 09:42:59 +02:00
Alex Plate
6960a34d02
VIM-3184: Temporally disable new handlers for the thin client
2023-11-21 13:09:52 +02:00
filipp
f80d1defcb
Add Javadoc
2023-11-17 14:00:38 +02:00
filipp
a9052a068f
Fix property tests
2023-11-17 13:05:30 +02:00
Alex Plate
9d20061924
Do not register VimShortcutKeyAction for esc and enter keys
...
This is no more needed as we have a different way of getting the key. Also, this causes a bug VIM-3169
2023-11-10 17:17:13 +02:00
Filipp Vakhitov
ddfe8cf361
Support temporary options
2023-11-10 16:01:22 +02:00
Filipp Vakhitov
93c83f773a
Add generated JSON files to gitignore
2023-11-10 16:01:22 +02:00
Filipp Vakhitov
876e16fa9e
Support registering commands from json
2023-11-10 16:01:21 +02:00
Filipp Vakhitov
37067d5c72
Fix typos
2023-11-10 16:01:21 +02:00
Filipp Vakhitov
fe6c1ae452
Add LazyVimCommand and CommandProvider
2023-11-10 16:01:21 +02:00
Filipp Vakhitov
30165f5047
Support keypad keys in Vim key notation
2023-11-10 16:01:21 +02:00
Filipp Vakhitov
ced50bb2e8
Mark xml related classes for commands as deprecated
2023-11-10 16:01:21 +02:00
Filipp Vakhitov
dee84bcc63
Annotate commands
2023-11-10 16:01:21 +02:00
Alex Plate
288c66d8a2
Refactor execution of vim script
...
Now we set the flag `executingVimscript` during execution of any vimscript and we run initialization of delayed plugins after every call for execute.
This is needed to properly initialize plugins after call for `source` command. Previously this command initialized extensions as they met in the script, what may cause incorrect behaviour. With this update, we unified an approach for executing vim script.
2023-11-03 13:27:38 +02:00
Alex Plate
44c8a97f44
Consider the case when we load .ideavimrc file from using the source command
...
This includes updating the "ReloadIdeaVimRc" button and setting the correct mapping owner
Previously, the `source` command loaded ~/.ideavimrc file as a regular file, thus several features didn't work properly.
This refactoring was caused by this PR: https://github.com/JetBrains/ideavim/pull/736
2023-11-03 13:27:38 +02:00
Alex Plate
60c27b1dea
Add documentation about some aspects of IdeaVim implementation
2023-11-03 13:27:38 +02:00
filipp
06ef1c1182
VIM-1639 Ctrl-o and Ctrl-i jumping in files of different projects
2023-10-26 10:23:16 +03:00
filipp
a9ba9789fd
Fix(VIM-696): Vim selection issue after undo
2023-10-25 16:55:32 +03:00
Alex Plate
8c06767fdc
Show error instead of warning in case of exception
2023-10-20 11:10:55 +03:00
Alex Plate
25877e369b
Add comment saying that the ideaglobalmode option is experimental
2023-10-20 10:15:42 +03:00
Alex Plate
0271a475a2
Update docs
2023-10-20 10:15:42 +03:00
Alex Plate
26f48c5820
Fix(VIM-3095): Fix missing ellipsis digraph
2023-10-11 12:27:00 +03:00
Alex Plate
9eeeb15c6c
Enable octopus handler by default
2023-10-10 11:39:14 +03:00
Alex Plate
4731eb9db8
Bring back removed functions
2023-09-14 16:50:52 +03:00
Alex Plate
337f5ade59
Get rid of deprecated method
2023-09-14 16:31:26 +03:00
Alex Plate
fe8bbcb11a
Bring back a method to keep the compatibility
2023-09-14 16:26:14 +03:00
Alex Plate
b1b6b0bf80
Add links to the new page about modes
2023-09-14 15:44:00 +03:00
Matt Ellis
585b815472
Only notify changes if the value is different
...
This is primarily to avoid instantiating inactive extensions when
resetting all options back to default values, which sets extensions
inactive.
It applies to global and local options, but not to global-local. The
notifications for global-local options are already complex, as they can
be reacting to changes to both the global and local value, and only
notifying editors that are affected.
2023-09-11 11:04:09 +03:00
Matt Ellis
c37e2f4176
Update fallback window when all windows close
2023-09-11 11:04:09 +03:00
Matt Ellis
32b8d03c5e
Improve modifying string and string list options
2023-09-11 11:04:09 +03:00
Matt Ellis
71f3e1b4f1
Support per-window global values
...
For local-to-window options
2023-09-11 11:04:09 +03:00
Matt Ellis
aa6f53fa68
Require editor when getting/setting global option
2023-09-11 11:04:09 +03:00
Matt Ellis
700198d8bc
Remove test only vimscript execute method
2023-09-11 11:04:09 +03:00
Matt Ellis
3efab5928e
Evaluate ideavimrc in the fallback window context
2023-09-11 11:04:09 +03:00
Matt Ellis
93037b6866
Add fallback window to capture local option state
2023-09-11 11:04:09 +03:00
Matt Ellis
0f19e50c69
Improve hierarchy of option accessors
...
Getting the effective IJ options would allow access to Vim global and IJ global, but not Vim effective. IntelliJ specific options are now a separate hierarchy, so the Vim effective and IJ effective accessors now simply access all Vim or all IJ options.
2023-09-11 11:04:09 +03:00
Matt Ellis
66ea6ad3d4
Rename OptionScope to OptionAccessScope
2023-09-11 11:04:09 +03:00
filipp
0c1dc51db4
Fix(VIM-3060): Clipboard interaction stopped working
...
Fix for Windows
2023-09-07 14:42:00 +03:00
filipp
74a710c5e8
VIM-3060 Clipboard interaction stopped working
...
Fixed issue and tests (for Linux)
2023-09-07 02:39:23 +03:00
Alex Plate
456055bcf0
Do not run multiple carets from ChangeEditorActionHandler and instead pass this information to EditorActionHandlerBase
...
This is needed for the new way we register handlers. As we can't be sure that this commands won't be called from the `runForEachCaret` context, we have to avoid this method
2023-09-01 17:25:14 +03:00
Alex Plate
4532d68743
Convert change group to kotlin
2023-09-01 14:29:51 +03:00
Alex Plate
26e9bf5197
Detect if we run the action in runForEachCaret
scope or not
2023-09-01 13:25:15 +03:00
Alex Plate
e7a8b45c10
[VIM-3051] Refactor the way we store modes in IdeaVim
...
Now we have a single variable with current mode instead of stack of modes.
2023-08-25 11:38:21 +03:00
Alex Plate
22ca74a1a3
Use a different approach for switching to visual mode. The previous way caused "recursive runForEachCaret
exception"
2023-08-14 16:17:47 +03:00
Alex Plate
3093c9212c
Add note about visual type in text objects
2023-08-14 16:17:46 +03:00
Ludwig Valda Vasquez
068d610e3a
Add grapheme cluster handling tests
...
GraphemeBreakTest.txt was downloaded from the Unicode Character Database [0].
Changes to build.gradle.kts were required to stop `gradlew test` from
regenerating the resources with empty JSON objects. And adding a
dependency.
[0]: https://www.unicode.org/Public/UCD/latest/ucd/auxiliary/GraphemeBreakTest.txt
2023-08-14 09:04:41 +03:00
Ludwig Valda Vasquez
41177b91be
Handle unicode grapheme clusters
...
Some characters that render as a single symbol can span over a sequence
of several unicode code points (e.g., flag emojis, combination of a
letter and a diacritic, Hangul syllables, etc.).
Such composites are called grapheme clusters in the unicode standard,
and this patch introduces recognition of extended grapheme cluster
boundaries, allowing to iterate over rendered characters. Without this,
user may observe the cursor being "stuck" inside a character for several
keystrokes, while it's making its way through each code point in the
grapheme cluster.
The implementation follows the boundaries search algorithm outlined in
the technical report 29 of the Unicode standard[1]. The implementation was
tested against the set of test cases provided by the unicode character
database[2].
Additionally to the grapheme cluster boundaries search itself, this
patch adds `isExtendedPictographic` function, that answers whether the
given code point has a unicode "Extended_Pictographic" property, which
is required to correctly determine grapheme cluster boundaries. This
method is implemented natively in the JDK 21 and can be removed once we
start targeting that version.
Extended_Pictographic property is stored as a bitmap. I was considering
making a similar map for the code point classification in the grapheme
cluster boundary search implementation, which could yield better
performance, but that would require adding another half a megabyte (at
least) of data into the JAR and I've settled for the bunch of `if`s way.
That is something that can be reconsidered and shouldn't be difficult to
change if the impact on performance would be noticeable (in my simple
tests it didn't show).
A few functions in the vim-engine were adjusted to handle grapheme
clusters (such as getting the horizontal offset and adjusting the cursor
to not reach over the end of the line).
[1]: https://www.unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries
[2]: https://www.unicode.org/Public/UCD/latest/ucd/auxiliary/GraphemeBreakTest.txt
2023-08-14 09:04:41 +03:00
Alex Plate
5d4996c085
Optimize imports on the project
2023-08-11 11:54:38 +03:00
filipp
1fe64e69ca
Support running tests if headless
2023-08-04 19:00:47 +03:00
filipp
41df06a48b
Fix failing tests second attempt
...
(please please)
2023-08-03 14:00:03 +03:00
filipp
4188e636f3
Fix failing tests
...
(please)
2023-08-03 13:39:33 +03:00
filipp
e2c0d59e3a
Fix default register for unnamedplus without X
2023-08-03 11:24:29 +03:00
Alex Plate
a62cc3618c
Fix an issue with disposed caret when moving up
...
There was an issue that when we enter visual block, move up, then try to switch to the visual line, we get a disposed caret issue.
This was caused by the fact that we get the list of carets, then process them one by one. However, as we update the first caret, the second gets disposed.
2023-08-01 16:17:39 +03:00
Matt Ellis
d112030a8e
Add explanatory comment about InsertExitModeAction
2023-08-01 12:22:26 +03:00
Matt Ellis
dd24ebf184
Rename OptionsScope.AUTO to EFFECTIVE
2023-07-31 11:28:32 +03:00
Matt Ellis
7ef2be625f
Refactor parseOptionLine for readability
2023-07-31 11:28:32 +03:00
Matt Ellis
e3957d2207
Minor updates from code review
2023-07-31 11:28:32 +03:00
Matt Ellis
e1141dcd1c
Remove old option listener API
2023-07-31 11:28:32 +03:00
Matt Ellis
54dc184dd0
Introduce option effective value change listener
2023-07-31 11:28:32 +03:00
Matt Ellis
1977ce3ea5
Add simple one to many collection
2023-07-31 11:28:32 +03:00
Matt Ellis
c8c9d1729e
Introduce listener for global option changes
2023-07-31 11:28:32 +03:00
Matt Ellis
1c465f028e
Fix option scopes for :let command
2023-07-31 11:28:32 +03:00