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