*/
#include <math.h>
+#include "string.hh"
+#include "assoc.hh"
#include "misc.hh"
#include "paper-def.hh"
#include "debug.hh"
#include "lookup.hh"
#include "dimen.hh"
+#include "input-translator.hh"
+#include "engraver-group.hh"
+#include "assoc-iter.hh"
+void
+Paper_def::set_var(String s, Real r)
+{
+ real_vars_p_->elem(s) = r;
+}
+Real
+Paper_def::get_var(String s)const
+{
+ if(! real_vars_p_->elt_b(s))
+ error ( "unknown paper variable `" + s+"'");
+ return real_vars_p_->elem(s);
+}
-// golden ratio
-const Real PHI = (1+sqrt(5))/2;
+Real
+Paper_def::linewidth_f() const
+{
+ return get_var("linewidth");
+}
-// see Roelofs, p. 57
Real
Paper_def::duration_to_dist(Moment d)
{
if (!d)
return 0;
- return whole_width * pow(geometric_, log_2(d));
+ return get_var("unitspace") * pow(get_var("geometric"), log_2(d));
}
-Real
-Paper_def::rule_thickness()const
-{
- return 0.4 PT;
-}
-Paper_def::Paper_def(Lookup *l)
+Paper_def::Paper_def()
{
- lookup_p_ = l;
- linewidth = 15 *CM_TO_PT; // in cm for now
- whole_width = 8 * note_width();
- geometric_ = sqrt(2);
- outfile = "lelie.tex";
+ itrans_p_ = 0;
+ lookup_p_ = 0;
+ real_vars_p_ = new Assoc<String,Real>;
+ outfile_str_ = "lelie.tex";
}
Paper_def::~Paper_def()
{
+ delete itrans_p_;
+ delete real_vars_p_;
delete lookup_p_;
}
+
Paper_def::Paper_def(Paper_def const&s)
{
- lookup_p_ = new Lookup(*s.lookup_p_);
- geometric_ = s.geometric_;
- whole_width = s.whole_width;
- outfile = s.outfile;
- linewidth = s.linewidth;
+ itrans_p_ = s.itrans_p_ ? new Input_translator( *s.itrans_p_):0;
+ lookup_p_ = s.lookup_p_? new Lookup(*s.lookup_p_) : 0;
+ lookup_p_->paper_l_ = this;
+ real_vars_p_ = new Assoc<String,Real> (*s.real_vars_p_);
+ outfile_str_ = s.outfile_str_;
+}
+
+void
+Paper_def::set(Input_translator * itrans_p)
+{
+ delete itrans_p_;
+ itrans_p_ = itrans_p;
}
void
assert(l != lookup_p_);
delete lookup_p_;
lookup_p_ = l;
+ lookup_p_->paper_l_ = this;
}
Real
Paper_def::interline_f() const
{
- return lookup_p_->ball(4).dim.y.length();
+ return get_var("interline");
}
+
Real
-Paper_def::internote_f() const
+Paper_def::rule_thickness()const
{
- return lookup_p_->internote_f();
+ return get_var("rule_thickness");
}
+
Real
-Paper_def::note_width()const
+Paper_def::interbeam_f() const
{
- return lookup_p_->ball(4).dim.x.length( );
+ return get_var("interbeam");
}
Real
-Paper_def::standard_height() const
+Paper_def::internote_f() const
{
- return 20 PT;
+ return interline_f() / 2;
+}
+
+Real
+Paper_def::note_width()const
+{
+ return get_var("notewidth");
}
void
Paper_def::print() const
{
#ifndef NPRINT
- mtor << "Paper {width: " << print_dimen(linewidth);
- mtor << "whole: " << print_dimen(whole_width);
- mtor << "out: " <<outfile;
+ mtor << "Paper {";
+ mtor << "out: " <<outfile_str_;
lookup_p_->print();
+ itrans_p_->print();
+ for (Assoc_iter<String,Real> i(*real_vars_p_); i.ok(); i++) {
+ mtor << i.key() << "= " << i.val() << "\n";
+ }
mtor << "}\n";
#endif
}
+
Lookup const *
Paper_def::lookup_l()
{
+ assert( lookup_p_ );
return lookup_p_;
}
+
+Global_translator*
+Paper_def::get_global_translator_p() const
+{
+ return itrans_p_->get_group_engraver_p()->global_l();
+}