forked from n-t-roff/sc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
TODO
190 lines (179 loc) · 7.69 KB
/
TODO
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
# TODO
Tests:
[ ] handle memory allocation failure everywhere
[/] add non interactive check commands for tests and benchmarks
[ ] write test cases for all commands and functions including corner cases
[ ] write benchmark scripts all commands and and functions
Evaluator:
[ ] fix operator priorities
[ ] use opdefs for precedence level in decompiler
[+] use infix operators from OASIS spec
[+] improve date/time representation and formatting
[+] fix API for date functions
[ ] fix API for status and cell functions
[ ] use more efficient API to enumerate ranges
[ ] implement IFS functions
[ ] add complex functions
[ ] add bessel/erf/gamma functions
[ ] add stat functions
[ ] add financial functions
[+] change expression functions for API compatibility
[ ] add inline vectors, columns and matrices in expressions
[ ] use unified enumerators for matrices and cell ranges
[ ] change cell references to relative and absolute coordinates
[ ] add refcounted formula objects
[ ] chain cells with formulas into a linked list or dependency tree
[ ] add reference union operator (~)
[?] stack based dynamic type interpreter
[ ] add regex functions
[ ] add unified regex support for searching etc.
[ ] minimize recompute: only recompute formulas whose antecedents change
[ ] support unicode versions of case conversions
Parser:
[ ] set NULL arguments for omitted arguments
[ ] define precise semantics for words in lexer (ie: `3rdrow`)
[?] compile to bytecode
[ ] use hash table to match function names
[ ] add VF_FULL_ROW and VF_FULL_COL
[ ] parse num:num and col:col as ranges
[ ] preserve spaces and parentheses from expression source using a pattern
[ ] use expression patterns to preserve syntax errors and unknown functions
[ ] remove yacc based parser
[ ] fix replicated cell alignment as alignment type and use whole parts
[ ] add format info in scvalue_t
Database:
[ ] fix note references on 'dr/pr'
[ ] keep range names in formulae and other range definitions
[ ] fix format numbering, col, row, cell format precedence
[ ] support strings up to 32KB long
[ ] start column and row numbers at 1
[ ] set maximum rows and cols > 702 (pass a max letter count to atocol())
[ ] use sparse matrix for sheet_t cell data
[ ] use sparse matrix for subsheet_t cell data
[ ] implement virtual space: jagged 2D matrix
[ ] add sheet number in cell references
[/] move more global data to sheet structure
[+] group sheet data in sheet_t structures
[ ] make delbufs sheet_t instances
[?] hash string_t in a dictionary
[ ] change representation for ranges: abs/rel coords ?
[ ] use an array of format strings, store an index in the cell struct
[/] more efficient cell structure
[/] generic formats
[ ] add undo / autobackup of things typed in. (use command log)
[ ] load xls files
[ ] load xlsx files
[ ] load csv files
[ ] save xls files
[ ] save xlsx files
[ ] save formula values in .sc files
Update:
[ ] truncate cell value display (both formula and string value)
[ ] rewrite update() function in screen.c from scratch in a more sane manner
[ ] update() should not have a side effect on currow/curcol
[ ] update() should not have a side effect on the database
[ ] don't redraw the whole screen all the time
[ ] differentiate error and status messages
[ ] overwrite intermediary messages in read/write file
Commands:
[ ] fix modflg, FullUpdate, modified, IS_CHANGED handling
[?] all LISTABBREV instead of ABBREV hack
[?] same for DEFINE with one or no arguments
[ ] validate and clip all ranges in commands
[ ] ignore unknown commands (keep them in a list?)
[?] pass count to duprow() and dupcol()
[ ] hide range
[ ] block moving into range
UI:
[ ] fix curses cursor repaint (remove inch() and addch())
[ ] add Cocoa user interface
[ ] add X11 user interface
[ ] add Windows user interface
[ ] pattern directed input in vi.c
[ ] add emacs keybinding stuff
[ ] add macro language
[ ] add command, function and range name completions
[ ] use command templates for 1-2-3 menu driven commands and vi interaction
[/] add 1-2-3 menus and connect them
[ ] convert help to markdown
[ ] built-in hyperlinked help system
[ ] incremental search
[ ] keyboard macros
[ ] multi-cell parallel edition
[ ] add form entry mode
[ ] an option to go into a ^R like <mode>
++data entry fields (highlight entry cells)....
++only allow entry in these cells....
Non-interactive:
[ ] add a command line option (possibly -g) to use sc as a sort of grep for
formatted or unformatted data in a file or list of files which will
output the whole row in which a given number or string is found,
formatted as with the write command.
Build:
[ ] add Windows target
[ ] test more targets
# DONE
[X] pass cell locations and ranges as sets of coordinates instead of allocated cell pointers in gram.y
[X] use rangeref_t and HAS_NOTE flag for notes
[X] remove currow/curcol side effects in yankrows() and yankcols()
[X] remove cellassign side effect
[X] use sc_string_t: shared allocated strings with a reference count,
[X] use pstrcpy and pstrcat, truncating and returning new length
[X] make histfile a string_t
[N] change scxrealloc to update the pointer in place?
[X] track memory allocation, check for full release upon exit
[X] simplify colsinrange/rowsinrange stuff
[N] make curfile a string_t
[X] fix operator precedence issue in `<=`, `>=`, `!=` and `<>`
[X] add third argument for @ext default/last answer
[X] handle dynamic types
[X] STOP THIS NUMERIC/STRING confusing bullshit!
[X] cell value must be either a number or a string, with an optional expression
[X] special case some sc_string_t like the empty string?
[X] simplify copye()
[X] factorize xxx, xxxA, xxxIF aggregate functions
[X] remove obsolete APIs for @hlookup, @vlookup, @lookup, @index, @stindex, @col
[X] merge rnode and term
[X] simplify grammar rules
[X] fix postfix percent operator
[X] factorize xxxIFS aggregate functions
[X] remove | and & operators, use & for string concatenation
[X] group functions by theme
[X] add ':' range constructor from cell references
[X] change OP_TYPE_NODES nodes to array of arguments
[X] use left/right for last pair of arguments in expression lists
[X] generalize aggregate functions for multiple arguments
[X] introduce new functions for conditional aggregation
[X] fix error propagation scheme
[X] fix error values
[?] change the expression evaluator: use a stack of dynamically typed values
[X] clean OP_ERR mess
[X] rename string functions as string_xxx
[X] implement int arguments with constraints
[X] implement code string functions as string_xxx and call from eval_xxx
[X] add reference intersection operator (!)
[X] only support simple string expressions for xxxIF functions
[X] accept TRUE and FALSE as tokens without ()
[X] accept error names as tokens
[X] add database functions
[X] fix seg fault when running `./sc tutorial.sc > t`
[X] move curses support to specific file and use API layer
[X] make sure ISVALID should <not> be used in place of checkbounds in interp.c
[X] merge edits() and editv()
[X] compile unknown functions and names as special opcodes
[X] move tbl to sheet context structure
[X] make delbufs point to sheet_t instances, handle duplicates
[X] support byte/char offsets in string functions
[X] merge fill_range loops
[X] make cell notes separate structures
[X] use ent* instead of ent_ptr in nrange structures
[X] use range references instead of ent pointers in cranges
[X] use range references instead of ent pointers in nranges
[X] use range references instead of ent pointers in franges
[X] improve r_name() and v_name() APIs, use v_name() instead of coltoa()
[X] use rangeref_t for find_range_coords()
[X] change representation for ranges
[X] fix locked cell behavior: no effect unless sheet protection is on
[X] use range references instead of ent_ptr in formulas
[X] remove cell pointers in subsheets
[X] abbrev bug: GOTO A1 -> invalid argument: this