- if (prefix_set & PES_OR_FLEXA)
- if (pitch > prev_pitch) // pes
- {
- prev_context_info |= PES_LOWER;
- context_info |= PES_UPPER;
- }
- else if (pitch < prev_pitch) // flexa
- {
- prev_context_info |= FLEXA_LEFT;
- context_info |= FLEXA_RIGHT;
- }
- else // (pitch == prev_pitch)
- {
- primitive->warning ("may not apply `\\~' on heads with "
- "identical pitch; ignoring `\\~'");
- }
- if (prev_primitive)
- prev_primitive->set_grob_property ("context-info",
- gh_int2scm (prev_context_info));
- prev_primitive = primitive;
- prev_context_info = context_info;
- prev_pitch = pitch;
- }
+ if (prefix_set & PES_OR_FLEXA)
+ if (!i) // ligature may not start with 2nd head of pes or flexa
+ primitive->warning (_ ("can't apply `\\~' on first head of ligature"));
+ else if (pitch > prev_pitch) // pes
+ {
+ prev_context_info |= PES_LOWER;
+ context_info |= PES_UPPER;
+ }
+ else if (pitch < prev_pitch) // flexa
+ {
+ prev_context_info |= FLEXA_LEFT;
+ context_info |= FLEXA_RIGHT;
+ }
+ else // (pitch == prev_pitch)
+ primitive->warning (_ ("can't apply `\\~' on heads with identical pitch"));
+ if (prev_prefix_set & DEMINUTUM)
+ context_info |= AFTER_DEMINUTUM;
+
+ if (prev_primitive)
+ prev_primitive->set_property ("context-info",
+ scm_from_int (prev_context_info));
+ prev_primitive = primitive;
+ prev_prefix_set = prefix_set;
+ prev_context_info = context_info;
+ prev_pitch = pitch;
+ }