X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=TODO;h=7daa95514f06039c7df881735caa679633ed64ca;hb=9088acf723535f4bcf2041ea942c8e0fd9226004;hp=733c1ffd6a73bd9e22a25fd84bd822b1727527e7;hpb=0d1109b28ecf554b7656e0018c0c9fbeec8258a8;p=lilypond.git diff --git a/TODO b/TODO index 733c1ffd6a..7daa95514f 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,72 +8,135 @@ Most of the items are marked in the code as well, with full explanation. grep for TODO and ugh/ugr/urg -BUGS: + * decimal point in \paper {} - + - > \notes{ a \< b \cr } + > 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. > - > work but - > - > \notes{ a \< b \! } + > - markBreakPriority is not supported. > - > give a parse error? + > - 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: petites preludes (rediculous dims) + + * fix extender + + * fix fingering 'a-5': font direction broken *again* + + * fix braces + + * multibar rests: SkipBars=0 + + * ly2dvi barfs on linewidth = -1. + + * fix midi output. + + * c4 \! \> c4 + + * tremolo stuff + * gallina barlines. + + * fix height of / collisions with lyrics (chords), + see input/test/vertical-text.ly + + * repeat/volta: + - one volta spanner per score + - repeat bars span staffs + - placement alternative number + + * 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. + + * \notes{ a \< b \cr } vs \notes{ a \< b \! } * if possible, it might be nice for a warning to appear if someone does - > \translator with no name and without assigning it to an -identifier. possible, it might be nice for a warning to appear if -someone does - > \translator with no name and without assigning it to an -identifier. + \translator with no name and without assigning it to an + identifier. * space after bars? - * [/3 c8 c16 c c c]/1 - - * fix singleStaffBracket - - * repeat bars: need distance after ":|" and before "|:" + * 'hinterfleisch' before bar (e.g. wtk1-fugue2)? - - The time signature warnings still remain, will be fixed later. + * \type Voice \times 2/3 { [c8 c16 c16 c16 c16] } - * fix \n after proccing + * fix singleStaffBracket - Summary of minor spelling irregularities: -> capitalization/use of underscores in property names -> \lyric vs \notes \lyric vs \type Lyrics (\lyric should have an -s) + * repeat bars: need distance after ":|" and before "|:" - * fix Score.skipBars + Summary of minor spelling irregularities: + - capitalization/use of underscores in property names - * repeat bars: need distance after ":|" and before "|:" + * fix SkipBars -> skipBars * \shape 1st dim skipped? * fix marks/barnumbers/marginal notes -**** - - > lbheel = \script { "bheel" 0 0 -1 0 0 } -> rbheel = \script { "bheel" 0 0 1 0 0 } -> lbtoe = \script { "btoe" 0 0 -1 0 0 } -> rbtoe = \script { "btoe" 0 0 1 0 0 } -> lfheel = \script { "fheel" 0 0 -1 0 0 } -> rfheel = \script { "fheel" 0 0 1 0 0 } -> lftoe = \script { "ftoe" 0 0 -1 0 0 } -> rftoe = \script { "ftoe" 0 0 1 0 0 } -> -> and also -> -> portato= \script { "portato" 0 -1 0 1 0 } + * broken scripts: + lbheel = \script { "bheel" 0 0 -1 0 0 } + rbheel = \script { "bheel" 0 0 1 0 0 } + lbtoe = \script { "btoe" 0 0 -1 0 0 } + rbtoe = \script { "btoe" 0 0 1 0 0 } + lfheel = \script { "fheel" 0 0 -1 0 0 } + rfheel = \script { "fheel" 0 0 1 0 0 } + lftoe = \script { "ftoe" 0 0 -1 0 0 } + rftoe = \script { "ftoe" 0 0 1 0 0 } + + and also + + portato= \script { "portato" 0 -1 0 1 0 } - * MIDI spelling. +STUFF + * uniformise recent feta contributions. - * foo = 1 + * check out legal/(c) matters for scores. - \score{ - \notes { a } - \paper{ foo = \translator{ \StaffContext}; } - } + * check out GCC signatures? * Align_element::padding ? @@ -83,10 +146,6 @@ identifier. * typo checks on property names? - * egcs-1.1 support - - * make engraver hacking robust. - * use streambufs and iostream to provide IO handling for TeX stream, mudela stream, data-file. @@ -96,23 +155,9 @@ identifier. * zip target for binary windows dist (JBR) - * text continuationss - - * revise documentation - - * abbrev -> tremolo - * junking \skip req in lyrics * Language: - - general plet mechanism. - - \plet 2/3 { c8 c8 c8 } - - ie. - - Music: PLET int '/' int Music - - \type -> \context ? - \translator -> ? - fix \partial @@ -124,24 +169,10 @@ identifier. - junk _ for lyrics. - abstract grammar. - * install TeX stuff into tex/generic directory. - - * /etc/profile.d support for RPM. - * percussion note heads * mi2mu empty staffs. - * include MIDI list - - * make GNU style webpages. - - * There seems to be an install error in lilypond-1.0.0. Most of the - files in the "init" directory don't get installed in the - /usr/local/share/lilypond directory. The files installed are of - the form feta*.ly. In particular init.ly doesn't get installed. - I installed the files by hand and then the system seems to work. - * midi_instrument -> midiInstrument * horizontal centering of dynamics @@ -152,23 +183,14 @@ identifier. * 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 BUGs + * fix weird behaviour when .AFMs/.SCMs not found. - * 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 @@ -179,14 +201,8 @@ identifier. 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 @@ -214,8 +230,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. @@ -227,8 +241,6 @@ 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: @@ -250,13 +262,11 @@ 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 - * libtoolize flowerlib - * shared lib * robustify Beam (in case of no stems, 32nd notes) @@ -268,12 +278,7 @@ ydirection and hshift preset * check for groff / troff/ nroff et * more intelligent file searching - - use kpsepath - - make LilyPond fully relocatable - - * use kpsepath to find all TeX dirs - - configure.in - - clean-fonts.sh + - make LilyPond RPM fully relocatable * nicen examples: - break-up heavily-nested score blocks @@ -282,6 +287,7 @@ ydirection and hshift preset * handle ^C for tmp/file creation. + * dots & rest collisions. * documentation @@ -305,23 +311,12 @@ ydirection and hshift preset * clefs (AG): The "8" should appear closer to the actual clef, touching it. - * scoping for properties? - - { c4 - \multi 2 < { \stemup .. } { \stemdown .. } > - c2 - } - - this modifies \stem for the c2 - * put errorlevel in Input class * junk nesting slurs * integrate midi-elts from mi2mu and lily? - * cautionary accidental - * score-bar-scripts FMR: Free memory read: * This is occurring while in: @@ -357,13 +352,9 @@ ydirection and hshift preset 3RD PARTY BUGS: - * redhat (v?) graphical install bomb-out? - - * egcs-1.03 ice: stem.cc:327; should localize bug (mine's still 10K) + * make GCC warn about ctor that leaves member vars uninitialised. - * gcc 2.8.1: see ice and RESIZE_ICE - - * xdvi: PS in magnifying glass. + * redhat (v?) graphical install bomb-out? * GNU diff 2.7: diff -rN does not see a new directory with empty file @@ -381,8 +372,6 @@ ydirection and hshift preset * GNU indent: handle C++ - * GNU make: move hardcoded builtin rules to runtime ? - * GNU patch - 'double-fix' mode: ignore identical fix, rather than suggest to revert patch direction when (more or less? exactly) the same @@ -411,7 +400,6 @@ PROJECTS - indentation - notenames? - fontlock: \melodic \melodic - * use properties for: - plet? @@ -433,9 +421,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. @@ -450,12 +437,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? @@ -471,7 +456,7 @@ PROJECTS * add to MIDI output: - tempo change - ornaments (and trills?) - - repeat + - repeat/volta - slurs - accents - dynamics @@ -516,11 +501,10 @@ PROJECTS - Move all Score_elems, into libmutype.a - SGML - * Documentation - Doc (C) stuff of sheet music - a better format? SGML? TeX? Info? - - a tutorial + - a better tutorial * more spanners (smallish) - Glissando @@ -533,10 +517,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 @@ -549,7 +529,6 @@ PROJECTS * Keys: - merge key{item} & localkey{item}? - - Major/Minor - spacing, national styles? * Support for TAB @@ -586,8 +565,6 @@ INPUTLANGUAGE * relative mode for pitch entering - * bracket: volta 1,2 - * configure pitch_byte * rest name configurable @@ -617,19 +594,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 @@ -654,11 +622,8 @@ SMALLISH PROJECTS * revise calcideal - * volta - IDEAS - * Output data structures of Mudela in XML/SGML. * create libmudela, or liblily_frontend @@ -666,7 +631,7 @@ IDEAS * move MIDI stuff (including Quantization) to a ANSI C libmidi library. * use an embedded language: Python, Scheme - for: + for: - Score_elems - Translators @@ -676,8 +641,6 @@ IDEAS * caching breakpoints - * breath marks - * used fixedpoint arithmetic for min. energy. * move towards incremental algorithms. @@ -690,7 +653,124 @@ IDEAS * Klavarskribo? - * lyrics in chords still fuck up. + * dynamic loading of engravers? + +SMOBS: - * Use hooks/dependency graphs for properties +**************************************** +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) + +***************************