Commit Graph

180 Commits

Author SHA1 Message Date
47ed45aae6 More fixing. 2017-12-30 23:47:05 -08:00
9c302620e9 Updating to use the new Ropey.
This is mainly just for kicks and giggles, since it really won't
work quite properly anyway, due to the lack of grapheme indexing.
The next real thing is to... well, start from scratch.
2017-12-30 23:10:56 -08:00
8d146a595e Moved Ropey dependency in-tree. 2017-11-25 23:12:37 -08:00
45e6125bbc Updated to work with more recent library versions. Also RustFmt. 2016-03-05 02:40:01 -08:00
f1ffc2867a Unit tests now also compile on stable rust. 2015-07-06 19:31:55 -07:00
ec16e8ac6e Led is building on stable rust! Woo hoo! 2015-07-06 19:20:25 -07:00
6823706d69 Working towards rust stable support. 2015-07-06 18:39:00 -07:00
9644a1aa03 Updated dependencies for stable rust.
Warning: doesn't compile.  Haven't updated own code for stable
yet.
2015-07-06 18:14:12 -07:00
869cb187b6 Migrated code from std::old_io to std::io 2015-03-15 16:03:23 -07:00
57f013bd46 Updated to latest rustc and rustbox. 2015-03-15 14:47:16 -07:00
1d6a8cb107 Added ability for soft-wrapped lines to have additional indentation. 2015-03-08 19:58:18 -07:00
cbff82b462 Implemented word wrapping. 2015-03-08 19:47:30 -07:00
e1e06633c7 Added option to maintain indentation when wrapping lines.
Currently only exposed in code, not in UI.  Enabled by default.
2015-03-08 12:18:22 -07:00
ed510cffbc WIP more line wrapping options.
This commit just adds code to allow non-wrapping behavior.
2015-03-07 18:30:18 -08:00
b2f1044b48 Fixed bug resulting from API change in Ropey. 2015-03-03 16:27:38 -08:00
f4847a4f8e Updated to latest Docopt and Ropey.
Also fixed bug resulting from a change in API behavior in Ropey.
2015-03-03 15:26:20 -08:00
cca7133264 Updated code to latest Ropey. 2015-03-03 00:08:52 -08:00
1ae3a01566 Updated code to work with the latest Ropey. 2015-03-02 16:08:50 -08:00
442fcdcb1c Updated description in readme file. 2015-02-25 20:09:16 -08:00
ada003b346 Split rope implementation off into external lib "Ropey".
Ropey can be found at https://github.com/cessen/ropey
2015-02-25 20:05:17 -08:00
82e6fca1dd Updated code for latest rustc. 2015-02-23 20:50:55 -08:00
d3cd1c4b05 Fixed bug in Editor::move_view_to_cursor().
Was causing the view to move unecessarily when the cursor is at the end of
the buffer.
2015-02-22 20:35:41 -08:00
c532b10f22 Fixed bug in Editor::move_view_to_cursor()
It thought it was one line shorter than it actually was.
2015-02-22 20:30:33 -08:00
c348f252bb Fixed bug in buffer drawing code.
It was causing the entire last line to be re-scanned to find the
cursor drawing position if the cursor was at the end of the buffer.
This was both slow and resulted in an incorrect position, since
all the rest of the drawing assumes line blocks.
2015-02-22 20:24:19 -08:00
ae26c5f873 Fixed bugs in LineFormatter that was causing weird cursor nav behavior.
They were two pretty much identical bugs in both index_offset_vertical_v2d()
and index_set_horizontal_v2d().  Neither method was checking for slipping
off the end of a line block.
2015-02-22 20:09:18 -08:00
1b3acfd29f Fixed bug in LineFormatter::index_offset_vertical_v2d()
The bug was causing very incorrect behavior when a single line was long
enough to be split into multiple blocks.
2015-02-22 19:30:13 -08:00
9c462ee332 Finished converting codebase back to plain Rope's.
Everything appears to be working identically to how it was before converting
back.
2015-02-22 18:13:10 -08:00
fee6fc21a3 Removed line and node source files since they are no longer used. 2015-02-22 12:30:02 -08:00
dcfa3fe0d5 Got unit tests compiling again, and added a few more to Rope. 2015-02-22 12:28:31 -08:00
02f24e4e6f WIP refactor to switch over to Rope from BufferNode. 2015-02-22 11:45:57 -08:00
0ee364f6ce Added Rope methods for converting between grapheme indices and line/column indices. 2015-02-22 00:15:18 -08:00
759b23db4d Added methods to Rope for finding the relationship between lines and graphemes. 2015-02-21 23:51:15 -08:00
c276117ac6 Rope now tracks line endings. 2015-02-21 22:55:14 -08:00
0da0b532d0 Forgot to set rope leaf size back to something reasonable. 2015-02-21 13:18:28 -08:00
d87dd9a343 Implemented efficient Rope splitting.
Rope::split() should now run in O(log N) time instead of O(N).
2015-02-21 13:12:26 -08:00
e082defad8 Added benchmarks for Rope::append() and Rope::split(). 2015-02-21 11:44:32 -08:00
52cb5f9456 Improved Rope's text insertion performance for large insertion strings. 2015-02-21 11:16:21 -08:00
a37bc17289 Even further improved balance unit tests.
Now the ropes are directly checked for adhering to the AVL balance
invariants.
2015-02-19 23:39:24 -08:00
b3ba8acdf5 Significantly improved Rope::rebalance() unit tests.
Now they directly run rebalance() on hand-constructed trees that test
various situations.
2015-02-19 23:23:36 -08:00
fe0a7e48ca Fixed bug in Rope::new_from_str().
The stragglers appended at the end were being appended at the top of
the tree, making it very unbalanced.  Using proper appending now.
2015-02-19 22:52:21 -08:00
2df1302723 Fixed bug in Rope::rebalance(). Stats weren't updated after rebalance. 2015-02-19 22:46:30 -08:00
5500c845f5 Ropes can now generate graphviz of their tree. Useful for debugging. 2015-02-19 22:39:57 -08:00
de668c5ddf Improved Rope::append()
Append no longer depends on a performant rebalance() operation in any
cases.  Append is guaranteed O(log N) now.
2015-02-18 23:41:28 -08:00
d95161b88f Improved Rope::rebalance() to actually rebalance properly in non-AVL cases.
The prior version worked fine for the typical single insertion/removal
cases.  But when larger imbalances happened due to bulk insertion or
removal it wouldn't work correctly.

