]> git.donarmstrong.com Git - lilypond.git/blob - TODO
release: 1.0.15
[lilypond.git] / TODO
1 Features you cannot find in the doco as working, should be mentioned here.
2
3
4 This is an assorted collection of stuff that will be done, might be
5 done, or is an idea that I want to think about
6
7 Most of the items are marked in the code as well, with full explanation. 
8 grep for TODO and ugh/ugr/urg
9
10
11 BUGS:
12         
13
14         * formatting of input stuff. 
15
16         * use real RTTI iso access_Stuff.
17
18         * \notes{ a \< b \cr } vs \notes{ a \< b \! }
19
20         * if possible, it might be nice for a warning to appear if someone does
21         \translator with no name and without assigning it to an
22         identifier.  
23
24         * space after bars?
25
26         * [/3 c8 c16 c c c]/1
27   
28         * I see that  \prallprall and \prallmordent are identical. I think this is a 
29         mistake, that \prallprall should not have the vertical line.
30         This can be fixed by removing  the line
31         draw_mordent(twidth-0.5toverlap);
32         from the definition of \prallprall in mf/feta-slag.mf (see below)
33
34         * fix singleStaffBracket
35   
36         * repeat bars: need distance after ":|" and before "|:"
37
38         * The time signature warnings still remain, will be fixed later.
39
40         Summary of minor spelling irregularities:
41         -  capitalization/use of underscores in property names
42
43         * fix Score.skipBars
44
45         * repeat bars: need distance after ":|" and before "|:"
46
47         * \shape 1st dim skipped? 
48
49         * fix marks/barnumbers/marginal notes
50
51         * broken scripts:
52         lbheel = \script { "bheel" 0 0 -1  0 0 }
53         rbheel = \script { "bheel" 0 0 1 0 0 }
54         lbtoe = \script { "btoe" 0 0 -1 0 0 }
55         rbtoe = \script { "btoe" 0 0 1 0 0 }
56         lfheel = \script { "fheel" 0 0 -1  0 0 }
57         rfheel = \script { "fheel" 0 0 1 0 0 }
58         lftoe = \script { "ftoe" 0 0 -1 0 0 }
59         rftoe = \script { "ftoe" 0 0 1 0 0 }
60         
61         and also
62         
63         portato= \script { "portato" 0 -1 0 1 0 }
64
65         * MIDI spelling.
66
67         * Align_element::padding  ?
68
69         * uniformise property names.
70
71         * ydirection <-> yDirection
72
73         * typo checks on property names?
74
75         * make engraver hacking robust.
76
77         * use streambufs and iostream
78         to provide IO handling for TeX stream, mudela stream, data-file.
79
80         * seriously buffer TeX output (do profile of writing .5 mb TeX file.)
81
82         * strip EXEs before installing
83
84         * zip target for binary windows dist (JBR)
85
86         * text continuations
87
88         * revise documentation
89
90         * abbrev -> tremolo
91
92         * junking \skip req in lyrics
93
94         * Language:
95         - \type -> \context ?
96         - \translator -> ?
97         - fix \partial 
98         - \bla {} vs \bla ; 
99         - mix engraver hacking with music ?
100         - \once\property  KEY = VAL
101         - \addtranslator, \removetranslator
102         - junk ^ and _ for scripts
103         - junk _ for lyrics.
104         - abstract grammar.
105
106         * install TeX stuff into tex/generic directory.
107
108         * /etc/profile.d support for RPM.
109
110         * percussion note heads
111
112         * mi2mu empty staffs.
113
114         * include MIDI list 
115
116         * make GNU style webpages.
117
118         * There seems to be an install error in lilypond-1.0.0.  Most of the
119         files in the "init" directory don't get installed in the
120         /usr/local/share/lilypond directory.  The files installed are of
121         the form feta*.ly.  In particular init.ly doesn't get installed.
122         I installed the files by hand and then the system seems to work.
123
124         * midi_instrument -> midiInstrument
125
126         * horizontal centering of dynamics 
127
128         * \font\fontA=feta20.afm (.afm?)
129
130         * gzip RH manpage
131
132         * stable make/config stuff
133
134         * stemup/stemdown; see test/updown.fly
135           - check examples; add \type Staff hither and thether
136
137         * $DEPENDENCIES_OUTPUT support
138
139         * use a fake-yodl.sh to mimick yodl when yodl is not installed
140
141         * fix BUGs
142
143         * fix weird behaviour when .AFMs not found.
144
145         * Xdvi zooming ?!
146                 gs: Error: /undefined in draw_beam
147                 gs: Operand stack:
148
149         * run texhash after installing .tex
150
151         * fix vertical alignment and stafflines
152
153         * GrandStaff needs more work -- I want a single word
154         `harpsichord' to the left of the grandstaff, not one on each
155         stave.  (Organ staff -- with separate pedal -- but common
156         properties may be something to think about.  Of course for
157         organ you want to be able to give stop indications on the way
158         through, so the \property Voice.Instrument would be a stop,
159         and \property GrandStaff.instrument would be PipeOrgan...)
160
161         * make Tie_req a "command" { <c g> ~ <c g> }
162
163         * bib ep1988
164
165         * revise the Score_priority_align_engraver concept.  It sucks. 
166
167         * ly2xdvi, ly2ps
168
169         * make new VoiceOne, VoiceTwo, VoiceThree contexts with
170 ydirection and hshift preset
171
172         * *.yo: fix pod manpage layout legacy
173
174         * text-items clash with stems/beams
175
176         * --include, -I option for ly2dvi (pass on to lily)
177
178         * fix placement of beam-less abbrev
179
180         * \meter 3/4;
181         <{\voiceone cis4. cis8 cis4 | cis4 cis cis | r1 }
182          {\voicetwo cis,4 r r | r2. | r1 }> |
183         }
184
185         * try to use template<Type> iso MACRO(Type)
186
187         - NEWS: ... Musical_pitch (analogous to Duration and Rhythmic_req)
188           think about, analogous to pitch: 
189            * { a4 a16 } c <-- duration of c?
190            * <a4 b8> c <-- duration of c?
191
192         * \tempo 4. = 90;
193
194         * fix audio-items (don't use (input) requests, but copy data)
195
196         * junk My_lily_parser::abbrev_beam_type_i_ 
197
198         * make sure all ex's have a mudela-version
199
200         * do rest-collisions for Multi_measure_rests as well.
201
202         * split error/warning in error/warning/non_fatal_error
203
204         * add a Duration_convert member to Duration_iter to set parameters.
205         Junk global duration settings. 
206  
207         * deps for ly2dvi
208
209         * clean up abbrev/plet/beam/abbrevbeam/duration mess in parser.
210
211         * minimum length second part broken tie
212  
213         * en-,discouraged linebreaking: 
214           - handle DISALLOW < penalty > FORCE
215           - discourage breaking of slurs
216
217         * multibar rest
218           - symbol(s)
219
220         * fix variable define/lookup parser global<->paper
221
222         * fix title/instrument placements; see input/test/title.ly
223
224         * <\voiceone c4. \voicetwo c4>
225
226         * add full cello suites to web site (kom op, Maarten!)
227
228         * Rethink Time_description
229           * \cadenza , \meter, \grouping should all be \properties
230
231         * rename
232           - plet -> tuplet
233           - measure -> bar
234           - abbreviation-beam -> (measured/unmeasured) tremolo
235           - partial -> anacrouse
236
237         * libtoolize flowerlib
238
239         * shared lib
240
241         * robustify Beam (in case of no stems, 32nd notes)
242
243         * decentralised spring factory
244
245         * move paper vars into engraver properties
246
247         * check for groff / troff/ nroff et
248
249         * more intelligent file searching
250         - use kpsepath
251         - make LilyPond fully relocatable
252
253         * use kpsepath to find all TeX dirs
254         - configure.in 
255         - clean-fonts.sh
256
257         * nicen examples:
258         - break-up heavily-nested score blocks
259
260         * disable spaces in TeX stuff
261         
262         * handle ^C for tmp/file creation.
263
264         * dots & rest collisions.
265
266         * documentation
267         - introduction?
268         - info?
269         - LaTeX?
270         - more manpages?
271
272         * versioning for Feta
273
274         * the warning about the negative slur/tie length appears twice
275         which is irritating.
276
277         * The `3' in the meter key is a one or two pixels too thin (at 600dpi)
278         in the middle:
279
280         * the bracket is ugly (wings are too parabolic, should be more circular)
281
282         * better hshift (dots, distance, head dependent)
283
284         * clefs (AG): The "8" should appear closer to the actual clef,
285           touching it.
286
287         * scoping for properties?
288
289         {       c4
290                 \multi 2  < { \stemup .. } { \stemdown .. } >
291                 c2 
292         }
293
294         this modifies \stem for the c2
295
296         * put errorlevel in Input class
297
298         * junk nesting slurs
299
300         * integrate midi-elts from mi2mu and lily?
301
302         * cautionary accidental
303
304         * score-bar-scripts
305         FMR: Free memory read:
306           * This is occurring while in:
307                 Bar_column::do_substitute_dependency(Score_element*,Score_element*) [bar
308         -column.cc:29]
309                 Score_element::unlink() [score-elem.cc:383]
310                 Paper_score::set_breaking(const Array<Column_x_positions>&) [p-score.cc:
311         150]
312                 Paper_score::calc_breaking() [p-score.cc:189]
313                 Paper_score::process() [p-score.cc:203]
314                 Score::run_translator(Music_output_def*) [score.cc:117]
315           * Reading 4 bytes from 0x65d3a0 in the heap.
316           * Address 0x65d3a0 is 160 bytes into a freed  block at 0x65d300 of 208 bytes.
317           * This block was allocated from:
318                 malloc         [rtlib.o]
319                 __builtin_new  [libgcc.a]
320                 Span_score_bar::clone()const [span-score-bar.hh:20]
321                 Item::copy_breakable_items() [item.cc:69]
322                 Item::do_breakable_col_processing() [item.cc:89]
323                 Score_element::calcalute_dependencies(int,int,void(Score_element::*)()*)
324          [score-elem.cc:171]
325           * There have been 22 frees since this block was freed from:
326                 free           [rtlib.o]
327                 __builtin_delete [libgcc.a]
328                 Span_score_bar::~Span_score_bar() [span-score-bar.hh:18]
329                 Paper_score::set_breaking(const Array<Column_x_positions>&) [p-score.cc:
330         156]
331                 Paper_score::calc_breaking() [p-score.cc:189]
332                 Paper_score::process() [p-score.cc:203]
333         Postprocessing elements... 
334         TeX output to score-bar-scripts.tex...
335
336
337 3RD PARTY BUGS:
338
339         * redhat (v?) graphical install bomb-out?
340
341         * egcs-1.03 ice: stem.cc:327; should localize bug (mine's still 10K)
342
343         * gcc 2.8.1: see ice and RESIZE_ICE
344
345         * xdvi: PS in magnifying glass.
346
347         * GNU diff 2.7: diff -rN does not see a new directory with empty file
348
349         * GNU patch 2.1: <must find simple example> if patch chokes on a
350           hunk, or on allegedly unsorted hunks in a diff, it may stop 
351           without a trace of failure (create .rej file, print error or 
352           dump core) and just ignore any further diffs.
353
354         * glibc 2.0:
355
356           f = fopen ("/dev/null", "r")
357           assert (feof (f))
358
359 3RD PARTY PROJECTS:
360
361         * GNU indent: handle C++
362
363         * GNU make: move hardcoded builtin rules to runtime ?
364
365         * GNU patch 
366           - 'double-fix' mode: ignore identical fix, rather than suggest 
367             to revert patch direction when (more or less? exactly) the same 
368             thing is fixed
369
370 PROJECTS
371
372         * Scripts:
373         - fix position of bar number
374         - stack scripts in chords:
375           % fingering:        footing:
376             < a-4 c-2 g-1 >   < c-\ltoe e-\lheel >
377         - script-spacing
378         - slur parts as a script
379         - stack parameterised scripts for fingering and footing:
380
381         * convert-mudela:
382         - automatically add  a \version if not present.
383         - better parsing
384         - make smarter
385         - convert-mudela -e empty.ly
386
387         * emacs mudela-mode
388         -  should handle block comments too.
389         -  handle lexer modes (\header, \melodic, \lyric) etc.
390         -  indentation
391         -  notenames?
392         -  fontlock: \melodic \melodic
393  
394
395         * use properties for:
396         - plet?
397         - Staff_sym size
398         - default tempo.
399         - font size
400         - bartypes (get rid of derived Span_bar_engravers)
401         - cadenza mode? 
402
403         * page handling:
404         - PS output
405         - optimal pagebreaking.
406
407         * Unicode support? -> man 7 unicode
408         - 16 bit Strings
409         - -u switch
410         - detect of 16/8 bit files
411         - examples to go with it.
412
413         * Spring_spacer:
414         - write a faster Spring_spacer (without matrices if possible)
415         - use straight LP to find minimal "fitting force"
416         - relate energybound to linelen unitspace fontsize etc.
417         - used fixed point fp
418
419         * \header
420         - output header info to MIDI too.
421
422         * a musical dictionary. See Documentation/vocabulary-*, other
423         languages:
424         - explanations
425         - italian
426         - german
427         - dutch
428         - swedish
429          .. ?
430
431         * chords
432         - guitar chords
433         - chord names
434         - basso continuo
435         - Syntax/parser
436         - MIDI output?
437         - typesetting
438
439         * Debug logs:
440         - derive lily_stream, Dstream, texstream from ostream?
441         - indentable stream as baseclass for TeX stream, lily stream, Dstream.
442         - use dstream feature in mi2mu
443         - integrate IO checking into stream class
444
445         * input converters
446         - NIFF?
447         - ABC? 
448         - SMDL?
449
450         * add to MIDI output:
451         - tempo change
452         - ornaments (and trills?)
453         - repeat
454         - slurs
455         - accents
456         - dynamics
457         - account for rhythmic position in measure
458         - etc.
459
460         * grace notes
461         - make separate class for Grace_*_engravers 
462         (which is at Voice_gravs level)
463         - make encapsulated spacing problems.
464
465         * accidentals per Voice_group
466
467         * Output class, handles : (smallish)
468         - help text /(c) notice?
469         - version line
470         - warning /errors/progress
471         - abort on error/warning; exit status
472         - quiet/ignore-version options
473         - logfile output
474
475         * piano staff
476
477         * elaborate Staff_side baseclass:
478         - scripts
479         - text
480         - slur start/end
481
482         * PS 
483         - speed up PS code.
484         - PS lines to .eps files
485         - write custom prolog
486
487
488         * Output an output format independent (ofi) typeset file; and 
489           make ofi2 TeX, MusiXTex, Display PostScript, PostScript,
490           Ascii... interpreters. (difficult)
491
492         - NIFF ?
493         - Common Music Notation
494         - PostScript output (esp. Beams, Slurs, etc)
495         - Move all Score_elems, into libmutype.a
496         - SGML
497
498  
499         * Documentation
500         - Doc (C) stuff of sheet music
501         - a better format?  SGML?  TeX?  Info?
502         - a tutorial
503
504         * more spanners (smallish)
505         - Glissando
506         - trill
507
508         * Rewrite Stem, Beam and Rhythmic_grouping (hairy)
509         - [c8. c32 c32]
510         - doc on Rhythmic_grouping
511         - general shaving on Beam and Stem
512         - use plet grouping
513         - separate visual from rhythmic info even more
514         - beams over bars
515         - endbeam req should be *after* the duration, so you can do
516         < { [c4]    }
517           { c8. c16 } >
518
519
520         * lines:
521         - Ledger lines, should be separate item: Ledger_lines, Ledger_lines
522         - set different line sizes / thicknesses
523         - beam stem showthrough, inter beam sizes (french vs german style)
524
525         * Collisions
526         - left/right note balls should be handled by Collision:
527         < \multi 2; { \stem 1; <b c> } { <f as b> } >
528
529         * Keys:
530         - merge key{item} & localkey{item}?
531         - Major/Minor
532         - spacing, national styles?
533
534         * Support for TAB
535         - redo Notehead to allow digits as heads
536         - add a \tablature {} lexer mode for easy entering
537
538         * should adjust stemlength for flag number.
539
540         * breaking:
541         - caching breakpoints
542         - saving them
543         - specify number of lines
544
545         * markers
546
547 INPUTLANGUAGE
548
549         * c4 4 4 4 for c4 c4 c4 c4?
550
551         * neatly (and readably) expressing concurrent
552         voices
553
554         * <c f a>4 ?
555
556         * Viola mode?
557
558                 @c c g e g 
559         for
560                 c g es g, 
561
562                 @A c g e g
563         for
564                 cis gis e gis
565
566         * relative mode for pitch entering
567
568         * bracket: volta 1,2
569
570         * configure pitch_byte
571
572         * rest name configurable
573
574 SMALLISH PROJECTS
575
576         * limit memory usage; the full coriolan takes up too much resources.
577
578         * fix confusing naming in Engraver vs Engraver_group_engraver (context)
579
580         * progress when creating MIDI elts.
581
582         * A range for context errors (eg. mark both { and }. )
583
584         * lyric in staff  (sharpsharp in staff, text below)
585
586         * half sharps/flats
587
588         * write Dynamic_line (to group dynamics horizontally)
589
590         * use Real for all y positions.
591         - use translate_axis( .. ,Y_AXIS)  iso separate variables.
592
593         * half-sharps, half-flats
594
595         * adaptive accidental spacing.
596
597         * handle EOF graciously in error messages.
598
599         * centered whole rest
600
601         * declare notenametab?
602
603         * midi esp.: use I32 iso int where 32 bits are needed (or assumed...)
604
605         * Flower types:
606         - A decent scalar type
607         - String hash
608         - Pointer hash
609
610         * binsearch/hash for identifiers
611
612         * stafftypes: voice names/ instrument names.
613
614         * lily \tempo
615
616         * C meter iso 4/4, idem for alla breve, etc.
617
618         * textspanner: center position
619
620         *   % toe to bheel   four to five
621             %   ^_u            4_5  
622             %     -                           
623             %  --|x--         --|x--
624             %  --|---         --|---
625             %  --|---         --|---
626           (where "to" is a tiny bow)
627
628         * auxilliary file for caching info.
629
630         * Text_crescendo
631
632         * clean solution for staffsize in items.
633
634         * revise calcideal
635
636         * volta
637
638 IDEAS
639
640
641         * Output data structures of Mudela in XML/SGML.
642
643         * create libmudela, or liblily_frontend
644
645         * move MIDI stuff (including Quantization) to a ANSI C libmidi library.
646
647         * use an embedded language: Python, Scheme
648         for: 
649                 - Score_elems
650                 - Translators
651
652         * y -dims in internote? Staff-space? X-dimensions?
653
654         * Spacing_request for manually adjusting spacing
655
656         * caching breakpoints
657
658         * breath marks 
659
660         * used fixedpoint arithmetic for min. energy.
661
662         * move towards incremental algorithms.
663
664         * far fetched language ideas
665         - design meta-language like TeX and Metafont
666         - programming/macros input
667
668         * versioning stuff (cvt mudela, mudela, etc.)
669
670         * Klavarskribo?
671
672         * lyrics in chords still fuck up.
673
674         * Use hooks/dependency graphs for properties
675