aboutsummaryrefslogtreecommitdiffstats
path: root/trunk/infrastructure/ace/notes.txt
blob: d9e1fda8154d6d442602cdc8465790e8d3f704a1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
XXX This is a scratch file I used for notes; information may be out of date or random -- dgreenspan

- rename ace2.js to ace.js


Editor goals:
- Highlight JavaScript accurately (including regular expression, etc.)
- On large documents (say 2000 lines), be responsive to new input and rehighlight the screen quickly
- Highlight "as you type", not when you're done with the current line
- Propagate multi-line comment highlighting efficiently
- Look and feel as "clean" and "native" as possible to the user
- Support unlimited "undo" with arbitrary undo model
- Allow features such as auto-indentation and parenthesis-flashing to be added easily
- Work in IE 6, FF 2, Safari 3, Camino
- Support native copy and paste, within the buffer and with other programs
- Not display any flickering, blurring, or any kind of artifact
- Support incremental syntax-highlighting of other languages too
- Be extensible -- multiple views of whole document, lines, tokens, characters
- Support native selection behavior, international input, assistive devices (potentially)
- Resizable text
- Unlimited editors per page


compatibility, speed, power, generality, 




- enhancement ideas
 - show mismatched brackets
 - undo history limit

ace2 changelog for week of 5/9:
- full "undo" support!  control-Z (Windows) or command-Z (Mac)
- flashing parentheses are back, and better than before!
- appjet:css sections are syntax-highlighted
- optimizations for slower machines
- fixed various quirks
- lines too long for browser are hard-wrapped on entry


== path to calls that change rep
- doLineSplice
 - incorporateUserChanges
  - idleWorkTimer
  - handleKeyEvent
 - performDocumentLineSplice
  - setCodeText
   - importCode
   - setup
  - handleReturnIndentation
   - handleKeyEvent
  - performDocumentReplaceRange
   - handleKeyEvent
   - performDocumentReplaceSelection
    - handleKeyEvent
- repSelectionChange
 - incorporateUserChanges
  - idleWorkTimer
  - handleKeyEvent
 - performSelectionChange
  - setCodeText
   - importCode
   - setup
  - handleReturnIndentation
  - handleKeyEvent
  - performDocumentReplaceRange
  - doLineSplice


make ace2_common local?


next steps:
- safari scroll jump
- FF 1.6 support
- weird "delete" bug
- speed on slow machines
- paren flashing
- undo


- investigate errors with special "delete" handling turned off
- track down FF quirk (delete at begging of line starting with one space)
- (done for now: look for IE memory leaks)


Outstanding issues:
+ Bugs:
+ Quirks:
  - FF: delete at beginning of line where line starts with 1 space (space briefly disappears)
  - IE: clicking below document body clears selection (instead of moving caret)
  - IE: horizontal scroll-bar sometimes unnecessary
+ Speed:
  - skip-list is slow for insert/delete lines on highlighting
  - return at bottom of 3000-line file takes too long to normalize in Firefox (probably worse in IE)
+ feature parity
  - regular expression highlighting not smart in lexically ambiguous cases (should use previous token)
  - paren flashing
+ additional features
 - less zealous IDE document-dirty marking (e.g. arrow-key marks dirty)
 - undo
+ fancy todo
  - bring back rich shell editor
  - use same highlighting for view-source, highlight on server
  - highlight CSS and stuff

+ done
  - multi-line strings
  - does tab do the right thing?
  - indent on return
  - quirk: return key doesn't scroll caret into view
  - line numbers  
  - highlight appjet directives
  - IE Support
  - slightly smarter indentation
  - tab deletes until a stop
  - interface: import/export
  - interface: rich/plain
  - bugfix: IE: return, delete, etc. doesn't mark document dirty!
  - bugfix: IE: can't copy/paste within document
  - caret not always in view after an edit

====================
  
Highlighting strategy:
- allow incremental dirty-region highlighting, based on time and char to pass
- first lex the viewport, based on information extending a little before it
- then highlight the viewport
- then highlight around the viewport?
- lex the whole document from the top
- highlight lines outside the viewport





- deal with key events in relation to when they are responded to (doLater after all?)
- use Pygment!

- handle international characters (fragile DOM state)
- normalize only when idle (make sure that works)
- better detection, e.g. paste in Safari
- selectionchange event?

- can eventually allow discarding user changes!

DONE:
- editing when lines consist of spans
- all browsers: scroll to full left on return, etc
- why does IE let you type without firing events?
- slow in IE?

tests:
- type some stuff, return, type more stuff, return
- return repeatedly starting at end of line, delete repeatedly
- return repeatedly starting at beginning of line, delete repeatedly
- return repeatedly starting in middle of line, delete repeatedly
- return/delete starting between blank lines
- try to move past end of document, then try to type, then try to move
- from collapsed selection, shift-left repeatedly, across lines, shift-right repeatedly
- from collapsed selection, shift-right repeatedly, across lines, shift-left repeatedly
- shift-up, shift-down; shift-down, shift-up
- cut-and-paste span of characters into middle of line
- cut-and-paste span of characters into blank line (FF)
- cut-and-paste span of characters at end of line (FF)
- cut-and-paste selection with blank lines in it, make sure lines still blank
- cut-and-paste selection starting and ending with blank lines (IE, FF)
- doc with blank lines, select-all, cut, paste
- doc starting and ending in blank lines, select-all, cut, paste (IE, Firefox)
  - IE currently loses one blank line at end if > 0
  - Safari loses one blank line at end if > 1
- non-empty doc, select-all, delete, select-all, delete (IE crash, Safari hidden cursor)
- non-empty doc select-all, return, return, return (IE)
- on last line of document: type stuff, return, type stuff. down arrow goes down = bad (IE)
- on last line of document: type stuff, return, return. should be no extra lines (IE)
- go to start of next-to-last line, shift-down, cut (IE)
- cursor at start of line, shift-down, cut, paste (IE cursor jump)
- cursor at start of one empty line, shift-down, cut, paste (IE)
- cursor at start of two empty lines, shift-down, cut, paste (IE, FF)
  - on IE, no new line is pasted; default behavior is worse, so I'll take it
  - on FF, the equivalent of two returns; good enough
- cursor at start of two empty lines, shift-down, cut, paste in middle of line (IE, FF)
  - in IE, FF, Safari, the equivalent of two returns
- type letter on blank line, delete it (IE)
- type space on blank line, delete it (IE)
- type space before non-blank line, delete it
- delete blank line, then delete again quickly
- delete blank line from caret at start of line starting with one space (FF)
- type over selection from middle of one line to middle of next

- in middle of a word (span), quickly delete, then type a character, then delete (IE)
- paste text with blank lines from an external source
- meta-delete
- up arrow from beginning of line (WebKit)