Maxime Coste
77272db0fd
make Buffer::{add,remove}_change_listener const and the listener list mutable
2012-11-12 20:11:27 +01:00
Maxime Coste
fedabb4176
Rework Window creation, avoid using the same window in multiple clients
2012-11-05 19:15:42 +01:00
Maxime Coste
c947819154
Fix buffer iterator_at_line_{begin,end}(LineCount)
2012-10-31 14:28:03 +01:00
Maxime Coste
c92077762c
Makefile: add -Wall to CXXFLAGS
2012-10-11 01:17:29 +02:00
Maxime Coste
0ce6bd9bf5
use ByteCount instead of CharCount when we are really counting bytes
...
(that is most of the time when we are not concerned with displaying)
2012-10-11 00:41:48 +02:00
Maxime Coste
194bf6ac98
Buffer: add some utf8 sanity checks
2012-10-08 19:25:17 +02:00
Maxime Coste
9ec10daf69
move clamp to utils.hh
2012-10-02 14:08:09 +02:00
Maxime Coste
e39086cd5f
Buffer: reset undo data after executing hooks in constructor
2012-09-11 19:03:37 +02:00
Maxime Coste
f9e31856cf
Buffer: Allow inserting at the end when the inserted text ends with an end of line
...
Adapted other code in consequence and added unit tests so that this behavior
is maintained.
2012-09-10 19:26:17 +02:00
Maxime Coste
e4fd839dda
use a strongly typed int CharCount for character counts
2012-08-23 23:56:35 +02:00
Maxime Coste
0d8cce2728
use a strongly typed int LineCount for line counts
2012-08-22 23:33:52 +02:00
Maxime Coste
0eaf39b725
Add Buffer::iterator_at_line{begin,end}(size_t line) overloads
2012-08-21 20:52:49 +02:00
Maxime Coste
390d4ccdfc
Buffer::{iterator_at,clamp} takes an optional avoid_eol parameter
...
when avoid_eol is true, clamping does avoid end-of-line if possible
2012-08-15 18:06:59 +02:00
Maxime Coste
260b30e6d9
misc cleanups
2012-08-15 17:55:58 +02:00
Maxime Coste
5393e9e78b
Buffer: add a timestamp
2012-08-15 17:07:53 +02:00
Maxime Coste
4e34f777b0
Buffer: stronger invariant, a buffer is never empty and all lines finish by '\n'
2012-08-14 14:13:10 +02:00
Maxime Coste
759319ca44
Buffer: move back Modification as an implementation detail
...
* Filters now only works on insertion and take directly the
iterator and content
* use Buffer::insert and Buffer::erase to modify a buffer
2012-08-10 19:12:43 +02:00
Maxime Coste
54b599c1a7
Buffer: fix corner case in insert
2012-08-10 14:22:57 +02:00
Maxime Coste
c7fc2a9317
Buffer: add reset_undo_data method
2012-08-10 14:21:32 +02:00
Maxime Coste
ce99856bfa
Refactor BufferManager
2012-08-08 19:36:40 +02:00
Maxime Coste
18ca422306
Context: only buffer context are not allowed, an editor is always needed
2012-08-05 20:12:43 +02:00
Maxime Coste
23f72851e4
Buffer: fix insert at end of buffer
2012-08-02 07:04:04 +02:00
Maxime Coste
4908b2c3ef
Fix end_it computation in Buffer::insert, avoid clamping in iterator_at
2012-07-18 14:12:41 +02:00
Maxime Coste
31c0931dff
Go back to a generic BufferChangeListener interface for selection update
2012-07-16 21:51:37 +02:00
Maxime Coste
49e1d91804
Buffer: pass by value instead of by reference when object will be copied anyway
...
Let copy elision and move semantics kick in
2012-06-29 13:19:29 +02:00
Maxime Coste
36e4dacdf5
Fix BufferIterator::on_erase and tweak Buffer
2012-06-28 14:26:01 +02:00
Maxime Coste
ccec35f88c
code cleanups in buffer
2012-06-25 19:05:32 +02:00
Maxime Coste
eb34f6db73
execute BufClose hook in Buffer destructor
2012-06-14 17:44:28 +00:00
Maxime Coste
fd8517f91e
fix some warnings detected with clang
2012-06-05 13:33:02 +00:00
Maxime Coste
bc359d7c90
BufCreate hook is always called for every buffer, BufNew is called when creating a new file
2012-06-12 18:27:57 +00:00
Maxime Coste
9bcfda3226
HookManager are now hierarchical from window to buffer to global
...
window hooks also executes buffer hook which also execute global hooks
2012-06-07 13:29:44 +00:00
Maxime Coste
a7c33207d6
check if no modification were made in Buffer::end_undo_group
2012-06-04 14:12:37 +00:00
Maxime Coste
9337938403
replace std::string references with String
2012-04-14 01:17:09 +00:00
Maxime Coste
e4b872abd2
remove ModificationListener and use a list of iterators to update instead
...
This permits to fix a bug in BufferIterator::upgrade, replaced by
BufferIterator::on_insert and BufferIterator::on_erase. ModificationListener
was only used to updating iterators anyway.
2012-04-04 13:56:19 +00:00
Maxime Coste
6cedff8fb2
fix some corner cases in Buffer modification
2012-04-04 12:25:42 +00:00
Maxime Coste
f3dd65fbf1
add an OptionManager class and use it to manage tabstops
...
OptionManager map names to options, and may delegate option resolution
to it's parent if it does not contains the asked for option. That way
Buffers can override global options, and Windows can override Buffer
options.
2012-04-03 13:39:20 +00:00
Maxime Coste
9444c84b1c
rename HooksManager to HookManager
2012-04-03 12:01:01 +00:00
Maxime Coste
2e7cd2233c
add a Line::length method
2012-03-30 12:00:40 +00:00
Maxime Coste
0ba7c7286d
Store buffer content in a list of lines
...
Instead of a big std::string, buffer now store it's content in a
list of lines. In order to achieve O(log(n)) random access, lines
contains both their content and their offset since the start of
the file, making binary search usable.
BufferIterator now have a LineAndColumn coordinate into the buffer
instead of an offset so that access is still O(1).
2012-03-30 11:37:18 +00:00
Maxime Coste
792f0f7f2e
BufferManager no longer owns buffers, only register them
2012-03-26 14:21:49 +00:00
Maxime Coste
3dd82a2b85
get rid of Buffer::at
2012-03-19 14:04:33 +00:00
Maxime Coste
a377ff79aa
buffer style fix
2012-03-12 21:39:54 +00:00
Maxime Coste
3c105592e0
get rid of Buffer::compute_lines
2012-03-12 21:31:27 +00:00
Maxime Coste
97b8905a6d
fix update_lines on empty buffer
2012-03-12 14:26:46 +00:00
Maxime Coste
df0f7b4689
rename BufferString to String
2012-03-08 21:23:29 +00:00
Maxime Coste
c98657a512
fix some unitialized variable use (thanks valgrind)
2012-03-08 20:49:10 +00:00
Maxime Coste
0ce3bc4621
simplify and optimize buffer line handling
2012-03-06 14:27:03 +00:00
Maxime Coste
c4ad372d91
call compute_lines before hooks at Buffer construction
2012-02-28 14:23:52 +00:00
Maxime Coste
5bddd166f1
fix Buffer::line_length for last line
2012-02-27 19:52:36 +00:00
Maxime Coste
416a1805b3
Fix last line handling in buffer
2012-02-22 22:02:43 +00:00
Maxime Coste
a386315bde
Buffer: optimize line updating when applying a modification
2012-02-22 21:54:25 +00:00
Maxime Coste
030450838a
fix Buffer::line_length for last line
2012-02-22 21:49:00 +00:00
Maxime Coste
96101b4392
Use an Editor instead of a Window as much as possible
2012-02-02 20:48:03 +00:00
Maxime Coste
3ef9895a97
Buffer: support creation of temporary windows to apply commands when no windows are in context
2012-01-31 14:03:10 +00:00
Maxime Coste
830d96f7a1
Buffer: add NewFile buffer type for buffer with an non existing yet file
2012-01-31 14:01:48 +00:00
Maxime Coste
945ad361fb
HooksManager: forward declare Context instead of including context.hh
2012-01-23 13:56:43 +00:00
Maxime Coste
db9040e29e
HooksManager: extract the Singleton version as GlobalHooksManager
2012-01-23 13:40:42 +00:00
Maxime Coste
0e398566d2
Buffer: fix compute_lines on empty_buffer
2011-12-28 18:52:14 +00:00
Maxime Coste
2239fb6e49
Filters: move from buffer to window
2011-12-07 14:29:10 +00:00
Maxime Coste
c40eb2b03a
Buffer: replace insert and erase methods with modify
...
modify directly takes a Modification as parameter
2011-12-07 14:26:40 +00:00
Maxime Coste
2edddfe009
Buffer: rename BufferModification to Modification
2011-12-06 18:58:43 +00:00
Maxime Coste
0b4ed2280f
Buffer: call BufCreate hook on construction
2011-12-02 18:59:18 +00:00
Maxime Coste
94d59cc4dd
Buffer: add filter support
...
filters are functions called prior to applying a modification
to a buffer. They can manipulate the modification to change
the editor behaviour.
2011-12-02 14:28:27 +00:00
Maxime Coste
b24dec89a2
Buffer: add iterator_at_line_{begin,end} methods
2011-11-28 19:31:29 +00:00
Maxime Coste
51ee0b61f4
DynamicBufferIterator: use const_cast instead of having a mutable field in Buffer
2011-11-28 18:55:17 +00:00
Maxime Coste
dc642f8afa
Buffer: refactor to remove do_{insert,erase} methods
2011-11-27 18:41:25 +00:00
Maxime Coste
30b4fb6513
Buffer: fix handling of last eol
2011-11-24 14:23:41 +00:00
Maxime Coste
9cf7cb682c
Buffer: fix modified handling
2011-11-03 13:44:02 +00:00
Maxime Coste
d2c6ceb47b
DynamicBufferIterator: add and use in Selections
...
DynamicBufferIterator are a new type of BufferIterators that
automatically update themselves when their buffer is modified.
Selections now uses this type of iterators instead of plain ones
2011-10-24 14:26:21 +00:00
Maxime Coste
bace526fa3
Buffer: not copyable, add destructor
2011-10-24 14:23:13 +00:00
Maxime Coste
d7f934b7ca
Buffer: iterator_at prevents getting iterators on end of line
2011-10-19 14:25:13 +00:00
Maxime Coste
8cab34d57f
Buffer: add support for modification listeners
2011-10-18 00:55:45 +00:00
Maxime Coste
d48a2bd325
BufferIterator: move methods implementation to buffer_iterator.inl.h
2011-10-17 22:05:06 +00:00
Maxime Coste
53ce1e016a
Buffer: move struct Modification out of class, as BufferModification
2011-10-17 14:12:15 +00:00
Maxime Coste
9db4aa9691
Buffer: add a type property
2011-10-07 14:15:55 +00:00
Maxime Coste
4ce349fa02
Buffer: modification tracking
2011-10-05 14:21:24 +00:00
Maxime Coste
7746c78ccc
BufferIterator: add operator>{,=}
2011-09-28 20:53:29 +00:00
Maxime Coste
d4933daba0
BufferIterator: fix operator=
2011-09-24 13:06:35 +00:00
Maxime Coste
948443a077
Buffer: add line_count method
2011-09-22 13:58:35 +00:00
Maxime Coste
34c9b0d30f
LineAndColumn: move to it's own header and add operator[+-]=?
...
LineAndColumn is now a template so that WindowCoords and BufferCoords
cannot be added together.
2011-09-17 14:13:33 +00:00
Maxime Coste
030c5caf0a
assert: custom implementation
2011-09-09 19:24:18 +00:00
Maxime Coste
76b7c60afb
Buffer is now responsible for window creation
2011-09-08 14:30:36 +00:00
Maxime Coste
d3499ecd9c
Window lifetime is now handled by it's buffer.
...
A window cannot outlive it's buffer, so it makes sense to keep only a
reference on it hand have the buffer manage the window lifetime.
2011-09-08 00:13:19 +00:00
Maxime Coste
535e200587
Add a BufferManager singleton class, handling buffer lifetime
...
it also provide access to buffers by name
2011-09-08 00:11:48 +00:00
Maxime Coste
1e87fe17c6
Buffer: Undo/Redo implementation
...
Currently only a linear undo, i.e. if you undo and then make some new
changes, previous undoed changes are lost. Final undo system should
support an undo tree, with timestamped modifications.
2011-09-06 18:49:32 +00:00
Maxime Coste
3f51feaaef
Buffer: accept initial content in constructor
2011-09-06 18:33:18 +00:00
Maxime Coste
6668151c78
LineAndColumn: segregate into WindowCoord and BufferCoord
...
Having the same type to specify coordinates in window space or buffer
space is error prone, now the compiler will tell if we use one for
another.
2011-09-05 19:06:31 +00:00
Maxime Coste
39f12a1766
add const BufferIterator::Buffer& buffer() method
2011-09-02 18:35:22 +00:00
Maxime Coste
535285d9e6
Initial commit
2011-09-02 16:51:20 +00:00