From 84303e64accad700bb8723a73e2f695ef3644240 Mon Sep 17 00:00:00 2001 From: fred Date: Sun, 24 Mar 2002 19:31:27 +0000 Subject: [PATCH] lilypond-0.0.31 --- hdr/inputstaff.hh | 2 +- hdr/lookup.hh | 1 + hdr/paperdef.hh | 54 +++++++++++++++++++++++++++ src/bar.cc | 2 +- src/beam.cc | 2 +- src/break.cc | 2 +- src/calcideal.cc | 6 +-- src/clefitem.cc | 2 +- src/complexprint.cc | 2 +- src/headreg.cc | 2 +- src/inputscore.cc | 2 +- src/keyitem.cc | 2 +- src/localkeyitem.cc | 2 +- src/lyricitem.cc | 2 +- src/meter.cc | 2 +- src/paperdef.cc | 89 +++++++++++++++++++++++++++++++++++++++++++++ src/pscore.cc | 2 +- src/rest.cc | 2 +- src/scoreline.cc | 2 +- src/script.cc | 2 +- src/slur.cc | 2 +- src/staffline.cc | 2 +- src/staffsym.cc | 2 +- src/stem.cc | 2 +- src/textdef.cc | 2 +- src/textitem.cc | 2 +- src/textspanner.cc | 2 +- 27 files changed, 170 insertions(+), 26 deletions(-) create mode 100644 hdr/paperdef.hh create mode 100644 src/paperdef.cc diff --git a/hdr/inputstaff.hh b/hdr/inputstaff.hh index c1252ad01d..cc9f823885 100644 --- a/hdr/inputstaff.hh +++ b/hdr/inputstaff.hh @@ -14,7 +14,7 @@ struct Input_staff { - /// defined where? + const char * defined_ch_c_l_; String type; IPointerList commands_; diff --git a/hdr/lookup.hh b/hdr/lookup.hh index 540bf664f7..28bd8677ea 100644 --- a/hdr/lookup.hh +++ b/hdr/lookup.hh @@ -8,6 +8,7 @@ #include "fproto.hh" #include "scalar.hh" +/// intuitive interface to symbol table struct Lookup { Symtables *symtables_; String texsetting; diff --git a/hdr/paperdef.hh b/hdr/paperdef.hh new file mode 100644 index 0000000000..03abf6abdc --- /dev/null +++ b/hdr/paperdef.hh @@ -0,0 +1,54 @@ +/* + paperdef.hh -- declare + + source file of the LilyPond music typesetter + + (c) 1997 Han-Wen Nienhuys +*/ + + +#ifndef PAPERDEF_HH +#define PAPERDEF_HH +#include "proto.hh" +#include "real.hh" +#include "string.hh" +#include "moment.hh" + + +/** symbols, dimensions and constants + + This struct takes care of all kinds of symbols, dimensions and + constants. Most of them are related to the point-size of the fonts, + so therefore, the lookup table for symbols is also in here. + + see TODO + */ +struct Paperdef { + Lookup *lookup_p_; + String outfile; + + Real linewidth; + + /// how much space does a whole note take (ideally?) + Real whole_width; + + /// ideal = geometric_ ^ log2(duration) + Real geometric_; + + /* *************** */ + void reinit(); + Paperdef(Lookup*); + void set(Lookup*); + ~Paperdef(); + Paperdef(Paperdef const&); + Real interline()const; + Real internote()const; + Real rule_thickness()const; + Real standard_height()const; + Real note_width() const; + void print() const; + Real duration_to_dist(Moment); +}; + +#endif // PAPERDEF_HH + diff --git a/src/bar.cc b/src/bar.cc index 4b3a0716eb..4f26d25310 100644 --- a/src/bar.cc +++ b/src/bar.cc @@ -1,7 +1,7 @@ #include "bar.hh" #include "string.hh" #include "molecule.hh" -#include "paper.hh" +#include "paperdef.hh" #include "lookup.hh" NAME_METHOD(Bar); diff --git a/src/beam.cc b/src/beam.cc index f31a15d017..44d51e0af9 100644 --- a/src/beam.cc +++ b/src/beam.cc @@ -9,7 +9,7 @@ #include "leastsquares.hh" #include "pcol.hh" #include "stem.hh" -#include "paper.hh" +#include "paperdef.hh" #include "lookup.hh" #include "grouping.hh" diff --git a/src/break.cc b/src/break.cc index 70ff864e9d..576bf4c67a 100644 --- a/src/break.cc +++ b/src/break.cc @@ -2,7 +2,7 @@ do calculations for breaking problem */ #include "break.hh" -#include "paper.hh" +#include "paperdef.hh" #include "linespace.hh" #include "debug.hh" #include "scoreline.hh" diff --git a/src/calcideal.cc b/src/calcideal.cc index 7ec06433e9..79db657588 100644 --- a/src/calcideal.cc +++ b/src/calcideal.cc @@ -1,9 +1,8 @@ #include "idealspacing.hh" #include "score.hh" #include "pscore.hh" -#include "paper.hh" +#include "paperdef.hh" #include "sccol.hh" -//#include "debug.hh" #include "dimen.hh" @@ -31,7 +30,8 @@ Score::calc_idealspacing() while (j->when() < d + i->when()) j++; - assert( j->when()== d+i->when()); + Moment delta_desired = j->when() - (d+i->when()); + dist += paper_p_->duration_to_dist(delta_desired); pscore_p_->connect(i->pcol_l_, j->pcol_l_, dist, strength); } diff --git a/src/clefitem.cc b/src/clefitem.cc index 0e0054acd3..30703026da 100644 --- a/src/clefitem.cc +++ b/src/clefitem.cc @@ -1,7 +1,7 @@ #include "clefitem.hh" #include "string.hh" #include "molecule.hh" -#include "paper.hh" +#include "paperdef.hh" #include "lookup.hh" #include "clef.hh" diff --git a/src/complexprint.cc b/src/complexprint.cc index ec38b575e1..6abe7659d2 100644 --- a/src/complexprint.cc +++ b/src/complexprint.cc @@ -2,7 +2,7 @@ #include "request.hh" #include "pscore.hh" -#include "paper.hh" +#include "paperdef.hh" #include "complexstaff.hh" #include "sccol.hh" #include "debug.hh" diff --git a/src/headreg.cc b/src/headreg.cc index ecb24074fd..94ad2291e1 100644 --- a/src/headreg.cc +++ b/src/headreg.cc @@ -6,7 +6,7 @@ #include "rest.hh" #include "notehead.hh" #include "headreg.hh" -#include "paper.hh" +#include "paperdef.hh" #include "complexwalker.hh" diff --git a/src/inputscore.cc b/src/inputscore.cc index cb9086b1a3..764c8e8509 100644 --- a/src/inputscore.cc +++ b/src/inputscore.cc @@ -3,7 +3,7 @@ #include "inputscore.hh" #include "inputstaff.hh" #include "score.hh" -#include "paper.hh" +#include "paperdef.hh" #include "staff.hh" void diff --git a/src/keyitem.cc b/src/keyitem.cc index 85bf74c620..22cf0e6d01 100644 --- a/src/keyitem.cc +++ b/src/keyitem.cc @@ -2,7 +2,7 @@ #include "key.hh" #include "debug.hh" #include "molecule.hh" -#include "paper.hh" +#include "paperdef.hh" #include "lookup.hh" #include "clef.hh" diff --git a/src/localkeyitem.cc b/src/localkeyitem.cc index 6fa9b1dfe3..fb288b76a7 100644 --- a/src/localkeyitem.cc +++ b/src/localkeyitem.cc @@ -2,7 +2,7 @@ #include "molecule.hh" #include "scalar.hh" #include "lookup.hh" -#include "paper.hh" +#include "paperdef.hh" #include "request.hh" #include "notehead.hh" diff --git a/src/lyricitem.cc b/src/lyricitem.cc index 81b61552c5..5b290d3634 100644 --- a/src/lyricitem.cc +++ b/src/lyricitem.cc @@ -1,5 +1,5 @@ #include "request.hh" -#include "paper.hh" +#include "paperdef.hh" #include "lyricitem.hh" #include "stem.hh" #include "molecule.hh" diff --git a/src/meter.cc b/src/meter.cc index bd3f763c00..8c4af23818 100644 --- a/src/meter.cc +++ b/src/meter.cc @@ -1,7 +1,7 @@ #include "scalar.hh" #include "molecule.hh" #include "meter.hh" -#include "paper.hh" +#include "paperdef.hh" #include "lookup.hh" NAME_METHOD(Meter); Meter::Meter(Arraya) diff --git a/src/paperdef.cc b/src/paperdef.cc new file mode 100644 index 0000000000..21cc42f317 --- /dev/null +++ b/src/paperdef.cc @@ -0,0 +1,89 @@ +#include +#include "misc.hh" +#include "paperdef.hh" +#include "debug.hh" +#include "lookup.hh" +#include "dimen.hh" + + + +// golden ratio +const Real PHI = (1+sqrt(5))/2; + +// see Roelofs, p. 57 +Real +Paperdef::duration_to_dist(Moment d) +{ + if (!d) + return 0; + + return whole_width * pow(geometric_, log_2(d)); +} + +Real +Paperdef::rule_thickness()const +{ + return 0.4 PT; +} + +Paperdef::Paperdef(Lookup *l) +{ + lookup_p_ = l; + linewidth = 15 *CM_TO_PT; // in cm for now + whole_width = 8 * note_width(); + geometric_ = sqrt(2); +} + +Paperdef::~Paperdef() +{ + delete lookup_p_; +} +Paperdef::Paperdef(Paperdef const&s) +{ + lookup_p_ = new Lookup(*s.lookup_p_); + geometric_ = s.geometric_; + whole_width = s.whole_width; + outfile = s.outfile; + linewidth = s.linewidth; +} + +void +Paperdef::set(Lookup*l) +{ + assert(l != lookup_p_); + delete lookup_p_; + lookup_p_ = l; +} + +Real +Paperdef::interline() const +{ + return lookup_p_->ball(4).dim.y.length(); +} + +Real +Paperdef::internote() const +{ + return lookup_p_->internote(); +} +Real +Paperdef::note_width()const +{ + return lookup_p_->ball(4).dim.x.length( ); +} +Real +Paperdef::standard_height() const +{ + return 20 PT; +} + +void +Paperdef::print() const +{ +#ifndef NPRINT + mtor << "Paper {width: " << print_dimen(linewidth); + mtor << "whole: " << print_dimen(whole_width); + mtor << "out: " <