]> git.donarmstrong.com Git - lilypond.git/blob - lily/paper-def.cc
release: 0.0.74pre
[lilypond.git] / lily / paper-def.cc
1 /*
2   paper-def.cc -- implement Paper_def
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
7 */
8
9 #include <math.h>
10 #include "string.hh"
11 #include "assoc.hh"
12 #include "misc.hh"
13 #include "paper-def.hh"
14 #include "debug.hh"
15 #include "lookup.hh"
16 #include "dimen.hh"
17 #include "input-translator.hh"
18 #include "engraver-group.hh"
19 #include "assoc-iter.hh"
20
21 void
22 Paper_def::set_var(String s, Real r)
23 {
24    real_vars_p_->elem(s) = r;
25 }
26
27 Real
28 Paper_def::get_var(String s)const
29 {
30     if(! real_vars_p_->elt_b(s))
31         error ( "unknown paper variable `"  + s+"'");
32     return real_vars_p_->elem(s);
33 }
34
35 Real
36 Paper_def::linewidth_f() const
37 {
38     return get_var("linewidth");
39 }
40
41 Real
42 Paper_def::duration_to_dist(Moment d)
43 {
44     if (!d)
45         return 0;
46     
47     return get_var("unitspace")  * pow(get_var("geometric"), log_2(d));
48 }
49
50
51 Paper_def::Paper_def()
52 {
53     itrans_p_ = 0;
54     lookup_p_ = 0;
55     real_vars_p_ = new Assoc<String,Real>;
56     outfile_str_ = "lelie.tex";
57 }
58
59 Paper_def::~Paper_def()
60 {
61     delete itrans_p_;
62     delete real_vars_p_;
63     delete lookup_p_;
64 }
65
66 Paper_def::Paper_def(Paper_def const&s)
67 {
68     itrans_p_ = s.itrans_p_ ? new Input_translator( *s.itrans_p_):0;
69     lookup_p_ = s.lookup_p_? new Lookup(*s.lookup_p_) : 0;
70     lookup_p_->paper_l_ = this;
71     real_vars_p_ = new Assoc<String,Real> (*s.real_vars_p_);
72     outfile_str_ = s.outfile_str_;
73 }
74
75 void
76 Paper_def::set(Input_translator * itrans_p)
77 {
78     delete itrans_p_;
79     itrans_p_  = itrans_p;
80 }
81
82 void
83 Paper_def::set(Lookup*l)
84 {
85     assert(l != lookup_p_);
86     delete lookup_p_;
87     lookup_p_ = l;
88     lookup_p_->paper_l_ = this;
89 }
90
91 Real
92 Paper_def::interline_f() const
93 {
94     return get_var("interline");
95 }
96
97
98 Real
99 Paper_def::rule_thickness()const
100 {
101     return get_var("rule_thickness");
102 }
103
104 Real
105 Paper_def::interbeam_f() const
106 {
107     return get_var("interbeam");
108 }
109 Real
110 Paper_def::internote_f() const
111 {
112     return interline_f() / 2; 
113 }
114
115 Real
116 Paper_def::note_width()const
117 {
118     return get_var("notewidth");
119 }
120
121 void
122 Paper_def::print() const
123 {
124 #ifndef NPRINT
125     mtor << "Paper {";
126     mtor << "out: " <<outfile_str_;
127     lookup_p_->print();
128     itrans_p_->print();
129     for (Assoc_iter<String,Real> i(*real_vars_p_); i.ok(); i++) {
130         mtor << i.key() << "= " << i.val() << "\n";
131     }
132     mtor << "}\n";
133 #endif
134 }
135
136 Lookup const *
137 Paper_def::lookup_l()
138 {
139     assert( lookup_p_ );
140     return lookup_p_;
141 }
142
143 Global_translator*
144 Paper_def::get_global_translator_p() const
145 {
146     return  itrans_p_->get_group_engraver_p()->global_l();
147 }