X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fpaper-column.cc;h=299958f643098cd1820c65cdf91a691f0b524ee6;hb=97759ace2c13860488de4e9498607adac8d20963;hp=13407f61e0051938b5b7fa0698f1a66620281ef5;hpb=c0198cfd7fc1ad742c54afdfd5e2f943fa923dbd;p=lilypond.git diff --git a/lily/paper-column.cc b/lily/paper-column.cc index 13407f61e0..299958f643 100644 --- a/lily/paper-column.cc +++ b/lily/paper-column.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 1997--2005 Han-Wen Nienhuys + (c) 1997--2006 Han-Wen Nienhuys */ #include "paper-column.hh" @@ -45,6 +45,12 @@ Paper_column::get_system () const return system_; } +void +Paper_column::set_system (System *s) +{ + system_ = s; +} + Paper_column * Paper_column::get_column () const { @@ -65,6 +71,14 @@ Paper_column::Paper_column (Paper_column const &src, int count) rank_ = src.rank_; } +int +Paper_column::compare (Grob * const &a, + Grob * const &b) +{ + return sign (dynamic_cast (a)->rank_ + - dynamic_cast (b)->rank_); +} + Moment Paper_column::when_mom (Grob *me) { @@ -95,7 +109,7 @@ Paper_column::is_used (Grob *me) if (bbm.size ()) return true; - if (Item::is_breakable (me)) + if (Paper_column::is_breakable (me)) return true; if (to_boolean (me->get_property ("used"))) @@ -103,6 +117,12 @@ Paper_column::is_used (Grob *me) return false; } +bool +Paper_column::is_breakable (Grob *me) +{ + return scm_is_symbol (me->get_property ("line-break-permission")); +} + /* Print a vertical line and the rank number, to aid debugging. */ @@ -113,19 +133,19 @@ Paper_column::print (SCM p) { Grob *me = unsmob_grob (p); - String r = to_string (Paper_column::get_rank (me)); + string r = to_string (Paper_column::get_rank (me)); Moment *mom = unsmob_moment (me->get_property ("when")); - String when = mom ? mom->to_string () : "?/?"; + string when = mom ? mom->to_string () : "?/?"; SCM properties = Font_interface::text_font_alist_chain (me); - SCM scm_mol = Text_interface::interpret_markup (me->get_layout ()->self_scm (), + SCM scm_mol = Text_interface::interpret_markup (me->layout ()->self_scm (), properties, - scm_makfrom0str (r.to_str0 ())); - SCM when_mol = Text_interface::interpret_markup (me->get_layout ()->self_scm (), + scm_makfrom0str (r.c_str ())); + SCM when_mol = Text_interface::interpret_markup (me->layout ()->self_scm (), properties, - scm_makfrom0str (when.to_str0 ())); + scm_makfrom0str (when.c_str ())); Stencil t = *unsmob_stencil (scm_mol); t.add_at_edge (Y_AXIS, DOWN, *unsmob_stencil (when_mol), 0.1, 0.1); t.align_to (X_AXIS, CENTER); @@ -157,16 +177,15 @@ Paper_column::before_line_breaking (SCM grob) if (!ga) return SCM_UNSPECIFIED; - Link_array &array (ga->array_reference ()); + vector &array (ga->array_reference ()); - for (int i = array.size (); i--;) + for (vsize i = array.size (); i--;) { Grob *g = array[i]; if (!g || !g->is_live ()) - { // UGH . potentially quadratic. - array.del (i); - } + /* UGH . potentially quadratic. */ + array.erase (array.begin () + i); } return SCM_UNSPECIFIED; @@ -193,10 +212,17 @@ ADD_INTERFACE (Paper_column, /* properties */ "between-cols " "bounded-by-me " + "grace-spacing " "line-break-system-details " - "page-penalty " + "line-break-penalty " + "line-break-permission " + "page-break-penalty " + "page-break-permission " + "page-turn-penalty " + "page-turn-permission " "shortest-playing-duration " "shortest-starter-duration " + "spacing " "used " "when ");