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"
10 #include "ly-smobs.icc"
11 #include "string.hh" // to_string
13 #define TITLE_PENALTY -1
15 Paper_line::Paper_line (Offset o, SCM stencils, int penalty, bool is_title)
24 Paper_line::~Paper_line ()
28 IMPLEMENT_SMOBS (Paper_line);
29 IMPLEMENT_TYPE_P (Paper_line, "ly:paper-line?");
30 IMPLEMENT_DEFAULT_EQUAL_P (Paper_line);
33 Paper_line::mark_smob (SCM s)
35 Paper_line *line = (Paper_line*) ly_cdr (s);
36 return line->stencils_;
40 Paper_line::print_smob (SCM s, SCM port, scm_print_state*)
42 scm_puts ("#<Paper_line ", port);
43 Paper_line *line = (Paper_line*) ly_cdr (s);
44 scm_puts (to_string (line->number_).to_str0 (), port);
45 if (line->is_title ())
46 scm_puts (" t", port);
47 scm_puts (" >", port);
52 Paper_line::dim () const
58 Paper_line::is_title () const
64 Paper_line::penalty () const
70 Paper_line::stencils () const
75 LY_DEFINE (ly_paper_line_height, "ly:paper-line-height",
77 "Return the height of @var{line}.")
79 Paper_line *pl = unsmob_paper_line (line);
80 SCM_ASSERT_TYPE (pl, line, SCM_ARG1, __FUNCTION__, "paper-line");
81 return scm_make_real (pl->dim ()[Y_AXIS]);
84 LY_DEFINE (ly_paper_line_number, "ly:paper-line-number",
86 "Return the number of @var{line}.")
88 Paper_line *pl = unsmob_paper_line (line);
89 SCM_ASSERT_TYPE (pl, line, SCM_ARG1, __FUNCTION__, "paper-line");
90 return scm_int2num (pl->number_);
93 LY_DEFINE (ly_paper_line_break_score, "ly:paper-line-break-score",
95 "Return the score for page break after @var{line}.")
97 Paper_line *pl = unsmob_paper_line (line);
98 SCM_ASSERT_TYPE (pl, line, SCM_ARG1, __FUNCTION__, "paper-line");
99 return scm_int2num (int (pl->penalty ()));