Commit Graph

1785 Commits

Author SHA1 Message Date
Nathan Sobo
d1d48f8fca WIP: Starting on LineMap 2012-02-16 20:52:12 -07:00
Nathan Sobo
6cc46d959b Start on rough version of LineFolder.screenPositionForBufferPosition
Still pretty ugly and not working quite right.
2012-02-15 19:06:53 -07:00
Nathan Sobo
cdd2b7faf5 Line folder handles folds starting and ending on same line. 2012-02-15 17:11:28 -07:00
Nathan Sobo
6de6852e92 SpanIndex.spanForIndex returns span of elements up to and *including* index. 2012-02-15 17:11:06 -07:00
Corey Johnson & Nathan Sobo
3782119a0a LineFolder renders a placeholder in place of a folded region. 2012-02-15 15:20:27 -07:00
Corey Johnson & Nathan Sobo
0b5f6c3af0 SpanIndex accepts a single index when inserting multiple values. 2012-02-15 15:19:39 -07:00
Corey Johnson & Nathan Sobo
b5d5b52dc6 💄 2012-02-15 15:19:13 -07:00
Corey Johnson & Nathan Sobo
f30f028868 Add replace and updateSpans to SpanIndex. 2012-02-15 15:18:52 -07:00
Corey Johnson & Nathan Sobo
9324c5a7ee Add ScreenLine.pushToken and .concat
These are used by the LineFolder to splice in a placeholder between folds.
2012-02-15 15:16:50 -07:00
Corey Johnson
a41676e84e Use event.originalEvent.keyIdentifier instead of event.which.
Events match patterns if event.keyStroke == key pattern.
2012-02-15 10:04:02 -08:00
Corey Johnson & Nathan Sobo
f9b7c02b81 Add methods to SpanIndex to support LineWrapper 2012-02-14 16:42:48 -07:00
Corey Johnson & Nathan Sobo
0ee1eeef75 Add SpanIndex, which will support line wrapping and line folding
SpanIndex keeps a sorted list of entries, each associated with a span. It can retrieve elements by aggregated span as well as their position in the list.
2012-02-14 15:49:16 -07:00
Nathan Sobo
b0c67741e0 💄 2012-02-13 15:35:06 -07:00
Nathan Sobo
2d3822dc90 LineWrapper exposes screenLinesForRow instead of tokensForScreenRow
I *think* this is a good idea. It makes us more consistent in always passing around ScreenLine instances. We'll be able to put nice metadata on these objects, like the buffer line they correspond to etc.
2012-02-13 15:29:16 -07:00
Nathan Sobo
a293a41ac7 Highlighter stores ScreenLine objects instead of token arrays. 2012-02-13 15:24:05 -07:00
Nathan Sobo
c89a8fbb37 Add ScreenLine & refactor LineWrapper to use it.
ScreenLine encapsulates the idea of a single line on screen. ScreenLines are first generated by the highlighter. A ScreenLine contains tokens and text, and currently has a method called splitAt which the LineWrapper, and soon the LineFolder, use to fragment the line.
2012-02-13 15:05:33 -07:00
Nathan Sobo
68d08acc1b Soft-wrap can be enabled before editor is attached to DOM. 2012-02-10 15:18:02 -07:00
Nathan Sobo
432f0e11a8 Merge branch 'softwrap' 2012-02-10 14:33:40 -07:00
Nathan Sobo
12a404fe5d Re-wrap lines when window size changes. 2012-02-10 13:14:17 -07:00
Nathan Sobo
90e019a4ac Merge branch 'softwrap' of github.com:github/atom into softwrap
Conflicts:
	spec/atom/editor-spec.coffee
