2 paper-line.cc -- implement Paper_line
4 source file of the GNU LilyPond music typesetter
6 (c) 2004 Jan Nieuwenhuizen <janneke@gnu.org>
9 #include "paper-line.hh"
12 #include "virtual-methods.hh"
14 #define TITLE_PENALTY -1
16 Paper_line::Paper_line (Offset o, SCM stencils, int penalty, bool is_title)
25 Paper_line::~Paper_line ()
29 #include "ly-smobs.icc"
30 IMPLEMENT_SMOBS (Paper_line);
31 IMPLEMENT_TYPE_P (Paper_line, "ly:paper-line?");
32 IMPLEMENT_DEFAULT_EQUAL_P (Paper_line);
35 Paper_line::mark_smob (SCM smob)
37 Paper_line *line = (Paper_line*) ly_cdr (smob);
38 return line->stencils_;
42 Paper_line::print_smob (SCM smob, SCM port, scm_print_state*)
44 Paper_line *p = (Paper_line*) ly_cdr (smob);
45 scm_puts ("#<", port);
46 scm_puts (classname (p), port);
47 scm_puts (to_string (p->number_).to_str0 (), port);
49 scm_puts (" t", port);
50 scm_puts (" >", port);
55 Paper_line::dim () const
61 Paper_line::is_title () const
67 Paper_line::penalty () const
73 Paper_line::stencils () const
79 Paper_line::to_stencil () const
82 for (SCM s = stencils_; ly_c_pair_p (s); s = ly_cdr (s))
83 stencil.add_stencil (*unsmob_stencil (ly_car (s)));
84 return stencil.smobbed_copy ();
87 LY_DEFINE (ly_paper_line_height, "ly:paper-line-height",
89 "Return the height of @var{line}.")
91 Paper_line *pl = unsmob_paper_line (line);
92 SCM_ASSERT_TYPE (pl, line, SCM_ARG1, __FUNCTION__, "paper-line");
93 return scm_make_real (pl->dim ()[Y_AXIS]);
96 LY_DEFINE (ly_paper_line_number, "ly:paper-line-number",
98 "Return the number of @var{line}.")
100 Paper_line *pl = unsmob_paper_line (line);
101 SCM_ASSERT_TYPE (pl, line, SCM_ARG1, __FUNCTION__, "paper-line");
102 return scm_int2num (pl->number_);
105 LY_DEFINE (ly_paper_line_break_score, "ly:paper-line-break-score",
107 "Return the score for page break after @var{line}.")
109 Paper_line *pl = unsmob_paper_line (line);
110 SCM_ASSERT_TYPE (pl, line, SCM_ARG1, __FUNCTION__, "paper-line");
111 return scm_int2num (int (pl->penalty ()));