|
From: | Han-Wen Nienhuys |
Subject: | Re: Vaticana ligatures / spacing / other... |
Date: | Thu, 17 Nov 2005 01:18:25 +0100 |
User-agent: | Mozilla Thunderbird 1.0.7-1.1.fc4 (X11/20050929) |
Michael Welsh Duggan wrote:
I am coming up to a point where I am going to be needing to use LilyPond to typeset a great deal of Editio Vaticana-style chant notation. I have been reading the associated code in preperation for delving in and making some fixes, but I wanted to see what work Juergen might already have on this outside of CVS before I started reinventing the wheel. Some of these may already be working; I have not tested all of them in the current version. Also note: my interest in typesetting chant notation is in the nature of a hobby -- I should not be considered an expert. As a result, any suggestions below may be the result of my misunderstanding of "the way things are really supposed to be". I certainly do not mind being corrected.
The current ligature code has not been reviewed by Jan and me at all, and it's ancient. It's not a good guide for implementing more functionality. I think it will be quicker to restart from scratch, and simply borrow the code bits that you might need.
Ligature spacing: as has been mentioned before, coherent ligatures (at least of the vaticana variety) should act like a single un-breakable paper column, but should not receive extra spacing based on the number of notes within the ligature. I am interested in getting this working. I can start with the TODO notes in coherent-ligature-engraver.cc.
You should create a new ligature engraver. It should acknowledge all the relevant notes/neume item grobs. The engraver creates an Item at the start of the ligature. The Item is an X axis-group, and all neumes/notes are added to the Item as children. The item determines the positioning of its X-children (see eg. Dot_column::calc_positioning_done). In a first version, it can put the children in a row.
For engravers, code reuse through shared super classes has always had bad results. So, derive the engraver directly from the Engraver class.
I think this is the major task that you should focus on. The rest of your items are comparatively simple. If you want, I can also implement the above as a sponsored feature, or lay-out a framework for you to put complex positioning rules in.
-- Han-Wen Nienhuys - address@hidden - http://www.xs4all.nl/~hanwen
[Prev in Thread] | Current Thread | [Next in Thread] |