2012-02-10 12:53:45 -07:00
Nathan Sobo
220deb88e9 Meta-alt-w toggles soft-wrap. Fix insert line element bug. 2012-02-10 12:52:12 -07:00
Corey Johnson
f5da211ad3 mouse clicks should correctly position the cursor on wrapped lines 2012-02-10 11:35:42 -08:00
Nathan Sobo
479b64b654 LineWrapper.setMaxLength emits a change event for all screen lines. 2012-02-10 12:21:42 -07:00
Corey Johnson
418dae11aa 💩 2012-02-10 10:51:53 -08:00
Corey Johnson & Nathan Sobo
9a922b1c2d Implemented MoveToNextParagraph motion 2012-02-10 10:41:02 -08:00
Nathan Sobo
b70acf2006 Un-F 2012-02-10 11:39:31 -07:00
Nathan Sobo
80d42ddb46 Selections render correctly with wrapped lines. 2012-02-10 11:32:46 -07:00
Nathan Sobo
ea4f122e19 Editor handles changes to wrapped lines. 2012-02-10 11:15:57 -07:00
Nathan Sobo
9fef75cb5f All tests passing. Editor gets lines from LineWrapper.
Line wrapping still not fully functional. Need to fix many aspects of the LineWrapper integration.
2012-02-10 10:50:01 -07:00
Nathan Sobo
5809a59e7a Add LineWrapper.screenLineCount and fix .splitTokens
splitTokens now returns a single empty screenLine when called with an empty buffer line, instead of no screen lines at all.
2012-02-10 10:38:35 -07:00
Nathan Sobo
672dc5a3c0 LineWrapper handles changes that remove lines. 2012-02-09 22:27:14 -07:00
Nathan Sobo
06e71bb42f 💄 Clean up LineWrapper spec 2012-02-09 18:30:57 -07:00
Corey Johnson & Nathan Sobo
0ec6b452ad LineWrapper handles changes that insert lines 2012-02-09 18:21:17 -07:00
Nathan Sobo
8338d37dde WIP: LineWrapper change events cover all screen lines.
Because the editor only repaints entire lines at a time, the loss of
precision shouldn't matter.
2012-02-09 17:45:18 -07:00
Corey Johnson & Nathan Sobo
8ce3c6ca9d Emit correct change events when replaced spans multiple screen lines 2012-02-09 15:17:59 -08:00
Corey Johnson & Nathan Sobo
785b800d5b Add allowEOL param to screenPositionFromBufferPosition 2012-02-09 14:19:54 -08:00
Nathan Sobo
4ea62a83a2 WIP: failing spec for change event causing line to wrap 2012-02-09 13:37:57 -07:00
Nathan Sobo
6c0a0e4bd2 Simplify splitTokens and make it work better too
We consider the line as a whole string and decide where we want to
split it before working with tokens. findSplitColumn just looks at the
character at the boundary... if it's a whitespace it looks forward for
a word. If it's not whitespace it looks backward for whitespace. This
ensures we always break on whitespace boundaries if possible.
2012-02-09 12:26:06 -07:00
Nathan Sobo
8232c7b153 Use splitTokens to build screen lines in LineWrapper. 2012-02-09 10:57:25 -07:00
Nathan Sobo
93bce8ccdf Add metadata to screenLines returned by splitTokens 2012-02-09 10:18:37 -07:00
Nathan Sobo
2dcdf82fc9 LineWrapper.splitTokens handles the cases I can think of
Basically... splitTokens will never put whitespace at the beginning of
wrapped display line. It also splits tokens without regard for
whitespace if the token has no whitespace but is too wide to display on
a single line.
2012-02-08 21:37:35 -07:00
Nathan Sobo
34922a18fe When splitting lines, keep leading whitespace on current line.
If we detect leading whitespace, we replace the next token with the
result of splitting the next token into two tokens, one containing any
leading whitespace and one with the rest. Then the leading whitespace
is added to the current line. When the second half of the split is
processed, it no longer has leading whitespace and is split to the next
line.
2012-02-08 19:15:00 -07:00
Corey Johnson
21e05f7218 LineWrapper.splitTokens splits line when tokens exceed LineWrapper.maxLength 2012-02-08 15:42:16 -08:00
Corey Johnson
3742700810 handle changes that cause line to wrap once 2012-02-08 14:05:52 -08:00
Nathan Sobo
1f6ab6f2b6 💄 2012-02-08 14:33:23 -07:00
Nathan Sobo
4b350598a5 WIP: Testing changes that cause lines to wrap 2012-02-08 14:25:47 -07:00
Nathan Sobo
5ab91c3f47 WIP: Handle changes that aren't affected by wrapping 2012-02-08 14:04:55 -07:00
Corey Johnson & Nathan Sobo
0daecb6047 More 💄 2012-02-08 13:21:00 -07:00
Corey Johnson & Nathan Sobo
82fb49fd1e 💄 Internal LineWrapper makeover
Feeling good on the inside.
2012-02-08 13:15:27 -07:00
Corey Johnson & Nathan Sobo
1566b12ecc Add LineWrapper.tokensForScreenRow 2012-02-08 12:55:51 -07:00