X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fpaper-def.cc;h=aaaa2e610bc3be03867457ab0aee498619197bf7;hb=8aad615ea7bb31f49a0c2afc21eea5ff5de20437;hp=c94fe3e8d9389112f87654ca5b0e68d4d218fb0c;hpb=96c20e0d65d98ac10fb2ed72c14f478bdaa33e81;p=lilypond.git diff --git a/lily/paper-def.cc b/lily/paper-def.cc index c94fe3e8d9..aaaa2e610b 100644 --- a/lily/paper-def.cc +++ b/lily/paper-def.cc @@ -3,17 +3,15 @@ source file of the GNU LilyPond music typesetter - (c) 1997--1998 Han-Wen Nienhuys + (c) 1997--1999 Han-Wen Nienhuys */ #include #include "string.hh" -#include "assoc.hh" #include "misc.hh" #include "paper-def.hh" #include "debug.hh" #include "lookup.hh" -#include "assoc-iter.hh" #include "score-engraver.hh" #include "p-score.hh" #include "identifier.hh" @@ -24,27 +22,37 @@ #include "paper-outputter.hh" #include "paper-stream.hh" + +#define SCMVAR(s) { static SCM sym; \ + if (!sym)\ + sym = scm_protect_object (ly_symbol (#s));\ + return get_realvar (sym); } + + Paper_def::Paper_def () { - lookup_p_assoc_p_ = new Assoc; + lookup_p_tab_p_ = new Hash_table; + lookup_p_tab_p_->hash_func_ = int_hash; } Paper_def::~Paper_def () { - for (Assoc_iter ai(*lookup_p_assoc_p_); ai.ok (); ai++) + for (Hash_table_iter ai(*lookup_p_tab_p_); ai.ok (); ai++) { delete ai.val (); } - delete lookup_p_assoc_p_; + delete lookup_p_tab_p_; } Paper_def::Paper_def (Paper_def const&s) : Music_output_def (s) { - lookup_p_assoc_p_ = new Assoc; - for (Assoc_iter ai(*s.lookup_p_assoc_p_); ai.ok (); ai++) + lookup_p_tab_p_ = new Hash_table; + lookup_p_tab_p_->hash_func_ = int_hash; + + for (Hash_table_iter ai(*s.lookup_p_tab_p_); ai.ok (); ai++) { Lookup * l = new Lookup (*ai.val ()); l->paper_l_ = this; @@ -54,13 +62,19 @@ Paper_def::Paper_def (Paper_def const&s) Real Paper_def::get_var (String s) const +{ + return get_realvar (ly_symbol (s)); +} + +Real +Paper_def::get_realvar (SCM s) const { if (!scope_p_->elem_b (s)) - error (_f ("unknown paper variable: `%s\'", s)); + error (_f ("unknown paper variable: `%s\'", symbol_to_string (s))); Real * p = scope_p_->elem (s)->access_content_Real (false); if (!p) { - error (_ ("not a real variable")); + error (_("not a real variable")); return 0.0; } @@ -85,24 +99,24 @@ Paper_def::line_dimensions_int (int n) const Real Paper_def::beam_thickness_f () const { - return get_var ("beam_thickness"); +SCMVAR(beam_thickness); } Real Paper_def::linewidth_f () const { - return get_var ("linewidth"); +SCMVAR(linewidth); } Real -Paper_def::duration_to_dist (Moment d,Real k) const +Paper_def::length_mom_to_dist (Moment d,Real k) const { return arithmetic_spacing (d,k); } /** - Get the measure wide constant for arithmetic. + Get the measure wide constant for arithmetic spacing. @see John S. Gourlay. ``Spacing a Line of Music,'' Technical Report @@ -122,67 +136,61 @@ Paper_def::arithmetic_spacing (Moment d ,Real k) const return (log_2 (d) + k)* get_var ("arithmetic_multiplier"); } -Real -Paper_def::geometric_spacing (Moment d) const -{ - Real dur_f = (d) ?pow (get_var ("geometric"), log_2 (d)) : 0; - return get_var ("basicspace") + get_var ("unitspace") * dur_f; -} - void Paper_def::set_lookup (int i, Lookup*l) { - if (lookup_p_assoc_p_->elem_b (i)) + if (lookup_p_tab_p_->elem_b (i)) { - delete lookup_p_assoc_p_->elem (i); + delete lookup_p_tab_p_->elem (i); } l ->paper_l_ = this; - (*lookup_p_assoc_p_)[i] = l; + (*lookup_p_tab_p_)[i] = l; } + Real Paper_def::interline_f () const { - return get_var ("interline"); + SCMVAR(interline) } Real Paper_def::rule_thickness () const { - return get_var ("rulethickness"); + SCMVAR(rulethickness); } Real Paper_def::staffline_f () const { - return get_var ("rulethickness"); + SCMVAR(rulethickness) } Real Paper_def::staffheight_f () const { - return get_var ("staffheight"); + SCMVAR(staffheight) } Real Paper_def::interbeam_f (int multiplicity_i) const { if (multiplicity_i <= 3) - return get_var ("interbeam"); + SCMVAR(interbeam) else - return get_var ("interbeam4"); + SCMVAR(interbeam4) } Real Paper_def::internote_f () const { - return get_var ("interline") /2.0 ; + return interline_f () /2.0 ; } Real Paper_def::note_width () const { - return get_var ("notewidth"); +SCMVAR(notewidth) } void @@ -192,10 +200,9 @@ Paper_def::print () const Music_output_def::print (); DOUT << "Paper {"; - for (Assoc_iter ai(*lookup_p_assoc_p_); ai.ok (); ai++) + for (Hash_table_iter ai(*lookup_p_tab_p_); ai.ok (); ai++) { - DOUT << "Lookup: " << ai.key () ; - ai.val ()->print (); + DOUT << "Lookup: " << ai.key () << " = " << ai.val ()->font_name_ << '\n'; } DOUT << "}\n"; @@ -205,10 +212,10 @@ Paper_def::print () const Lookup const * Paper_def::lookup_l (int i) const { - return (*lookup_p_assoc_p_)[i]; + return (*lookup_p_tab_p_)[i]; } -IMPLEMENT_IS_TYPE_B1 (Paper_def, Music_output_def); + int Paper_def::default_count_i_ = 0; @@ -218,49 +225,10 @@ 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) +Paper_def::reset_default_count() { - 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_content_String (false)) - continue; - - String val = *i.val()->access_content_String (false); - 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_content_String (false)); + default_count_i_ = 0; } Paper_outputter* @@ -268,27 +236,27 @@ Paper_def::paper_outputter_p (Paper_stream* os_p, Header* header_l, String origi { Paper_outputter* p = new Paper_outputter (os_p); - output_header (p, header_global_p); -#if 0 // for now; breaks -fscm output p->output_comment (_ ("outputting Score, defined at: ")); p->output_comment (origin_str); -#endif - 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_version(); + if (header_global_p) + p->output_scope (header_global_p, "mudela"); + if (header_l) + p->output_scope (header_l, "mudela"); + if (scope_p_) + p->output_scope (scope_p_, "mudelapaper"); + + if (output_global_ch == String("tex")) + { + *p->outstream_l_ << *scope_p_->elem ("texsetting")->access_content_String (false); + } + + SCM scm = gh_list (ly_symbol ("experimental-on"), SCM_UNDEFINED); p->output_scheme (scm); - - scm = - ly_append (ly_lambda_o (), - ly_list1 (ly_append (ly_func_o ("header-end"), SCM_EOL))); - + scm = gh_list (ly_symbol ("header-end"), SCM_UNDEFINED); p->output_scheme (scm); return p; @@ -302,7 +270,8 @@ Paper_def::paper_stream_p () const if (outname != "-") outname += String (".") + output_global_ch; *mlog << _f ("Paper output to %s...", - outname == "-" ? String ("") : outname ) << endl; + outname == "-" ? String ("") : outname) << endl; + target_str_global_array.push (outname); return new Paper_stream (outname); }