X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fpaper-def.cc;h=5ce8b04cd9da58278e23d4ddeca6d13df577af04;hb=9efbad2d9487a05b04423e7e9f062968e8f8eaf4;hp=20e412dde81f1da2260c1932079e58540b9f4da7;hpb=69b9cead5afe7164b9053d26eba582fec3825ef8;p=lilypond.git diff --git a/lily/paper-def.cc b/lily/paper-def.cc index 20e412dde8..5ce8b04cd9 100644 --- a/lily/paper-def.cc +++ b/lily/paper-def.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 1997--1998 Han-Wen Nienhuys + (c) 1997--1998 Han-Wen Nienhuys */ #include @@ -13,51 +13,64 @@ #include "paper-def.hh" #include "debug.hh" #include "lookup.hh" -#include "dimen.hh" #include "assoc-iter.hh" -#include "score-grav.hh" +#include "score-engraver.hh" #include "p-score.hh" +#include "identifier.hh" #include "main.hh" +#include "scope.hh" +#include "dictionary-iter.hh" +#include "file-results.hh" // urg? header_global_p +#include "paper-outputter.hh" +#include "paper-stream.hh" - -Paper_def::Paper_def() +Paper_def::Paper_def () { - lookup_p_ = 0; - real_vars_p_ = new Dictionary; + lookup_p_assoc_p_ = new Assoc; } -Paper_def::~Paper_def() + +Paper_def::~Paper_def () { - delete real_vars_p_; - delete lookup_p_; + for (Assoc_iter ai(*lookup_p_assoc_p_); ai.ok (); ai++) + { + delete ai.val (); + } + + delete lookup_p_assoc_p_; } Paper_def::Paper_def (Paper_def const&s) : Music_output_def (s) { - lookup_p_ = s.lookup_p_? new Lookup (*s.lookup_p_) : 0; - lookup_p_->paper_l_ = this; - real_vars_p_ = new Dictionary (*s.real_vars_p_); -} - -void -Paper_def::set_var (String s, Real r) -{ - real_vars_p_->elem (s) = r; + lookup_p_assoc_p_ = new Assoc; + for (Assoc_iter ai(*s.lookup_p_assoc_p_); ai.ok (); ai++) + { + Lookup * l = new Lookup (*ai.val ()); + l->paper_l_ = this; + set_lookup (ai.key(), l); + } } 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); + if (!scope_p_->elem_b (s)) + error (_f ("unknown paper variable: `%s\'", s)); + Real * p = scope_p_->elem (s)->access_Real (false); + if (!p) + { + error (_ ("not a real variable")); + return 0.0; + } + + return *p; } Interval Paper_def::line_dimensions_int (int n) const { - if (!shape_int_a_.size ()) + if (!shape_int_a_.size ()) if (n) return Interval (0, linewidth_f ()); else @@ -69,6 +82,12 @@ Paper_def::line_dimensions_int (int n) const return shape_int_a_[n]; } +Real +Paper_def::beam_thickness_f () const +{ + return get_var ("beam_thickness"); +} + Real Paper_def::linewidth_f () const { @@ -78,9 +97,7 @@ Paper_def::linewidth_f () const Real Paper_def::duration_to_dist (Moment d,Real k) const { - if (get_var("geometric")) - return geometric_spacing(d); - return arithmetic_spacing(d,k); + return arithmetic_spacing (d,k); } @@ -94,96 +111,104 @@ Paper_def::duration_to_dist (Moment d,Real k) const */ Real -Paper_def::arithmetic_constant(Moment d) const +Paper_def::arithmetic_constant (Moment d) const { - return get_var("arithmetic_basicspace") - log_2(Moment(1,8) paper_l_ = this; + if (lookup_p_assoc_p_->elem_b (i)) + { + delete lookup_p_assoc_p_->elem (i); + } + l ->paper_l_ = this; + (*lookup_p_assoc_p_)[i] = l; } Real -Paper_def::interline_f() const +Paper_def::interline_f () const { return get_var ("interline"); } +Real +Paper_def::rule_thickness () const +{ + return get_var ("rulethickness"); +} Real -Paper_def::rule_thickness() const +Paper_def::staffline_f () const { return get_var ("rulethickness"); } Real -Paper_def::interbeam_f() const +Paper_def::staffheight_f () const +{ + return get_var ("staffheight"); +} + +Real +Paper_def::interbeam_f (int multiplicity_i) const { - return get_var ("interbeam"); + if (multiplicity_i <= 3) + return get_var ("interbeam"); + else + return get_var ("interbeam4"); } + Real -Paper_def::internote_f() const +Paper_def::internote_f () const { - return interline_f() / 2; + return get_var ("interline") /2.0 ; } Real -Paper_def::note_width() const +Paper_def::note_width () const { return get_var ("notewidth"); } void -Paper_def::print() const +Paper_def::print () const { #ifndef NPRINT Music_output_def::print (); DOUT << "Paper {"; - lookup_p_->print(); - for (Assoc_iter i (*real_vars_p_); i.ok(); i++) + + for (Assoc_iter ai(*lookup_p_assoc_p_); ai.ok (); ai++) { - DOUT << i.key() << "= " << i.val () << "\n"; + DOUT << "Lookup: " << ai.key () ; + ai.val ()->print (); } + DOUT << "}\n"; #endif } Lookup const * -Paper_def::lookup_l() +Paper_def::lookup_l (int i) const { - assert (lookup_p_); - return lookup_p_; + return (*lookup_p_assoc_p_)[i]; } -IMPLEMENT_IS_TYPE_B1(Paper_def, Music_output_def); - -String -Paper_def::TeX_output_settings_str () const -{ - String s("\n "); - for (Assoc_iter i (*real_vars_p_); i.ok(); i++) - s += String ("\\def\\mudelapaper") + i.key () + "{" + i.val () + "}\n"; - s += lookup_p_->texsetting + "%(Tex id)\n"; - return s; -} +IMPLEMENT_IS_TYPE_B1 (Paper_def, Music_output_def); int Paper_def::default_count_i_ = 0; @@ -192,3 +217,106 @@ Paper_def::get_next_default_count () const { return default_count_i_ ++; } + +//urg +extern char const* lily_version_number_sz (); + +void +output_def (Paper_outputter* p, String key, String val) +{ + SCM args_scm = + gh_cons (gh_str02scm (key.ch_l ()), gh_cons (gh_str02scm (val.ch_l ()), SCM_EOL)); + SCM scm = + ly_append (ly_lambda_o (), + ly_list1 (ly_append (ly_func_o ("lily-def"), args_scm))); + p->output_scheme (scm); +} + +void +output_header (Paper_outputter* p, Scope *head) +{ + if (!head) + return; + + String id_str = "Lily was here"; + if (no_timestamps_global_b) + id_str += "."; + else + id_str += String (", ") + lily_version_number_sz (); + output_def (p, "lily_id_string", id_str); + + for (Dictionary_iter i (*head); i.ok (); i++) + { + if (!i.val ()->access_String_identifier ()) + continue; + + String val = *i.val()->access_String_identifier ()->data_p_; + output_def (p, i.key (), val); + } +} + +void +Paper_def::output_settings (Paper_outputter* p) const +{ + for (Dictionary_iter i (*scope_p_); i.ok (); i++) + output_def (p, String ("mudelapaper") + i.key (), i.val ()->str ()); + p->output_string (*scope_p_->elem (String (output_global_ch) + "setting")->access_String ()); +} + +Paper_outputter* +Paper_def::paper_outputter_p (Paper_stream* os_p, Header* header_l, String origin_str) const +{ + Paper_outputter* p = new Paper_outputter (os_p); + + output_header (p, header_global_p); + p->output_comment (_ ("outputting Score, defined at: ")); + p->output_comment (origin_str); + + output_header (p, header_l); + + output_settings (p); + + SCM scm = + ly_append (ly_lambda_o (), + ly_list1 (ly_append (ly_func_o ("experimental-on"), SCM_EOL))); + + p->output_scheme (scm); + + scm = + ly_append (ly_lambda_o (), + ly_list1 (ly_append (ly_func_o ("header-end"), SCM_EOL))); + + p->output_scheme (scm); + + return p; +} + +Paper_stream* +Paper_def::paper_stream_p () const +{ + String outname = base_output_str (); + + if (outname != "-") + outname += String (".") + output_global_ch; + *mlog << _f ("Paper output to %s...", + outname == "-" ? String ("") : outname ) << endl; + target_str_global_array.push (outname); + return new Paper_stream (outname); +} + + +String +Paper_def::base_output_str () const +{ + String str = get_default_output (); + + if (str.empty_b ()) + { + str = default_outname_base_global; + int def = get_next_default_count (); + if (def) + str += "-" + to_str (def); + } + return str; +} +