2 paper-def.cc -- implement Paper_def
4 source file of the GNU LilyPond music typesetter
6 (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
13 #include "paper-def.hh"
17 #include "input-translator.hh"
18 #include "engraver-group.hh"
19 #include "assoc-iter.hh"
22 Paper_def::set_var (String s, Real r)
24 real_vars_p_->elem (s) = r;
28 Paper_def::get_var (String s)const
30 if (! real_vars_p_->elt_b (s))
31 error ( "unknown paper variable `" + s+"'");
32 return real_vars_p_->elem (s);
36 Paper_def::linewidth_f() const
38 return get_var ("linewidth");
42 Paper_def::duration_to_dist (Moment d,Real k)const
44 if (get_var("geometric"))
45 return geometric_spacing(d);
46 return arithmetic_spacing(d,k);
51 Get the measure wide constant for arithmetic.
54 John S. Gourlay. ``Spacing a Line of Music,'' Technical Report
55 OSU-CISRC-10/87-TR35, Department of Computer and Information Science,
56 The Ohio State University, 1987.
60 Paper_def::arithmetic_constant(Moment d) const
62 return get_var("arithmetic_basicspace") - log_2(Moment(1,8) <? d);
66 Paper_def::arithmetic_spacing(Moment d ,Real k)const
68 return (log_2(d) + k)* get_var( "arithmetic_multiplier");
72 Paper_def::geometric_spacing(Moment d) const
74 Real dur_f = (d) ?pow (get_var ("geometric"), log_2(d)) : 0;
75 return get_var ("basicspace") + get_var ("unitspace") * dur_f;
78 Paper_def::Paper_def()
82 real_vars_p_ = new Assoc<String,Real>;
85 Paper_def::~Paper_def()
92 Paper_def::Paper_def (Paper_def const&s)
94 itrans_p_ = s.itrans_p_ ? new Input_translator (*s.itrans_p_):0;
95 lookup_p_ = s.lookup_p_? new Lookup (*s.lookup_p_) : 0;
96 lookup_p_->paper_l_ = this;
97 real_vars_p_ = new Assoc<String,Real> (*s.real_vars_p_);
98 outfile_str_ = s.outfile_str_;
102 Paper_def::set (Input_translator * itrans_p)
105 itrans_p_ = itrans_p;
109 Paper_def::set (Lookup*l)
111 assert (l != lookup_p_);
114 lookup_p_->paper_l_ = this;
118 Paper_def::interline_f() const
120 return get_var ("interline");
125 Paper_def::rule_thickness()const
127 return get_var ("rule_thickness");
131 Paper_def::interbeam_f() const
133 return get_var ("interbeam");
136 Paper_def::internote_f() const
138 return interline_f() / 2;
142 Paper_def::note_width()const
144 return get_var ("notewidth");
148 Paper_def::print() const
152 DOUT << "out: " <<outfile_str_;
155 for (Assoc_iter<String,Real> i (*real_vars_p_); i.ok(); i++)
157 DOUT << i.key() << "= " << i.val () << "\n";
164 Paper_def::lookup_l()
171 Paper_def::get_global_translator_p() const
173 return itrans_p_->get_group_engraver_p()->global_l ();