lilypond-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: warnings during `make web'


From: Juergen Reuter
Subject: Re: warnings during `make web'
Date: Mon, 6 Nov 2006 12:07:23 +0100 (CET)

On Mon, 6 Nov 2006, Han-Wen Nienhuys wrote:

Werner LEMBERG escreveu:
Consider the test file apply-output.ly.  During `make web', extended
debugging is active, and processing the file gives this warning:

  programming error: Grob `NoteHead' has no interface for property `text'
  continuing, cross fingers

Hanwen, do you have an answer to my original question?  Or is this
`ancient notation'?

There is no easy way. You have to write a bit of scheme code that adds to the list in the interfaces detail property in the meta property.

There are many other warnings similar to this, and I think it
would be good to fix them all.
95% of these warnings come from the ancient notation code; that
needs to be fixed first IMO.

Please give an example, together with the `right' syntax.

this is not about syntax, but about the ancient notation code misusing the current structure in ways that it wasn't designed to do.



Ancient notation uses "head prefixes" like \virga, \quilisma, etc. that are kind of attributes of the note heads for their further characterization (in the source code, these note heads also called "ligature primitives", if used in the context of ligatures). These attributes further describe the heads, such as "select a virga glyph for this note head". Still, the actual note head glyph depends not only on the attribute(s) of the note head, but also on the attributes of the left and right neighbour note head. Hence, it does not make sense to store these attributes e.g. as notehead style. Additionally, some implicit attributes derive from the combination of attributes of two adjacent note heads (e.g. for deciding if a vertical line has to be drawn between two adjacent note heads).

When the music is processed by the parser, I somewhere have to store this information that refers to individual note heads. Obviously, the note heads themselves are the best place. However, one of the design requirements of adding ancient notation to lily was to separate the new code as far as possible from existing code; in particular, ancient notation code was required not to "pollute" existing code of lily, such as note-heads.cc. As a result, ancient notation inofficially uses these attributes without officially declaring them in noteheads.cc.

One theoretical solution would be to introduce a new "ligatureheads.cc" file instead of using the "noteheads.cc" functionality. However, it turned out that almost all of the functionality of noteheads.cc would have to be cloned. Even worse, some other parts of lily call methods in noteheads.cc (at least in earlier versions of lily they did; I have not checked for recent versions). That is, when introducing a "ligatureheads.cc" I would have to add calls to methods in "ligatureheads.cc" all around the existing code, which would also pollute the code; i.e. introducing a "ligatureheads.cc" is not a solution. Subclassing "noteheads.cc" did not work for some technical detail that I currently can not remember.

The easiest solution that I can see is to tolerate little polution of "noteheads.cc" and just add the missing interface declaration at the end of this file. However, that's not my decision...

Any comments to solve this problem are welcome; however, my time is currently extremely limited (still writing on my thesis and running out of time...), so I currently can contribute only cosmetic changes, if at all.

By the way, the particular warning "programming error: Grob `NoteHead' has no interface for property `text'" does not origin from ancient notation, as far as I can see.

Greetings,
Juergen




reply via email to

[Prev in Thread] Current Thread [Next in Thread]