2 paper-system.cc -- implement Paper_system
4 source file of the GNU LilyPond music typesetter
6 (c) 2004 Jan Nieuwenhuizen <janneke@gnu.org>
9 #include "paper-system.hh"
12 #include "virtual-methods.hh"
14 #include "ly-smobs.icc"
16 IMPLEMENT_SMOBS (Paper_system);
17 IMPLEMENT_TYPE_P (Paper_system, "ly:paper-system?");
18 IMPLEMENT_DEFAULT_EQUAL_P (Paper_system);
22 Paper_system::Paper_system (Stencil s, bool is_title)
31 Paper_system::~Paper_system ()
36 Paper_system::mark_smob (SCM smob)
38 Paper_system *system = (Paper_system*) ly_cdr (smob);
39 return system-> stencil_.expr ();
43 Paper_system::print_smob (SCM smob, SCM port, scm_print_state*)
45 Paper_system *p = (Paper_system*) ly_cdr (smob);
46 scm_puts ("#<", port);
47 scm_puts (classname (p), port);
49 scm_puts (to_string (p->number_).to_str0 (), port);
50 scm_puts ("p ", port);
51 scm_puts (to_string (p->penalty_).to_str0 (), port);
53 scm_puts (" t", port);
54 scm_puts (" >", port);
59 Paper_system::is_title () const
65 Paper_system::penalty () const
71 Paper_system::dim () const
73 return Offset (stencil_.extent (X_AXIS).length (),
74 stencil_.extent (Y_AXIS).length ());
78 Paper_system::to_stencil () const
83 LY_DEFINE (ly_paper_system_height, "ly:paper-system-extent",
84 2, 0, 0, (SCM system, SCM axis),
85 "Return the extent of @var{system}.")
87 Paper_system *ps = unsmob_paper_system (system);
88 SCM_ASSERT_TYPE (ps, system, SCM_ARG1, __FUNCTION__, "paper-system");
89 SCM_ASSERT_TYPE (is_axis (axis), axis, SCM_ARG2, __FUNCTION__, "axis");
90 Axis ax = (Axis)ly_scm2int (axis);
91 return scm_make_real (ps->dim ()[ax]);
94 LY_DEFINE (ly_paper_system_title_p, "ly:paper-system-title?",
95 1, 0, 0, (SCM system),
96 "Is @var{system} a title system?")
98 Paper_system *ps = unsmob_paper_system (system);
99 SCM_ASSERT_TYPE (ps, system, SCM_ARG1, __FUNCTION__, "paper-system");
100 return SCM_BOOL (ps->is_title ());
103 LY_DEFINE (ly_paper_system_number, "ly:paper-system-number",
104 1, 0, 0, (SCM system),
105 "Return the number of @var{system}.")
107 Paper_system *ps = unsmob_paper_system (system);
108 SCM_ASSERT_TYPE (ps, system, SCM_ARG1, __FUNCTION__, "paper-system");
109 return scm_int2num (ps->number_);
112 LY_DEFINE (ly_paper_system_break_score, "ly:paper-system-break-penalty",
113 1, 0, 0, (SCM system),
114 "Return the score for page break after @var{system}.")
116 Paper_system *ps = unsmob_paper_system (system);
117 SCM_ASSERT_TYPE (ps, system, SCM_ARG1, __FUNCTION__, "paper-system");
118 return scm_int2num (int (ps->penalty ()));
121 LY_DEFINE (ly_paper_system_stencil, "ly:paper-system-stencil",
122 1, 0, 0, (SCM system),
123 "Return the height of @var{system}.")
125 Paper_system *ps = unsmob_paper_system (system);
126 SCM_ASSERT_TYPE (ps, system, SCM_ARG1, __FUNCTION__, "paper-system");
127 return ps->to_stencil ().smobbed_copy ();
132 LY_DEFINE (ly_paper_system_staff_extent, "ly:paper-system-staff-extents",
133 1, 0, 0, (SCM system),
134 "Return the top and bottom staff refpoint.")
136 Paper_system *ps = unsmob_paper_system (system);
137 SCM_ASSERT_TYPE (ps, system, SCM_ARG1, __FUNCTION__, "paper-system");
138 return ly_interval2scm (ps->staff_refpoints_);