Grep for TODO and ugh/ugr/urg.
.* BUGS
-. * junk separate mudela versioning.
+. * indent = 0.0 with linewidth=-1.0
. * PostScript
. * header for PS enteredby = "bla <bla@bar.com>"
. * ps/lily.ps see comments.
-. * down tuplet spanner.
. * didot / big point.
-. * devise standard for functioning of Vertical_align_element.
. * midi key.
. * Repeats
. * input/bugs/rep.ly (moved from test)
. * kind of 'initial property' iso fold/volta(semi)/unfold strings
. * fix singleStaffBracket
. * declare performers in \midi
+. * input/test/stem-spacing.ly: 12/4 touches first note
+4 too high?
. * fix MIDI
. * \shape 1st dim skipped?
. * turn slope-damping on/off
-. * tremolo stuff
. * We need feta-din*.mf files for more sizes than 10.
-. * feta-accordeon has some 'strange turning paths' on 300dpi
. * fix dynamics decently, ie. use kerning & ligatures.
+. *
+BUGS:
+> +
+> + Causes segfault:
+> +
+> + \score{
+> + \notes{ \context Voice {
+> + \repeat fold 2 { a b c d } {}
+> + }
+> + }
+> + }
+> +
. * dots & rest collisions?
. * mudela-book.py
. * fix \mudelafile{} to have decent functionality
preMudelaExample[eps]{}, and change it in document body sometimes.
. * use less RE's
. * slurs colllide with lyrics.
-. * Is there any reasonable way to do this: I would like to have one file
-that can generate the same tune in two different modes without having
-to go through and rewrite all the music in the other mode.
-
-Long lyrics don't get a space at the end. They just run right up
-against the next lyric. (I don't think this used to be the case.)
-
-Lyrics and scripts collide.
-
-\key b; \time 4/4; looks bad. The clef and time signature are too close.
-
-restStyle=mensural doesn't seem to work (lots of characters not found
-for rests.fly)
-. * Phrasing: Indicating the textual underlay of a piece, or
-otherwise dividing a piece into phrases.
-
-There are distinct ways of specifying the first two (although at
-present, they're not properly distinguished) but no distinct way to
-specify the third. Should there be?
-. * rest collision minimum dist.
+. * junk _ in lyric mode for " "
+. * Lyrics and scripts collide.
. * a note with a circle after it, meaning:
note + circle = note + 1/4 of its length
possible with lily?
. * tuplets that are written as "number : note", for example
"3 : [image of a half note here]". possible?
-. * repeat engraver, gallina.ly
. * Matanya's tips:
-. * spacing for prefatory matter
+. * don't shorten stems/staffs closer to each other.
. * accidentals closer to note head
. * to space the staffs/staffgroups contained in the score.
-
-In the orchestscore.ly file, I tried:
-\paper{
- \translator {
- \OrchestralScoreContext
- minVerticalAlign = 3.0*\staffheight;
- }
- \translator {
- \StaffGroupContext
- minVerticalAlign = 3.0*\staffheight;
- }
- \translator {
- \StaffContext
- minVerticalAlign = 3.0*\staffheight;
- }
-}
. * heavier beams?
.* Cleanups needed
+. * \$ and $ identifier syntax.
+. * Y dimension units: staffspace vs. Point
. * Beam
. * Stem
. * Slur
. * Rhythmic_grouping
. * Duration
-. * Collision
-. * Rest_collision
-. * clef grav prop's
+. * clef engraver
. * parser
.* TODO before 1.2
. * Morally pure LilyPond.
-. * Remove mutopia ramblings.
. * Remove non-free software links.
. * Remove meta article LilyPond.
. * break priority setting from SCM.
> see the problem for August.
. * Abstraction for engravers:
. * make "in-between" engraver (Tie, Extender)
-. * make wide_spanner_engraver (line_group_spanne,r staff_symbol)
-. * remove Interval dim_ from Dimension_cache and rename the struct.
+. * make wide_spanner_engraver (line_group_spanner, staff_symbol)
. * do scaled fonts generally
-. * Spacing.
. * The Lilypond accidental symbols are available through the TeX macros,
\textflat, \textsharp and \textnatural defined in the init file
lilyponddefs.tex. All the symbols are defined in the files fetaXX.tex
are installed but they are generated in the mf/out/ directory during the
compilation.
. * make dependencies () a virtual function.
-. * one big ly2dvi input that includes *all* tests.
. * store req -> element, element -> element causes for warnings
. * include examples in RPM.
. * fix partial measures in meaningful way.
-. * add scripts to bars eg. |^"bla"
. * relative mode for mi2mu
. * uniformise recent feta contributions.
-. * use SCM and Molecules for {accordeon stuff, }
. * bigger and fatter 4/4 C
. * sort out directory stuff.
. * --prefix option?
. * do --safe for PS output?
. * convert-mudela --output
. * Staff_margin (with a partial measure.)
-. * fix pletvisibility properties:
-. * bracket on/off/no-bracket-when-beam
-. * num on/off/no-num-when-beam
-. * fix: standchen.
-. * junk text{sharp,flat,etc}
. * fix convert-mudela manpage
. * decimal point in \paper {}
. * { \voiceone <a'4.*2/3 d''4.*2/3 fis''4.*2/3> [g''8 fis'' e''] d''4 |}
. * scm-ify \property values.
. * move class Lookup {} into scm
. * msgfmt -o check?
-. * \breathmark TeX macro
. * add new glyphs to font.ly
. * formatting of input stuff.
. * \notes{ a \< b \cr } vs \notes{ a \< b \! }
-. * space after bars?
-. * 'hinterfleisch' before bar (e.g. wtk1-fugue2)?
-. * Summary of minor spelling irregularities:
-. * capitalization/use of underscores in property names
-. * fix SkipBars -> skipBars
. * broken scripts:
lbheel = \script { "bheel" 0 0 -1 0 0 }
rbheel = \script { "bheel" 0 0 1 0 0 }
.* STUFF
. * compulsory hshift
+. *
+My wish list for lyrics. I dream of a time when I will have enough time to
+become familiar enough with the source code to be able to implement some of
+these myself, but I don't know when that will be, so I thought I'd "publish"
+my suggestions in case someone else is in a position to give them some
+priority. Otherwise, perhaps they could go on the todo list?
+
+If any of these are already implemented, please let me what the syntax is to
+use them!
+
+1. Stanza numbering. Numbering at the beginning of a song with the number
+set to the left of the first note. It would also be nice (but not as
+important) to be able to have some form of automatic numbering at the
+beginning of each new line. This would make it easier to follow songs with a
+large number of stanzas.
+
+2. Hyphens between syllables. At the moment there appears to be no easy way
+to position a hyphen mid-way between the syllables it breaks.
+
+3. Notes centred above/below lyrics rather than left-aligned.
+
+4. It would be very nice to be able to build some kind of phrasing into the
+lyrics of hymns, etc, so that the first words of a phrase are left aligned
+with each other, the last words are right aligned, and the words in between
+are centred.
+
+5. In a song, with (say) four stanzas and a chorus, it would be nice to be
+able to vertically align the chorus midway between the staves.
+
+6. It would be nice to be able to put vertical brackets either side of a
+repeated section with different words for each repeat.
+
. * Give # lines in linebreaking.
. * arrows on slurs.
. * rewrite context defs using Scheme
. * use Fourier transformation for rhythmic quantisation.
. * horizontal centering of dynamics
. * $DEPENDENCIES_OUTPUT support
-. * Xdvi zooming ?! Try to understand GS garbage collection.
-gs: Error: /undefined in draw_beam
-gs: Operand stack:
. * fix vertical alignment and stafflines
. * declaring Performers
. * *.yo: fix pod manpage layout legacy
. * add mudela-book-doc source to webstie.
. * Rethink Time_description
\cadenza , \meter, \grouping should all be \properties
+. * fix singleStaffBracket
. * rename
. * measure -> bar
-. * abbrev -> tremolo
. * abbreviation-beam -> (measured/unmeasured) tremolo
. * partial -> anacrouse
. * robustify Beam (in case of no stems, 32nd notes)
small sizes.
.* 3RD PARTY BUGS
+. * UMR: Uninitialized memory read
+ This is occurring while in:
+ qst [qsort.c]
+ qsort [libc.so.1]
+ Keyword_table::Keyword_table(Keyword_ent*) [keyword.cc:28]
+ My_lily_lexer::My_lily_lexer() [my-lily-lexer.cc:78]
+ My_lily_parser::parse_file(String,String) [my-lily-parser.cc:54]
+ do_one_file(String,String) [scores.cc:124]
+ Reading 4 bytes from 0xefffeca8 on the stack.
+ Address 0xefffeca8 is 728 bytes below frame pointer in function
. * GNU diff 2.7: diff -rN does not see a new directory with empty file
+. * mf-to-table -> add space before ; in AFM output. (-> check AFM
+ spec. Is this a bug in afm2tfm?)
. * check out GCC signatures?
. * glibc 2.0:
f = fopen ("/dev/null", "r")
> Would it be hard to add support for proper dynamics in MIDI output? I
> would really like to have this feature...
-To answer this, I have to give a little background. Please say so if
-I am being obtuse.
-
-Both audio and notation elements are created decentrally, when
-LilyPond says "Interpreting music ... [8][16] etc." After all
-elements are created, they are processed again to calculate all
-parameters. After that is done, they are dumped onto the output (the
-MIDI stream or the TeX file).
-
-The audio and notation elements are created by objects called
-performer and engraver respectively. They work by taking a chunk of
-input (a so-called request), and using the request to create an audio
-or notation element.
-
-After some processing, the engraver sends the created elements to
-its enclosing notation/performance context.
-
-In the case of notation, engravers can also modify existing elements
-created by sibling engravers. Eg. the beam-engraver will modify stems
-when it creates a beam over a couple of stems. This is done in
-Engraver::do_acknowledge_element () and
-Engraver::do_process_acknowledged ().
-
-In the case of audio, there are no mechanisms to modify existing audio
-elements. After the audio elements are created, they are sent directly
-to the enclosing context (an instance of Performer_group_performer),
-through the method Performer::play ()
-
Concretely spoken, for dynamics you have to write a performer
(Dynamics_performer), that will take the input requests. If I
understand correctly, every MIDI note played must have its dynamic
1 supporting dynamic settings in Audio_note
- 2 mimicking the broadcast/acknowledge mechanism of the Engravers in
- the Performers
-
- 3 using that mechanism to write a Dynamics_performer that will modify
+ 2 Write a Dynamics_performer that will modify
any notes it finds to set appropriate strengths.
-You could also kludge this by deriving from Performer_group_performer
-a performer that also sets dynamics within notes, but that is not the
-elegant way to do it.
-
I'd say that the work involved is not hard, but you have to be fluent
with C++ and need some insight into the working of Notation Contexts
and friends. I guess I could do it in a day or so, but if you are not
the MIDI output (I don't even have a soundcard). But I *do* want to help
you or other people with implementing this, so if you need help, don't
hesitate to ask.
-
. * account for rhythmic position in measure
. * etc.
. * specify number of lines
.* INPUTLANGUAGE
-. * \rhythms 4 16 16 16 16; c c c c c -> c4 c16 etc.
+. * \rhythms 4 16 16 16 16; c c c c c -> c4 c16 etc.
+. * convention for slurs vs. phrasing marks.
. * Language:
. * \translator -> ?
. * fix \partial
. * \bla {} vs \bla ;
. * mix engraver hacking with music ?
. * \once\property KEY = VAL
-. * \addtranslator, \removetranslator
-. * junk ^ and _ for scripts
-. * junk _ for lyrics.
+. * input property
. * abstract grammar.
. * Figure out semicolons.
. * c4 4 4 4 for c4 c4 c4 c4?
. * lyric in staff (sharpsharp in staff, text below)
-. * half sharps/flats
-
. * write Dynamic_line (to group dynamics horizontally)
. * use Real for all y positions.
. * midi esp.: use I32 iso int where 32 bits are needed (or assumed...)
-. * stafftypes: voice names/ instrument names.
-
. * lily \tempo
. * % toe to bheel four to five
(where "to" is a tiny bow)
. * auxilliary file for caching info.
-
. * Text_crescendo
-. * revise calcideal
-
.* IDEAS
. * Output data structures of Mudela in XML/SGML.
. * create libmudela, or liblily_frontend
. * Spacing_request for manually adjusting spacing
. * caching breakpoints
. * used fixedpoint arithmetic for min. energy.
-. * move towards incremental algorithms.
-. * versioning stuff (cvt mudela, mudela, etc.)
-. * dynamic loading of engravers?
-.* SMOBS
-Han-Wen Nienhuys <hanwen@cs.uu.nl> writes:
-
-> 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,
-
* OUTLINE SETUP
.* .EMACS