*/
#include "paper-system.hh"
-
-#include "virtual-methods.hh"
+#include "item.hh"
#include "ly-smobs.icc"
IMPLEMENT_TYPE_P (Paper_system, "ly:paper-system?");
IMPLEMENT_DEFAULT_EQUAL_P (Paper_system);
-
-
Paper_system::Paper_system (Stencil s, bool is_title)
{
is_title_ = is_title;
break_before_penalty_ = 0;
smobify_self ();
stencil_ = s;
- staff_refpoints_ = Interval(0, 0);
+ staff_refpoints_ = Interval (0, 0);
}
Paper_system::~Paper_system ()
SCM
Paper_system::mark_smob (SCM smob)
{
- Paper_system *system = (Paper_system*) SCM_CELL_WORD_1 (smob);
- return system-> stencil_.expr ();
+ Paper_system *system = (Paper_system *) SCM_CELL_WORD_1 (smob);
+ scm_gc_mark (system->details_);
+ return system->stencil_.expr ();
}
int
Paper_system::print_smob (SCM smob, SCM port, scm_print_state*)
{
- Paper_system *p = (Paper_system*) SCM_CELL_WORD_1 (smob);
+ Paper_system *p = (Paper_system *) SCM_CELL_WORD_1 (smob);
scm_puts ("#<", port);
scm_puts (classname (p), port);
- scm_puts (" ", port);
+ scm_puts ("n ", port);
scm_puts (to_string (p->number_).to_str0 (), port);
- scm_puts ("p ", port);
+ scm_puts (", p ", port);
scm_puts (to_string (p->break_before_penalty_).to_str0 (), port);
if (p->is_title ())
scm_puts (" t", port);
{
return stencil_;
}
+
+void
+Paper_system::read_left_bound (Item *left)
+{
+ break_before_penalty_
+ = robust_scm2double (left->get_property ("page-penalty"), 0.0);
+
+ details_
+ = left->get_property ("line-break-system-details");
+
+ SCM yext
+ = scm_assq (ly_symbol2scm ("Y-extent"), details_);
+
+ SCM staff_ext
+ = scm_assq (ly_symbol2scm ("refpoint-Y-extent"), details_);
+
+ if (scm_is_pair (yext)
+ && is_number_pair (scm_cdr (yext)))
+ {
+ Box b = stencil_.extent_box();
+ b[Y_AXIS] = ly_scm2interval (scm_cdr (yext));
+
+ stencil_ = Stencil (b, stencil_.expr ());
+ }
+
+ if (scm_is_pair (staff_ext)
+ && is_number_pair (scm_cdr (staff_ext)))
+ {
+ staff_refpoints_ = ly_scm2interval (scm_cdr (staff_ext));
+ }
+}
+
+SCM
+Paper_system::internal_get_property (SCM sym) const
+{
+ SCM handle = scm_assq (sym, details_);
+ if (scm_is_pair (handle))
+ return scm_cdr (handle);
+ else
+ return SCM_EOL;
+}
+
+/*
+ todo: move to Paper_system property.
+ */
+Interval
+Paper_system::staff_refpoints () const
+{
+ return staff_refpoints_;
+}