X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fvaticana-ligature-engraver.cc;h=f84ecaa6b214cefbece2a3a473fe4d3454385eb2;hb=a5c48845f77d2d691f1674bb6daa8dd9d364268c;hp=f24aa902089d6e1b82a93a7fcfa012cd04bd5162;hpb=811be522d0b79493159f47789e5621dc85493495;p=lilypond.git diff --git a/lily/vaticana-ligature-engraver.cc b/lily/vaticana-ligature-engraver.cc index f24aa90208..f84ecaa6b2 100644 --- a/lily/vaticana-ligature-engraver.cc +++ b/lily/vaticana-ligature-engraver.cc @@ -3,18 +3,21 @@ source file of the GNU LilyPond music typesetter - (c) 2003--2005 Juergen Reuter + (c) 2003--2006 Juergen Reuter */ #include "gregorian-ligature-engraver.hh" + +#include "font-interface.hh" #include "gregorian-ligature.hh" -#include "vaticana-ligature.hh" +#include "international.hh" +#include "output-def.hh" +#include "paper-column.hh" #include "spanner.hh" #include "staff-symbol-referencer.hh" -#include "font-interface.hh" +#include "stream-event.hh" +#include "vaticana-ligature.hh" #include "warn.hh" -#include "output-def.hh" -#include "paper-column.hh" #include "translator.icc" @@ -32,7 +35,7 @@ private: int context_info, int delta_pitch); bool is_stacked_head (int prefix_set, int context_info); - Real align_heads (Array primitives, + Real align_heads (vector primitives, Real flexa_width, Real thickness); @@ -42,11 +45,29 @@ public: protected: virtual Spanner *create_ligature_spanner (); virtual void transform_heads (Spanner *ligature, - Array primitives); + vector primitives); + DECLARE_TRANSLATOR_LISTENER (pes_or_flexa); + DECLARE_TRANSLATOR_LISTENER (ligature); }; +IMPLEMENT_TRANSLATOR_LISTENER (Vaticana_ligature_engraver, pes_or_flexa); +void +Vaticana_ligature_engraver::listen_pes_or_flexa (Stream_event *ev) +{ + Gregorian_ligature_engraver::listen_pes_or_flexa (ev); +} + +IMPLEMENT_TRANSLATOR_LISTENER (Vaticana_ligature_engraver, ligature); +void +Vaticana_ligature_engraver::listen_ligature (Stream_event *ev) +{ + Ligature_engraver::listen_ligature (ev); +} + Vaticana_ligature_engraver::Vaticana_ligature_engraver () { + brew_ligature_primitive_proc = + Vaticana_ligature::brew_ligature_primitive_proc; } Spanner * @@ -141,7 +162,7 @@ Vaticana_ligature_engraver::need_extra_horizontal_space (int prev_prefix_set, in } Real -Vaticana_ligature_engraver::align_heads (Array primitives, +Vaticana_ligature_engraver::align_heads (vector primitives, Real flexa_width, Real thickness) { @@ -159,7 +180,7 @@ Vaticana_ligature_engraver::align_heads (Array primitives, = dynamic_cast (primitives[0].grob ())->get_column (); Real join_thickness - = thickness * column->get_layout ()->get_dimension (ly_symbol2scm ("linethickness")); + = thickness * column->layout ()->get_dimension (ly_symbol2scm ("line-thickness")); /* * Amount of extra space two put between some particular @@ -176,7 +197,7 @@ Vaticana_ligature_engraver::align_heads (Array primitives, Item *prev_primitive = 0; int prev_prefix_set = 0; - for (int i = 0; i < primitives.size (); i++) + for (vsize i = 0; i < primitives.size (); i++) { Item *primitive = dynamic_cast (primitives[i].grob ()); int prefix_set @@ -196,20 +217,18 @@ Vaticana_ligature_engraver::align_heads (Array primitives, "ignoring grob"); continue; } - String glyph_name = ly_scm2string (glyph_name_scm); + string glyph_name = ly_scm2string (glyph_name_scm); int delta_pitch = 0; if (prev_primitive) /* urgh, need prev_primitive only here */ { - SCM delta_pitch_scm = prev_primitive->get_property ("delta-pitch"); + SCM delta_pitch_scm = prev_primitive->get_property ("delta-position"); if (delta_pitch_scm != SCM_EOL) - { - delta_pitch = scm_to_int (delta_pitch_scm); - } + delta_pitch = scm_to_int (delta_pitch_scm); else { primitive->programming_error ("Vaticana_ligature:" - "delta-pitch undefined -> " + "delta-position undefined -> " "ignoring grob"); continue; } @@ -234,10 +253,9 @@ Vaticana_ligature_engraver::align_heads (Array primitives, head_width = 0.0; x_offset = join_thickness - Font_interface::get_default_font (primitive)-> - find_by_name ("noteheads." + glyph_name).extent (X_AXIS).length (); + find_by_name ("noteheads.s" + glyph_name).extent (X_AXIS).length (); } - else if (!String::compare (glyph_name, "flexa") - || !String::compare (glyph_name, "")) + else if (glyph_name == "flexa" || glyph_name == "") { /* * This head represents either half of a flexa shape. @@ -254,7 +272,7 @@ Vaticana_ligature_engraver::align_heads (Array primitives, */ head_width = Font_interface::get_default_font (primitive)-> - find_by_name ("noteheads." + glyph_name).extent (X_AXIS).length (); + find_by_name ("noteheads.s" + glyph_name).extent (X_AXIS).length (); x_offset = 0.0; } @@ -290,7 +308,7 @@ Vaticana_ligature_engraver::align_heads (Array primitives, ligature_width -= join_thickness; } } - else if (!String::compare (glyph_name, "")) + else if (glyph_name == "") { /* * This is the 2nd (virtual) head of flexa shape. Join it @@ -342,16 +360,16 @@ check_for_prefix_loss (Item *primitive) = scm_to_int (primitive->get_property ("prefix-set")); if (prefix_set & ~PES_OR_FLEXA) { - String prefs = Gregorian_ligature::prefixes_to_str (primitive); + string prefs = Gregorian_ligature::prefixes_to_str (primitive); primitive->warning (_f ("ignored prefix (es) `%s' of this head according " "to restrictions of the selected ligature style", - prefs.to_str0 ())); + prefs.c_str ())); } } void Vaticana_ligature_engraver::transform_heads (Spanner *ligature, - Array primitives) + vector primitives) { Real flexa_width = robust_scm2double (ligature->get_property ("flexa-width"), 2); @@ -361,21 +379,19 @@ Vaticana_ligature_engraver::transform_heads (Spanner *ligature, int prev_prefix_set = 0; int prev_context_info = 0; int prev_delta_pitch = 0; - String prev_glyph_name = ""; - for (int i = 0; i < primitives.size (); i++) + string prev_glyph_name = ""; + for (vsize i = 0; i < primitives.size (); i++) { Item *primitive = dynamic_cast (primitives[i].grob ()); int delta_pitch; - SCM delta_pitch_scm = primitive->get_property ("delta-pitch"); + SCM delta_pitch_scm = primitive->get_property ("delta-position"); if (delta_pitch_scm != SCM_EOL) - { - delta_pitch = scm_to_int (delta_pitch_scm); - } + delta_pitch = scm_to_int (delta_pitch_scm); else { primitive->programming_error ("Vaticana_ligature:" - "delta-pitch undefined -> " + "delta-position undefined -> " "ignoring grob"); continue; } @@ -398,32 +414,32 @@ Vaticana_ligature_engraver::transform_heads (Spanner *ligature, * this decision must be made here in the engraver rather than in * the backend). */ - String glyph_name; + string glyph_name; if (prefix_set & VIRGA) { - glyph_name = "svaticana.punctum"; + glyph_name = "vaticana.punctum"; primitive->set_property ("add-stem", ly_bool2scm (true)); } else if (prefix_set & QUILISMA) - glyph_name = "svaticana.quilisma"; + glyph_name = "vaticana.quilisma"; else if (prefix_set & ORISCUS) - glyph_name = "ssolesmes.oriscus"; + glyph_name = "solesmes.oriscus"; else if (prefix_set & STROPHA) if (prefix_set & AUCTUM) - glyph_name = "ssolesmes.stropha.aucta"; - else glyph_name = "ssolesmes.stropha"; + glyph_name = "solesmes.stropha.aucta"; + else glyph_name = "solesmes.stropha"; else if (prefix_set & INCLINATUM) if (prefix_set & AUCTUM) - glyph_name = "ssolesmes.incl.auctum"; + glyph_name = "solesmes.incl.auctum"; else if (prefix_set & DEMINUTUM) - glyph_name = "ssolesmes.incl.parvum"; + glyph_name = "solesmes.incl.parvum"; else - glyph_name = "svaticana.inclinatum"; + glyph_name = "vaticana.inclinatum"; else if (prefix_set & DEMINUTUM) if (i == 0) { // initio debilis - glyph_name = "svaticana.reverse.plica"; + glyph_name = "vaticana.reverse.plica"; } else if (prev_delta_pitch > 0) { @@ -431,15 +447,13 @@ Vaticana_ligature_engraver::transform_heads (Spanner *ligature, if (! (prev_context_info & FLEXA_RIGHT)) /* correct head of previous primitive */ if (prev_delta_pitch > 1) - { - prev_glyph_name = "svaticana.epiphonus"; - glyph_name = "svaticana.plica"; - } + prev_glyph_name = "vaticana.epiphonus"; else - { - prev_glyph_name = "svaticana.vepiphonus"; - glyph_name = "svaticana.vplica"; - } + prev_glyph_name = "vaticana.vepiphonus"; + if (prev_delta_pitch > 1) + glyph_name = "vaticana.plica"; + else + glyph_name = "vaticana.vplica"; } else if (prev_delta_pitch < 0) { @@ -450,12 +464,12 @@ Vaticana_ligature_engraver::transform_heads (Spanner *ligature, if (i > 1) { /* cephalicus head with fixed size cauda */ - prev_glyph_name = "svaticana.inner.cephalicus"; + prev_glyph_name = "vaticana.inner.cephalicus"; } else { /* cephalicus head without cauda */ - prev_glyph_name = "svaticana.cephalicus"; + prev_glyph_name = "vaticana.cephalicus"; } /* @@ -471,14 +485,10 @@ Vaticana_ligature_engraver::transform_heads (Spanner *ligature, 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"; - } + if (prev_delta_pitch < - 1) + glyph_name = "vaticana.reverse.plica"; + else + glyph_name = "vaticana.reverse.vplica"; } else // (prev_delta_pitch == 0) { @@ -488,31 +498,31 @@ Vaticana_ligature_engraver::transform_heads (Spanner *ligature, } else if (prefix_set & (CAVUM | LINEA)) if ((prefix_set & CAVUM) && (prefix_set & LINEA)) - glyph_name = "svaticana.linea.punctum.cavum"; + glyph_name = "vaticana.linea.punctum.cavum"; else if (prefix_set & CAVUM) - glyph_name = "svaticana.punctum.cavum"; + glyph_name = "vaticana.punctum.cavum"; else - glyph_name = "svaticana.linea.punctum"; + glyph_name = "vaticana.linea.punctum"; else if (prefix_set & AUCTUM) if (prefix_set & ASCENDENS) - glyph_name = "ssolesmes.auct.asc"; + glyph_name = "solesmes.auct.asc"; else - glyph_name = "ssolesmes.auct.desc"; + glyph_name = "solesmes.auct.desc"; else if ((context_info & STACKED_HEAD) && (context_info & PES_UPPER)) if (prev_delta_pitch > 1) - glyph_name = "svaticana.upes"; + glyph_name = "vaticana.upes"; else - glyph_name = "svaticana.vupes"; + glyph_name = "vaticana.vupes"; else - glyph_name = "svaticana.punctum"; + glyph_name = "vaticana.punctum"; /* * This head needs a cauda, if it starts a flexa, is not the upper * head of a pes, and if it is a punctum. */ if ((context_info & FLEXA_LEFT) && ! (context_info & PES_UPPER)) - if (!String::compare (glyph_name, "svaticana.punctum")) + if (glyph_name == "vaticana.punctum") primitive->set_property ("add-cauda", ly_bool2scm (true)); /* @@ -551,17 +561,17 @@ Vaticana_ligature_engraver::transform_heads (Spanner *ligature, { if ((context_info & PES_UPPER) && (context_info & STACKED_HEAD)) { - if (!String::compare (prev_glyph_name, "svaticana.punctum")) + if (prev_glyph_name == "vaticana.punctum") if (prev_delta_pitch > 1) - prev_glyph_name = "svaticana.lpes"; + prev_glyph_name = "vaticana.lpes"; else - prev_glyph_name = "svaticana.vlpes"; + prev_glyph_name = "vaticana.vlpes"; } } if (prev_primitive) prev_primitive->set_property ("glyph-name", - scm_makfrom0str (prev_glyph_name.to_str0 ())); + scm_makfrom0str (prev_glyph_name.c_str ())); /* * In the backend, flexa shapes and joins need to know about line @@ -579,7 +589,7 @@ Vaticana_ligature_engraver::transform_heads (Spanner *ligature, } prev_primitive->set_property ("glyph-name", - scm_makfrom0str (prev_glyph_name.to_str0 ())); + scm_makfrom0str (prev_glyph_name.c_str ())); align_heads (primitives, flexa_width, thickness); @@ -599,8 +609,8 @@ Vaticana_ligature_engraver::transform_heads (Spanner *ligature, ADD_ACKNOWLEDGER (Vaticana_ligature_engraver, rest); ADD_ACKNOWLEDGER (Vaticana_ligature_engraver, note_head); ADD_TRANSLATOR (Vaticana_ligature_engraver, - /* descr */ "Handles ligatures by glueing special ligature heads together.", - /* creats*/ "VaticanaLigature", - /* accepts */ "ligature-event", - /* reads */ "", + /* doc */ "Handles ligatures by glueing special ligature heads together.", + /* create */ "VaticanaLigature", + /* accept */ "ligature-event", + /* read */ "", /* write */ "");