X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fpaper-def.cc;h=698daf4585f39c01089ca15f10203fe7492463ba;hb=027f1aab2ec8fbbc8a20cf421510f8b9a259d6d2;hp=b2602dd355a0e6c8add89ed4a4de5b34b9be14ae;hpb=7c9b553acad88d5cd62461989f0f20652dc04dda;p=lilypond.git diff --git a/lily/paper-def.cc b/lily/paper-def.cc index b2602dd355..698daf4585 100644 --- a/lily/paper-def.cc +++ b/lily/paper-def.cc @@ -1,104 +1,172 @@ /* paper-def.cc -- implement Paper_def - source file of the LilyPond music typesetter + source file of the GNU LilyPond music typesetter - (c) 1997 Han-Wen Nienhuys + (c) 1997--2000 Han-Wen Nienhuys */ #include + +#include "string.hh" #include "misc.hh" #include "paper-def.hh" #include "debug.hh" #include "lookup.hh" -#include "dimen.hh" +#include "main.hh" +#include "scope.hh" +#include "file-results.hh" // urg? header_global_p +#include "paper-stream.hh" +Paper_def::Paper_def () +{ + lookup_alist_ = SCM_EOL; +} -// golden ratio -const Real PHI = (1+sqrt(5))/2; +Paper_def::~Paper_def () +{ +} -// see Roelofs, p. 57 -Real -Paper_def::duration_to_dist(Moment d) +Paper_def::Paper_def (Paper_def const&src) + : Music_output_def (src) { - if (!d) - return 0; - - return whole_width * pow(geometric_, log_2(d)); + SCM n = SCM_EOL; + for (SCM s = src.lookup_alist_; gh_pair_p(s); s = gh_cdr (s)) + { + n = scm_acons (gh_caar(s), gh_cdar (s), n); + } + + lookup_alist_ = n; } + Real -Paper_def::rule_thickness()const +Paper_def::get_var (String s) const { - return 0.4 PT; + return get_realvar (ly_symbol2scm (s.ch_C())); } -Paper_def::Paper_def(Lookup *l) +SCM +Paper_def::get_scmvar (String s) const { - lookup_p_ = l; - linewidth = 15 *CM_TO_PT; // in cm for now - whole_width = 8 * note_width(); - geometric_ = sqrt(2); - outfile = "lelie.out"; + return scope_p_->scm_elem (ly_symbol2scm (s.ch_C())); } -Paper_def::~Paper_def() +Real +Paper_def::get_realvar (SCM s) const { - delete lookup_p_; + if (!scope_p_->elem_b (s)) + { + programming_error ("unknown paper variable: " + ly_symbol2string (s)); + return 0.0; + } + SCM val = scope_p_->scm_elem (s); + if (gh_number_p (val)) + { + return gh_scm2double (val); + } + else + { + programming_error ("not a real variable"); + return 0.0; + } } -Paper_def::Paper_def(Paper_def const&s) + +/* + FIXME. This is broken until we have a generic way of + putting lists inside the \paper block. + */ +Interval +Paper_def::line_dimensions_int (int n) const { - lookup_p_ = new Lookup(*s.lookup_p_); - geometric_ = s.geometric_; - whole_width = s.whole_width; - outfile = s.outfile; - linewidth = s.linewidth; + Real lw = get_var ("linewidth"); + Real ind = n? 0.0:get_var ("indent"); + + return Interval (ind, lw); } void -Paper_def::set(Lookup*l) +Paper_def::set_lookup (int i, SCM l) { - assert(l != lookup_p_); - delete lookup_p_; - lookup_p_ = l; + assert (unsmob_lookup (l)); + lookup_alist_ = scm_assq_set_x(lookup_alist_, gh_int2scm (i), l); } + +/* + junkme. + */ Real -Paper_def::interline() const +Paper_def::interbeam_f (int multiplicity_i) const { - return lookup_p_->ball(4).dim.y.length(); + if (multiplicity_i <= 3) + return get_var ("interbeam"); + else + return get_var ("interbeam4"); } -Real -Paper_def::internote() const + +void +Paper_def::print () const { - return lookup_p_->internote(); +#ifndef NPRINT + Music_output_def::print (); + if (flower_dstream) + gh_display (lookup_alist_); +#endif } -Real -Paper_def::note_width()const + +Lookup const * +Paper_def::lookup_l (int i) const { - return lookup_p_->ball(4).dim.x.length( ); + SCM l = scm_assq (gh_int2scm(i), lookup_alist_); + return l == SCM_BOOL_F ? 0 : unsmob_lookup (gh_cdr (l)); } -Real -Paper_def::standard_height() const + +int Paper_def::default_count_i_ = 0; + +int +Paper_def::get_next_default_count () const { - return 20 PT; + return default_count_i_ ++; } void -Paper_def::print() const +Paper_def::reset_default_count() { -#ifndef NPRINT - mtor << "Paper {width: " << print_dimen(linewidth); - mtor << "whole: " << print_dimen(whole_width); - mtor << "out: " <print(); - mtor << "}\n"; -#endif + default_count_i_ = 0; } -Lookup const * -Paper_def::lookup_l() + + +Paper_stream* +Paper_def::paper_stream_p () const { - return lookup_p_; + String outname = base_output_str (); + + if (outname != "-") + outname += String (".") + output_global_ch; + progress_indication (_f ("paper output to %s...", + outname == "-" ? String ("") : outname)); + + 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; +} + +