Originally created by: *anonymous
Originally created by: simon.al...@mail.de
Actually, this is a content vs. presentation issue. The current approach has lyric extenders ‘hardcoded’ within the lyricmode input, whereas often it depends on layout whether I want an extender printed or not:
– In tight horizontal spacing, we might not need an extender, but when spacing is stretched, it might become necessary. This can come through different (page/line) breaking, parallel contexts present only in some editions (part vs. score), Completion_heads_engraver (mensural without barlines/transcription with barlines).
– Long syllables might not need an extender, where short syllables do.
– Often, all voices share the same text, but have extenders in different places. If extenders need not be given explicitly, the lyricmode input code can be reused much easier.
After all, the extenders don’t add any additional meaning, but only serve to improve legibility in such cases where they do.
This would require:
– Recognising the end of a word by absence of a hyphen.
– Comparing printed length of the melisma notes vs. the syllable, likely after line breaking. After all, extenders will never influence horizontal spacing. They might, however, affect vertical spacing. (unless we chose to omit (or shift) the extender in that case?)
– Personally, I think very short extenders shouldn’t be printed. There should be some kind of threshold.
It’s also one of the usecases where a proper representation of a ‘lyric word’ would be helpful, along with issue 2458.
Possibly related:
issue 4098
Version 2.12 had this listed as a Known issue.
Issues: #2458
Issues: #4098
Issues: #5018
Passes make, make check and a full make doc.
and, forgot to say, that the reg tests diffs are identical to those attached to this tracker.
The last patchsets corrects the problem David pointed out. We should release this now.
Stupid question (as my browser and Sourceforge are a very bad combination with long issues frequently locking up with Javascript issues): the screenshot of the regtest differences attached directly to the issue description is still reflecting the current state?
I find it somewhat weird that in the last example, a short extender from one "la" on 4 16th notes is removed while on the next identical phrase a long extender is added.
Also the extender reaching into a grace note is shortened to before a rest while the next syllable only starts after the grace note. In contrast to the previous version, I don't actually know how to sing that.
It's somewhat strange that an automatism for adding extenders would show so few changes (almost all of them are explicitly removed or shortened extenders, and the only added extender appears to be in connection with melisma settings). Or do we just have so few relevant examples?
Heh, questions that I can actually answer with confidence... ;-) Yes, it's the current state.
For the "la" on 4, there actually is no melisma - the corresponding note is only the e''4. (Note that both lyric lines are assigned to the middle voice; the first and third staff just contain noise that has nothing to do at all with the lyrics.) Hence, the superfluous stub extender is removed.
W.r.t. the graces, classical notation rules demand that syllables are not printed below grace notes, but on the main note. I agree that's strange, but that's how it is according to the old school - use your favorite search engine with "lilypond lyrics grace notes" to find samples. There's an includeGraceNotes property to adjust that, but it's not in use in this regtest.
However, and here it becomes really ridiculous, even with the old version you were supposed to start the third "da" already on the graces. So the extender over the graces used to be extremely misleading, if not plainly wrong. This behavior is configurable (which makes sense if there would be no rest, and the previous syllable should last over the graces).
And yes, we do have so little relevant examples. We hardly have melismata with lyrics in regtests, and if so, then extenders have been added explicitly to provide a visual cue whether the melisma is recognized.
Patch on countdown for Jan 30th.
Diff:
Related
Issues: #4098
The basic problem I have with this approach is that this patch is doing two things:
The first is to decide whether the user might want an extender when he did not explicitly ask for it. I am ok with that part. And I think there is input ("" or so) to actually override that decision.
The second is to decide that the user is no longer allowed to explicitly ask for an extender. That is a consequence of implementing the first half of the issue in a manner where it is impossible to find out whether the user asked explicitly for an extender because extenders are placed in the music expression automatically.
I am not on board with that approach. Now it is comparatively easy for the extender engraver to look at the process_music stage whether or not there was an explicit extender and take different action depending on that. So there is no real necessity for stopping the music expression from representing the actual input.
Now this would be a comparatively simple change to your work, except that those commits resulting from the decision not to allow/heed explicit extenders to be input would not be present.
I would therefore suggest that you push your current work (assuming that it is structured into several commits) to a branch origin/heads/dev/issue4509 or so so that I am able to propose changes which will allow automatic insertion of extenders without messing with manually inserted extenders (apart from the changes in their appearance implied by this patch, but not whether they appear at all).
This would also make it comparatively easy to use an override for regaining the previous behavior, namely only putting in explicitly requested extenders. This would be beneficial for people wanting to write an Urtext edition having extenders if and only if the original showed them.
I'm sure that you properly studied the patch you are commenting.
For all those who did not: The following lilypond source demonstrates how to generate only explicitly requested extenders:
Well, I think we can agree that we are not going to require everybody who wants to use LilyPond to study patches rather than the documentation. Those who actually studied the documentation part of the patch would likely use
\forceExtender
to actually force an explicitly requested extender (which was what I was talking about) though it is not clear how this would interact with theno-extender
property without studying the patch. The point was that we already had a user interface for forcing an extender.At any rate: is there any problem preventing pushing the branch that this was developed in as
refs/heads/dev/issue4509
so that I can take a look at making it accept explicit extender events with the previous syntax?No, there's no problem to delay the patch for some time if you want to improve it.
Whether it is an improvement will likely be subject to debate. Making its input and semantics blend smoother with previous behavior and expectations could make a different with regard to its suitability for inclusion into version 2.20. Partly because it would disrupt people's expectations and workflows less, partly because there would be less of a settling time needed for behavior and documentation before one can be reasonably sure that they'll stick around for good.
I'd like to have a pitch at making this a smoother change without sacrificing its advantages.
@David: I look forward to see your proposals.
@pkx166h: I might be stupid, but I vote to give David a chance to present a patchset #10 ...
Is there an actual branch to work with? Or is the best bet to check in all review diffs in sequence?
I guess so. I obviously have a local branch from which I git-cl'ed everything to Rietveld, but I have no write access to any official repo to open a branch. If you have a good suggestion how to hand over that code history entirely, let me know, but it's really nothing more than the diffs there.
By the way, looking forward to your improvements.
In a branch with an upstream, git send-email should work (assuming that a working Email system is set up). Otherwise, git format-patch and sending of all generated files as attachments.
And I would not really call what I want to do "improvement": it's more like trying to provide the same kind of functionality in a manner more conservative of current interfaces and input. I'd really like to have a change in the manner of "to get the previous behavior, use the following settings" rather than "if you have already run convert-ly, the necessary information is gone from your source file anyway".
You've got mail.
I wish you would have been in for that discussion a few days earlier, but of course I know and understand the reasons why you're late to the party (and so does everybody else, I'm sure). We already spent some thought about that; e.g., that's why we decided to keep
__
around as deprecated rather than purge it completely. Anyway, looking forward to your suggestions. ;-)Well, I was busy with work that was a whole lot better paid while leaving me with rather little room for creative input on the end product. So I try adjusting to the old balance in LilyPond again... Or something.
Believe it or not, but my issue 1375 proposal is also about lyrics: I want to finish off the lyricsto in non-Bottom context thing properly, and I need a melisma-translator for that (so that it works equally well in midi and in layout) and that means I need to be able to follow a dynamic set of events (like slur-events and phrasing-slur-events) with spanner-id s over different contexts and that means that I need first class scheme translators (since C++ translators don't allow a variable set of events to listen for). So far, I am at the scheme engraver stage. So that's a very long shot and I have no idea whether it will indeed make it to 2.20 but most of the parts don't involve changes affecting users and their existing input a whole lot.
So one can take those as they come and see whether one crosses the threshold of being too disruptive to make it into the next stable release.
And this patch, as it stands, crosses that threshold. And I think maybe one could get it below that threshold without having to compromise on the goals it tries to achieve. Or at least split it into a part that can go in now and one that would want to mature in the next stable release cycle.
Basically, I see this issue as deciding when and where the 2.20 release branch needs to get split off. In the current form, I'd say it warrants half a year of developer releases for testing and refining its way of interfacing with the user. If it can mostly stick with the old way, that is unneeded since it's no major difference to previously. One can then still bring forward major interface change and have it mature under user feedback in the developer branch if it turns out that extending the old interface is leading to more long-term problems than one wants to carry around permanently.
I am going to leave this on countdown (for now) as it looks like much more discussion is needed by those that know far more than I.
If this dicussion can be held irrespective of this patch being pushed or not, it has reached 'Push' stage, so if someone more senior than I wants to make that decision then so be it. Else if nothing changes for the next countdown I will put this back to 'needs work'.
Uh, the dog ate my posting? Another try: the principal work should be just this (trying to get along without no-extender and force-extender properties):
Argh, Ctrl-W ate my posting...
AFAICS, with your patch the LyricExtender engraving routines are called irregardless of the existence of an ExtenderEvent, right? So an ExtenderEvent doesn't have to appear even internally anymore? Sounds like the cleanest approach to me.
Now, please don't get me wrong on the following. I appreciate that you participate in that issue, and I value your insight on both the architectural and the UI side a lot. I just want to make sure that you are aware of the thoughts we spent on that issue around the turn of the year, and save everybody time and discussions.
I'm somewhat shivering to hear the you want to "get along without
no-extender
andforce-extender
". Are you talking about the internals and/or the UI here?no-extender
is important in some cases, e.g. to replicate sources without extenders or for special-purpose lyrics (e.g., I'm thinking of functional analysis symbols).'collapse-length = #+inf.0
should be functionally equivalent, but some people expressed the (reasonable, IMHO) desire thatcollapse-length
should be decoupled from an on-/off-toggle.Forced extenders are required for some manual tweaks or, again, special purposes such as lone notes before volta repeats, where an extender into the second repeat bracket needs to be indicated. (BTW, there have been wishes that the mutually exclusive
collapse-length
andforced-length
are not merged into one property.)Starting from scratch, I'd opt for translating the
__
token to forced extenders. However, a reinterpretation of__
was not well-received. Also, ignoring and deprecating__
for a while leaves lyrics (with manual extenders) compatible between 2.19.55+some and earlier (in particular, 2.18.x) versions.Again, all these points have been discussed in a heap of mails on -devel end of 2016. Just to make sure we are on the same page.
"Alexander Kobel" akobel@users.sf.net writes:
Ctrl-Z did not restore it?
It's cleaner for the representation and it frees actual extenders to
carry meaning. More importantly, it makes old sources continue to work
as expected.
Yes, this sucks. I am not proud of it either. The reason I mess like
that so late in the game is that I'd like a version of this to go into
2.20, and for that, the interfaces should have stabilized. And nothing
is more stable like using preexisting interfaces.
It does not help that right now I am having a fever. That does not
necessarily make me more coherent and I'll probably have to go back to
bed soonish.
In a manner, both, but mainly the UI.
My first thought here was to just use \omit LyricExtender : that would
have perfectly matched preexisting functionality. However, this
replaces the stencil with #f and there is no way to resurrect it by
writing . One would have to write something like \once\undo\omit
LyricExtender syllable and that would suck.
Setting collapse-length to #+inf.0 would save a property but not a user
interface. Since no-extender does not actually cause no extender (they
can still be forced), I'd prefer something like automatic-extenders, a
property that can be switched off but is on by default.
However, there is no real point in creating extenders that are known to
get thrown away: if engravers look for extenders, it would be best if
the equivalent of no-extenders would stop an extender grob to be created
at all, again making it easy to recover previous behavior.
I'll have to read up on it.
It isn't an actual reinterpretation as far as I see it: by setting the
equivalent of no-extenders you'll get back the previous behavior
exactly.
Where do you see any incompatibility in my proposal.
I'll read up on it. Sorry for this mess.
--
David Kastrup
"David Kastrup" dakas@users.sf.net writes:
Ok, I read up about half of it. This is embarrassing since Knut's
original design and thoughts were a lot closer to what I would have
considered good practice than what he let himself be persuaded to
change. So I cannot really blame him and others for being miffed at my
very late start into that issue. When reading those discussions, I go
somewhat like
ok, good, ok, bad idea, good, why?, good, what?, well if you do that you
sort of have to, ok, ok...
So the problem is that there is really no good way to hook into those
discussions after the fact and let them converge on something else.
Particularly when that "something else" was already almost there.
I'll be able to justify most of my proposals (or step back from them),
but it's really bad that I made others waste time, effort, planning,
focus, persuasion on different plans.
I don't know how to get this back on track in a manner where everybody
involved feels good about the work he did on this issue.
--
David Kastrup
Hi David, hi Knut, hi all.
On 2017-01-31 12:31, David Kastrup wrote:
Sure; that's all I wanted to achieve.
Ah, okay; I misunderstood your proposal there.
None (yet); I guess after the earlier discussion about the \tweak ...
syntax in the snippet, I was misled to think that you want to give a new
meaning to .
I just want to save you time and make sure that you don't miss some
design goals of the previous proposal that likely should be considered
in any new version.
I can only speak for myself, but I'm not miffed by any means - sorry if
that's the impression I made. And I assume that I'm #2 after Knut in the
involvement list for this issue, with some noticeable gap.
I think I have a fairly good understanding of the user perspective, some
idea about the implementability, but by no means a clear picture of the
architectural implications or the long-term trouble that a specific
choice of implementation might cause. And I definitely know that you are
the one I trust the most in that regard.
No need to apologize as far as I'm concerned. First, I'm not in a hurry
here. Second, I trust that you have reasons beyond my horizon, and that
you're not jumping on the wagon out of sadistic or masochistic motivation.
I'm happy to offer my help if you want a summary of design goals and/or
UI considerations that arose during the past weeks. (By the way: also
via phone, if that's a reasonable option for you.) And I'll try not to
comment on the backend... ;-)
Don't worry - I hope there's no reason.
Cheers,
Alexander