The new improved version works on any tree whose children are themselves
balanced, even if they are extremely different heights when compared to
each other.  It works in O(log N) time.
2015-02-18 23:11:10 -08:00
535f219c41 Improved algorithm of Rope::append()
It doesn't use an intermediate conversion to a string anymore, and should
execute in O(log N) as long as the right-hand rope is equal length or
smaller than the left.

It may also be O(log N) for the left-hand rope being smaller, but that
depends on whether the rebalance code executes in O(log N) time when
the left and right hand side are individually balanced.  I haven't
analysed it yet, so dunno.
2015-02-17 23:10:38 -08:00
d26c95ab1d Fixed some bugs in the display code.
Everything seems to display correctly now.
2015-02-16 22:46:38 -08:00
311f8aca67 First attempt at making display code really take advantage of long line support.
It's not quite working right, but it does at least prevent performance
degradation.
2015-02-16 22:29:41 -08:00
86f3ada8ea Small tweak to indentation style auto-detection.
Very slightly favor larger indentations, instead of very slight favor
smaller indentations.  This is more likely to do the right thing on
very small files.
2015-02-16 22:06:48 -08:00
d3cbc7644f Updates for latest rustc. 2015-02-16 22:01:22 -08:00
0bc809781d WIP: fixes for long line support. 2015-02-15 23:23:17 -08:00