2 paper-system.cc -- implement Paper_system
4 source file of the GNU LilyPond music typesetter
6 (c) 2004--2005 Jan Nieuwenhuizen <janneke@gnu.org>
9 #include "paper-system.hh"
12 #include "ly-smobs.icc"
14 IMPLEMENT_SMOBS (Paper_system);
15 IMPLEMENT_TYPE_P (Paper_system, "ly:paper-system?");
16 IMPLEMENT_DEFAULT_EQUAL_P (Paper_system);
18 Paper_system::Paper_system (Stencil s, bool is_title)
22 break_before_penalty_ = 0;
25 staff_refpoints_ = Interval (0, 0);
28 Paper_system::~Paper_system ()
33 Paper_system::mark_smob (SCM smob)
35 Paper_system *system = (Paper_system *) SCM_CELL_WORD_1 (smob);
36 scm_gc_mark (system->details_);
37 return system->stencil_.expr ();
41 Paper_system::print_smob (SCM smob, SCM port, scm_print_state*)
43 Paper_system *p = (Paper_system *) SCM_CELL_WORD_1 (smob);
44 scm_puts ("#<", port);
45 scm_puts (classname (p), port);
46 scm_puts ("n ", port);
47 scm_puts (to_string (p->number_).to_str0 (), port);
48 scm_puts (", p ", port);
49 scm_puts (to_string (p->break_before_penalty_).to_str0 (), port);
51 scm_puts (" t", port);
52 scm_puts (" >", port);
57 Paper_system::is_title () const
63 Paper_system::break_before_penalty () const
65 return break_before_penalty_;
69 Paper_system::to_stencil () const
75 Paper_system::read_left_bound (Item *left)
78 = robust_scm2double (left->get_property ("page-penalty"), 0.0);
81 = left->get_property ("line-break-system-details");
84 = scm_assq (ly_symbol2scm ("Y-extent"), details_);
87 = scm_assq (ly_symbol2scm ("refpoint-Y-extent"), details_);
89 if (scm_is_pair (yext)
90 && is_number_pair (scm_cdr (yext)))
92 Box b = stencil_.extent_box();
93 b[Y_AXIS] = ly_scm2interval (scm_cdr (yext));
95 stencil_ = Stencil (b, stencil_.expr ());
98 if (scm_is_pair (staff_ext)
99 && is_number_pair (scm_cdr (staff_ext)))
101 staff_refpoints_ = ly_scm2interval (scm_cdr (staff_ext));
106 Paper_system::internal_get_property (SCM sym) const
108 SCM handle = scm_assq (sym, details_);
109 if (scm_is_pair (handle))
110 return scm_cdr (handle);
116 todo: move to Paper_system property.
119 Paper_system::staff_refpoints () const
121 return staff_refpoints_;