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, bool is_title)
23 Paper_line::~Paper_line ()
27 IMPLEMENT_SMOBS (Paper_line);
28 IMPLEMENT_TYPE_P (Paper_line, "ly:paper-line?");
29 IMPLEMENT_DEFAULT_EQUAL_P (Paper_line);
32 Paper_line::mark_smob (SCM s)
34 Paper_line *line = (Paper_line*) ly_cdr (s);
35 return line->stencils_;
39 Paper_line::print_smob (SCM s, SCM port, scm_print_state*)
41 scm_puts ("#<Paper_line ", port);
42 Paper_line *line = (Paper_line*) ly_cdr (s);
43 scm_puts (to_string (line->number_).to_str0 (), port);
44 if (line->is_title ())
45 scm_puts (" t", port);
46 scm_puts (" >", port);
51 Paper_line::dim () const
57 Paper_line::is_title () const
63 Paper_line::stencils () const
68 LY_DEFINE (ly_paper_line_height, "ly:paper-line-height",
70 "Return the height of @var{line}.")
72 Paper_line *pl = unsmob_paper_line (line);
73 SCM_ASSERT_TYPE (pl, line, SCM_ARG1, __FUNCTION__, "paper-line");
74 return gh_double2scm (pl->dim ()[Y_AXIS]);
77 LY_DEFINE (ly_paper_line_number, "ly:paper-line-number",
79 "Return the number of @var{line}.")
81 Paper_line *pl = unsmob_paper_line (line);
82 SCM_ASSERT_TYPE (pl, line, SCM_ARG1, __FUNCTION__, "paper-line");
83 return gh_int2scm (pl->number_);
86 LY_DEFINE (ly_paper_line_break_score, "ly:paper-line-break-score",
88 "Return the score for breaking after @var{line}.")
90 Paper_line *pl = unsmob_paper_line (line);
91 SCM_ASSERT_TYPE (pl, line, SCM_ARG1, __FUNCTION__, "paper-line");
92 return gh_int2scm (int (pl->is_title ()) * TITLE_PENALTY);