X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=TODO;h=0b99e57ba41c1773229d9e21279698398fa1fe1b;hb=13aa1b79cb9a8a03446fca013317a8aab325bcef;hp=e22c3f60e80d26e2dcf43a80a9b9b7a086bf6663;hpb=9efbad2d9487a05b04423e7e9f062968e8f8eaf4;p=lilypond.git diff --git a/TODO b/TODO index e22c3f60e8..0b99e57ba4 100644 --- a/TODO +++ b/TODO @@ -1,5 +1,5 @@ -Features you cannot find in the doco as working, should be mentioned here. - +Features you cannot find in the doco as working, should be mentioned +here. This is an assorted collection of stuff that will be done, might be done, or is an idea that I want to think about @@ -8,9 +8,118 @@ Most of the items are marked in the code as well, with full explanation. grep for TODO and ugh/ugr/urg +* check out PS points vs. LilyPond points (PS = 1/72 inch, LilyPond=1/72.27) + +* Instrument names in the margin. Example: + input/test/hara-kiri.ly. The text should of course + be to the left of the staff lines. + +* There is a bug in pl 22. Try /input/test/slurs.ly and + you will find '#.#' instead of real numbers at some + places in the empedded ps code. + +* (Annoying but not a bug:) Slurs that are broken at line + breaks often extend too far into the margin, both to the + left and to the right. How do you adjust it? + +* SkipBars=0 doesn't work. My score contains lots of + multibar rests, which should be written out bar by bar + in the score (where the 'harakiri' mechanism doesn't + remove full staff lines that only contain rests). + In the parts, the multibar rests should be split + by the rehearsal marks I've included every here and + there. + In short, I want the multibar rests to work as they + used to do before pl 20 but preferably with a nice + centered rest symbol. + * junk backlinks? + + * junk text{sharp,flat,etc} + + * fix convert-mudela manpage + + * automatic staff selection. + + * decimal point in \paper {} + + > I have changed Mark_engraver to use the G_... classes. + > My implementation has the following shortcomings at the + > moment. + > + > - markScriptPadding is not supported, since G_staff_side_item does not + > support padding. + > + > - markBreakPriority is not supported. + > + > - Mostly, you want the marks aligned with the bar lines. I don't + > really understand how to implement that feature. + > + > - You get lots of warnings about missing 'number' and 'Large' + + + *{ \voiceone [g''8 fis'' e''] d''4 |} + and=20 + { \voicetwo d'4 d'2.*2/3 } spacing + + * tied notes for MIDI + + * sharp /flat on trills (in MIDI ??) + + * scm-ify \property values. +- The direction of textual scripts ('^' or '_') is ignored. + * move class Lookup {} into scm + + * read tfms too. + + * update mi2mu for lilypond 1.1 + BUGS: + * collisions/voices \voiceone \voicetwo are broken; see + input/praeludium-fuga-E.ly + mutopia/J.S.Bach/wtk1-fugue2.ly + + * fix: standchen. + + * fix: cello suites + + * fix: text on rests: rediculous dims + + * fix extender + + * fix fingering 'a-5': font direction broken *again* + + * fix braces + + * ly2dvi barfs on linewidth = -1. + + * fix midi output: + - default duration? duration must be not entered + explicitely on first note. + + * turn slope-damping on/off + + * c4 \! \> c4 + + * tremolo stuff + + * gallina barlines. + + * fix height of / collisions with lyrics (chords), + see input/test/vertical-text.ly; input/test/repeat.ly + + * repeat/volta: + - one volta spanner per score + + * latex bla.tex broken (titles / \lilyfooter stuff?) + + * check/set minimum slur/tie length + + * msgfmt -o check? + + * \breathmark TeX macro + + * catch GUILE errors? - * add new glyphs to font.ly * formatting of input stuff. @@ -23,20 +132,18 @@ BUGS: * space after bars? - * [/3 c8 c16 c c c]/1 - + * 'hinterfleisch' before bar (e.g. wtk1-fugue2)? + + * \type Voice \times 2/3 { [c8 c16 c16 c16 c16] } + * fix singleStaffBracket - - * repeat bars: need distance after ":|" and before "|:" - * The time signature warnings still remain, will be fixed later. + * repeat bars: need distance after ":|" and before "|:" Summary of minor spelling irregularities: - capitalization/use of underscores in property names - * fix Score.skipBars - - * repeat bars: need distance after ":|" and before "|:" + * fix SkipBars -> skipBars * \shape 1st dim skipped? @@ -56,6 +163,13 @@ BUGS: portato= \script { "portato" 0 -1 0 1 0 } +STUFF + * uniformise recent feta contributions. + + * check out legal/(c) matters for scores. + + * check out GCC signatures? + * Align_element::padding ? * uniformise property names. @@ -64,8 +178,6 @@ BUGS: * typo checks on property names? - * make engraver hacking robust. - * use streambufs and iostream to provide IO handling for TeX stream, mudela stream, data-file. @@ -75,12 +187,6 @@ BUGS: * zip target for binary windows dist (JBR) - * text continuations - - * revise documentation - - * abbrev -> tremolo - * junking \skip req in lyrics * Language: @@ -95,16 +201,10 @@ BUGS: - junk _ for lyrics. - abstract grammar. - * install TeX stuff into tex/generic directory. - * percussion note heads * mi2mu empty staffs. - * include MIDI list - - * make GNU style webpages. - * midi_instrument -> midiInstrument * horizontal centering of dynamics @@ -115,23 +215,14 @@ BUGS: * stable make/config stuff - * stemup/stemdown; see test/updown.fly - - check examples; add \type Staff hither and thether - * $DEPENDENCIES_OUTPUT support - * use a fake-yodl.sh to mimick yodl when yodl is not installed + * fix weird behaviour when .AFMs/.SCMs not found. - * fix BUGs - - * fix weird behaviour when .AFMs not found. - - * Xdvi zooming ?! + * Xdvi zooming ?! Try to understand GS garbage collection. gs: Error: /undefined in draw_beam gs: Operand stack: - * run texhash after installing .tex - * fix vertical alignment and stafflines * GrandStaff needs more work -- I want a single word @@ -142,14 +233,8 @@ BUGS: through, so the \property Voice.Instrument would be a stop, and \property GrandStaff.instrument would be PipeOrgan...) - * make Tie_req a "command" { ~ } - - * bib ep1988 - * revise the Score_priority_align_engraver concept. It sucks. - * ly2xdvi, ly2ps - * make new VoiceOne, VoiceTwo, VoiceThree contexts with ydirection and hshift preset @@ -177,8 +262,6 @@ ydirection and hshift preset * fix audio-items (don't use (input) requests, but copy data) - * junk My_lily_parser::abbrev_beam_type_i_ - * make sure all ex's have a mudela-version * do rest-collisions for Multi_measure_rests as well. @@ -190,17 +273,12 @@ ydirection and hshift preset * deps for ly2dvi - * clean up abbrev/plet/beam/abbrevbeam/duration mess in parser. - * minimum length second part broken tie * en-,discouraged linebreaking: - handle DISALLOW < penalty > FORCE - discourage breaking of slurs - * multibar rest - - symbol(s) - * fix variable define/lookup parser global<->paper * fix title/instrument placements; see input/test/title.ly @@ -213,8 +291,8 @@ ydirection and hshift preset * \cadenza , \meter, \grouping should all be \properties * rename - - plet -> tuplet - measure -> bar + - abbrev -> tremolo - abbreviation-beam -> (measured/unmeasured) tremolo - partial -> anacrouse @@ -238,6 +316,7 @@ ydirection and hshift preset * handle ^C for tmp/file creation. + * dots & rest collisions. * documentation @@ -267,8 +346,6 @@ ydirection and hshift preset * integrate midi-elts from mi2mu and lily? - * cautionary accidental - * score-bar-scripts FMR: Free memory read: * This is occurring while in: @@ -304,6 +381,8 @@ ydirection and hshift preset 3RD PARTY BUGS: + * make GCC warn about ctor that leaves member vars uninitialised. + * redhat (v?) graphical install bomb-out? * GNU diff 2.7: diff -rN does not see a new directory with empty file @@ -350,7 +429,6 @@ PROJECTS - indentation - notenames? - fontlock: \melodic \melodic - * use properties for: - plet? @@ -372,9 +450,8 @@ PROJECTS * Spring_spacer: - write a faster Spring_spacer (without matrices if possible) - - use straight LP to find minimal "fitting force" - relate energybound to linelen unitspace fontsize etc. - - used fixed point fp + - used fixed point fp? * \header - output header info to MIDI too. @@ -389,12 +466,10 @@ PROJECTS .. ? * chords - - guitar chords - - chord names + - guitar chords (fret diagrams) + - other chord name styles (american(?) style) - basso continuo - - Syntax/parser - MIDI output? - - typesetting * Debug logs: - derive lily_stream, Dstream, texstream from ostream? @@ -410,7 +485,7 @@ PROJECTS * add to MIDI output: - tempo change - ornaments (and trills?) - - repeat + - repeat/volta - slurs - accents - dynamics @@ -458,7 +533,7 @@ PROJECTS * Documentation - Doc (C) stuff of sheet music - a better format? SGML? TeX? Info? - - a tutorial + - a better tutorial * more spanners (smallish) - Glissando @@ -471,10 +546,6 @@ PROJECTS - use plet grouping - separate visual from rhythmic info even more - beams over bars - - endbeam req should be *after* the duration, so you can do - < { [c4] } - { c8. c16 } > - * lines: - Ledger lines, should be separate item: Ledger_lines, Ledger_lines @@ -487,7 +558,6 @@ PROJECTS * Keys: - merge key{item} & localkey{item}? - - Major/Minor - spacing, national styles? * Support for TAB @@ -524,8 +594,6 @@ INPUTLANGUAGE * relative mode for pitch entering - * bracket: volta 1,2 - * configure pitch_byte * rest name configurable @@ -555,19 +623,10 @@ SMALLISH PROJECTS * handle EOF graciously in error messages. - * centered whole rest - * declare notenametab? * midi esp.: use I32 iso int where 32 bits are needed (or assumed...) - * Flower types: - - A decent scalar type - - String hash - - Pointer hash - - * binsearch/hash for identifiers - * stafftypes: voice names/ instrument names. * lily \tempo @@ -592,11 +651,8 @@ SMALLISH PROJECTS * revise calcideal - * volta - IDEAS - * Output data structures of Mudela in XML/SGML. * create libmudela, or liblily_frontend @@ -604,7 +660,7 @@ IDEAS * move MIDI stuff (including Quantization) to a ANSI C libmidi library. * use an embedded language: Python, Scheme - for: + for: - Score_elems - Translators @@ -614,8 +670,6 @@ IDEAS * caching breakpoints - * breath marks - * used fixedpoint arithmetic for min. energy. * move towards incremental algorithms. @@ -628,7 +682,124 @@ IDEAS * Klavarskribo? - * lyrics in chords still fuck up. - - * Use hooks/dependency graphs for properties - + * dynamic loading of engravers? + +SMOBS: + +**************************************** +Han-Wen Nienhuys writes: + +> mcmanus@IDT.NET writes: +> > > I want different C++ objects (with scheme embedded) to be linked by +> > > C++ pointers. I want to access these other objects from the Scheme +> > > code, and I want access to these pointers from C++. +> > +> > You can do this with a combination of smob's and primitive functions, +> > though it may not be be exactly what you wanted. You would have one +> > smob for each class in your application, and then you would write a +> > primitive function that would return the objects that are linked to a +> > base object. +> +> And the smob and the C++ class are interlinked? Like +> +> class Foo_class { +> Foo_smob *smob_ptr_; +> } +> +> struct Foo_smob { +> Foo_class *class_ptr_ +> } + +Usually you can get away without having this interlinked structure. +One piece of information you need when exporting objects to scheme is +the smob tag for your class. You might store this value (a long) into +a class static variable, or a file static variable. I'll use a class +static variable in this example. + +I typically use code that works like this (untested code ahead): + +class Foo_class { + static long *Foo_smob_tag; + SCM obj; // representation as a scheme object, description comes later +} + +// call this once on startup +void init_Foo_class { + static scm_smobfuns type_rec; + + type_rec.mark = foo_mark; + type_rec.free = foo_free; + type_rec.print = foo_display; + type_rec.equalp = 0; + Foo_class::Foo_smob_tag = new int(scm_new_smob(type_rec)); +} + +When you want to export an object to scheme, you put a pointer to the +object itself in the cdr of the cell, and the tag in the car of the +cell. The code looks like this: + +// Is this a Foo? +static int +foo_p(SCM obj) +{ + return(SCM_NIMP(obj) && SCM_CAR(obj) == Foo_class::Foo_smob_tag); +} + +// given a Scheme representation, return, a C++ representation +static Foo_class * +foo_unbox(SCM obj) +{ + return((Foo_class*)SCM_CDR(obj)); +} + +// the SCM representation of the object is stored inside itself +// this will become useful when destructor gets called +static SCM +foo_box(Foo_class *foo) +{ + SCM_DEFER_INTS; + SCM_NEWCELL(foo->obj); + SCM_SETCAR(foo->obj, Foo_class::Foo_smob_tag); + SCM_SETCDR(foo->obj, (SCM)foo); + SCM_ALLOW_INTS; + return foo->obj; +} + +> C++ determines life time, so what is the strategy? + +What happens now when the destructor gets called? Lets set the cdr to +NULL, and then check for that in all of the primitive functions that +use your smob. We'll call this notion 'live'; a scheme object is +'live' if the C++ representation still exists, it's dead if the C++ +object is gone. You can still have references to dead objects in +scheme code; it's just an error to use them. This idea is stolen from +Emacs's handling of buffers ('buffer-live-p' and friends). + +Add another function, foo_live_p: + +static int +foo_live_p(SCM obj) +{ + return(foo_p(obj) && SCM_CDR(obj) != NULL); +} + +In you destructor, you need to do: + +~Foo_class() +{ + SCM_CDR(this->obj, NULL); +} + +When writing new primitives, now just check foo_live_p(). + +I hope the above helps, + +-russ + + +-- +"Even if you are on the right track, you'll get run over +if you just sit there." + --Will Rogers (1879-1935) + +***************************