-
- /*
- * Flexa has no variable size cauda if its left head is
- * stacked on the right head. This is true for
- * cephalicus. Hence, remove the cauda.
- *
- * Urgh: for the current implementation, this rule only
- * applies for cephalicus; but it is a fundamental rule.
- * Therefore, the following line of code should be
- * placed somewhere else.
- */
- prev_primitive->set_property ("add-cauda",
- gh_bool2scm (false));
- }
- glyph_name = "vaticana_reverse_plica";
- }
- else if (prefix_set & (CAVUM | LINEA))
- if ((prefix_set & CAVUM) && (prefix_set & LINEA))
- glyph_name = "vaticana_linea_punctum_cavum";
- else if (prefix_set & CAVUM)
- glyph_name = "vaticana_punctum_cavum";
- else
- glyph_name = "vaticana_linea_punctum";
- else if (prefix_set & AUCTUM)
- if (prefix_set & ASCENDENS)
- glyph_name = "solesmes_auct_asc";
- else
- glyph_name = "solesmes_auct_desc";
- else if ((context_info & STACKED_HEAD) &&
- (context_info & PES_UPPER))
- if (prev_delta_pitch > 1)
- glyph_name = "vaticana_upes";
+ }
+ else if (prev_delta_pitch < 0)
+ {
+ // cephalicus
+ if (! (prev_context_info & FLEXA_RIGHT))
+ /* correct head of previous primitive */
+ {
+ if (i > 1)
+ {
+ /* cephalicus head with fixed size cauda */
+ prev_glyph_name = "svaticana.inner.cephalicus";
+ }
+ else
+ {
+ /* cephalicus head without cauda */
+ prev_glyph_name = "svaticana.cephalicus";
+ }
+
+ /*
+ * Flexa has no variable size cauda if its left head is
+ * stacked on the right head. This is true for
+ * cephalicus. Hence, remove the cauda.
+ *
+ * Urgh: for the current implementation, this rule only
+ * applies for cephalicus; but it is a fundamental rule.
+ * Therefore, the following line of code should be
+ * placed somewhere else.
+ */
+ prev_primitive->set_property ("add-cauda",
+ ly_bool2scm (false));
+ }
+ if (prev_delta_pitch < - 1)
+ {
+ glyph_name = "svaticana.reverse.plica";
+ }
+ else
+ {
+ glyph_name = "svaticana.reverse.vplica";
+ }
+ }
+ else // (prev_delta_pitch == 0)
+ {
+ primitive->programming_error ("Vaticana_ligature:"
+ "deminutum head must have different "
+ "pitch -> ignoring grob");
+ }
+ else if (prefix_set & (CAVUM | LINEA))
+ if ((prefix_set & CAVUM) && (prefix_set & LINEA))
+ glyph_name = "svaticana.linea.punctum.cavum";
+ else if (prefix_set & CAVUM)
+ glyph_name = "svaticana.punctum.cavum";
+ else
+ glyph_name = "svaticana.linea.punctum";
+ else if (prefix_set & AUCTUM)
+ if (prefix_set & ASCENDENS)
+ glyph_name = "ssolesmes.auct.asc";
+ else
+ glyph_name = "ssolesmes.auct.desc";
+ else if ((context_info & STACKED_HEAD)
+ && (context_info & PES_UPPER))
+ if (prev_delta_pitch > 1)
+ glyph_name = "svaticana.upes";
+ else
+ glyph_name = "svaticana.vupes";