From: fred <fred> Date: Tue, 26 Mar 2002 23:23:13 +0000 (+0000) Subject: lilypond-1.3.61 X-Git-Tag: release/1.5.59~1567 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=3714de5baac3306fa80411921f129da150a51b12;p=lilypond.git lilypond-1.3.61 --- diff --git a/CHANGES b/CHANGES index e721f26d8c..652041d578 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,25 @@ +1.3.60.jcn1 +=========== + +* Webpage hacking + +1.3.60.hwn1 +=========== + +* Junk int_identifier, real_identifier. Merged Midi_def_identifier and +Paper_def_identifier. + +* Fixed bug with spanning barlines in combination with Hara-Kiri staffs. + +* Cleaned up Text_item, Hyphen_spanner, Lyric_extender and +Sustain_pedal and reduced them to an Score_element interface (they are +no longer Score_element derived types). + +* Some instances of brew_molecule routines have moved out of +Score_element, and are now called scheme_molecule. + +* Moved lots of parameters from ly/params.ly to ly/engraver.ly + 1.3.59.hwn1 =========== diff --git a/Documentation/footer.html.in b/Documentation/footer.html.in index 1930f851af..bcae009876 100644 --- a/Documentation/footer.html.in +++ b/Documentation/footer.html.in @@ -1,3 +1,10 @@ + +<! shamefully inspired by Franc,ois Pinard's TP pages > + + </td> + </tr> +</table> + <!-- if this file ./Documentation/footer.html.in is present, it is included diff --git a/Documentation/header.html.in b/Documentation/header.html.in new file mode 100644 index 0000000000..e96b3aaf29 --- /dev/null +++ b/Documentation/header.html.in @@ -0,0 +1,26 @@ + +<! your header here > +<! shamefully inspired by Franc,ois Pinard's TP pages > + +<! ur* can't we generate this with @table from a .texi? > + +<bgcolor="grey"> +<table cellpadding=5 width="100%"> + <tr> + <td align=left valign=top width="15%" bgcolor="grey"> + <table align=left> + <tr><td bgcolor="cyan"><b>General info</b></td></tr> + <tr><td><font size=-1> + <a href="http://www.lilypond.org"><b>Entry page</b></a><br> + <a href="http://appel.dyndns.org/lilypond"><b>Hacking</b></a><br> + </td></tr> + <tr><td bgcolor="cyan"><b>Download Source</b></td></tr> + <tr><td><font size=-1> + <a href="ftp://ftp.gnu.org/pub/gnu/lilypond"><b>Stable</b></a><br> + <a href="ftp://cs.uu.nl/pub/gnu/LilyPond/development"><b>Development</b></a><br> + </td></tr> + </table> + <! /tr > + <td align=left valign=top width="90%"> + + diff --git a/Documentation/regression-test.tely b/Documentation/regression-test.tely index 83848bfbdf..661be6f850 100644 --- a/Documentation/regression-test.tely +++ b/Documentation/regression-test.tely @@ -328,6 +328,13 @@ two measures all have the same distance from each other: @mudelafile{breathing-sign.ly} +Hara kiri staffs kill themselves if they are empty. This example really +contains two staffs, but the second contains only spaces, and is +therefore removed. + +@mudelafile{hara-kiri-short.ly} + + Fonts are available in a default set of sizes: 11, 13, 16, 20, 23 and 26pt staffheight. Sizes of the text fonts and symbol fonts are made to match the staff dimensions. diff --git a/Documentation/topdocs/index.tely b/Documentation/topdocs/index.tely index 86cd87f159..cd29b6442a 100644 --- a/Documentation/topdocs/index.tely +++ b/Documentation/topdocs/index.tely @@ -46,7 +46,7 @@ this: @quotation @mudela[fragment,verbatim] - \relative c'' { \key es; r8 [c16 b] [c8 g] [as c16 b] [c8 d] | g,4 } + \relative c'' { \key c \minor; r8 [c16 b] [c8 g] [as c16 b] [c8 d] | g,4 } @end mudela @end quotation @@ -65,21 +65,18 @@ almost no restrictions. LilyPond is part of the @uref{http://www.gnu.org/,GNU Project}. The version numbers are in Linux-kernel style: even numbered versions -are `stable'. The webpages for the stable version (1.2) reside at GNU, -here: @uref{http://www.gnu.org/software/lilypond}. Big enhancements go -into the latest odd numbered version (1.3), whose webpages are on - @uref{http://www.cs.uu.nl/~hanwen/lilypond/,Han-Wen's site}. +are `stable'. The webpages for the stable version (1.2) reside +@uref{http://www.gnu.org/software/lilypond, on the GNU servers}. Big +enhancements go into the latest odd numbered version (1.3), whose +webpages are on @uref{http://www.cs.uu.nl/~hanwen/lilypond/,Han-Wen's +site}. Information on the latest and greatest features can be found in +the @uref{Documentation/out-www/CHANGES.txt, Change Log}. If want more information, you can browse the @uref{Documentation/user/out-www/lilypond.html, manual} or other @uref{Documentation/out-www/index.html, documentation}. -@unnumberedsec News - -For the latest and greatest features, check out the -@uref{Documentation/out-www/CHANGES.txt, Change Log}. - @html <a name="music"> @@ -112,12 +109,14 @@ Lattermann also put some works If you want to compile LilyPond from source, download here: @itemize @bullet @item Download stable releases at -@uref{ftp://ftp.gnu.org/gnu/lilypond/} -@item Download development releases at -@uref{ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/development/} -@item Canadian mirror @uref{http://sca.uwaterloo.ca/lilypond/} and @uref{ftp://sca.uwaterloo.ca/pub/} -@item Another site in Europe -@uref{ftp://ftp.lilypond.org/pub/LilyPond/} +@uref{ftp://ftp.gnu.org/gnu/lilypond/,GNU} +@item Download development releases from +@uref{ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/development/,the source} +@item @uref{http://sca.uwaterloo.ca/lilypond/, by http (Canadian +mirror)} and +@uref{ftp://sca.uwaterloo.ca/pub/, ftp (Canadian mirror)} +@item +@uref{ftp://ftp.lilypond.org/pub/LilyPond/,mirror (Europe)} @end itemize Installing and compiling requires many additional packages, which are @@ -126,10 +125,12 @@ installation instructions}. Binaries are available, but are not updated for every version released. @itemize @bullet -@item RedHat-i386 and Linuxppc RPMs: -@uref{ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/RedHat/RPMS/} -@item Debian binary @uref{ftp://ftp.debian.org/pub/debian/dists/unstable/main/binary-i386/tex} -@item Windows NT: @uref{http://home.austin.rr.com/jbr/jeff/lilypond/} +@item +@uref{ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/RedHat/RPMS/,RedHat-i386 and Linuxppc RPMs:} +@item +@uref{ftp://ftp.debian.org/pub/debian/dists/unstable/main/binary-i386/tex, + Debian binary} +@item @uref{http://home.austin.rr.com/jbr/jeff/lilypond/,Windows NT} @end itemize @@ -143,31 +144,27 @@ If you have questions, do write to the mailing lists! Frequently Asked Questions} first.) -@table @samp -@item info-gnu-music@@gnu.org +@itemize @bullet +@item @samp{info-gnu-music@@gnu.org} (@uref{http://www.mail-archive.com/info-gnu-music@@gnu.org,archive}) is a moderated list for information on the GNU Music project, to subscribe: send mail with subject "subscribe" to info-gnu-music-request@@gnu.org. - This list is moderated; ask @email{drl@@gnu.org, David R. Linn} or @email{hanwen@@cs.uu.nl, Han-Wen} to send announcements for this list. - This list is archived at - @uref{http://www.mail-archive.com/info-gnu-music@@gnu.org} -@item help-gnu-music@@gnu.org +@item @samp{help-gnu-music@@gnu.org} (@uref{http://www.mail-archive.com/help-gnu-music@@gnu.org,archive}). For help with LilyPond music project. To subscribe: send mail with subject "subscribe" to - @email{help-gnu-music-request@@gnu.org} The archive is at - @uref{http://www.mail-archive.com/help-gnu-music@@gnu.org}. + @email{help-gnu-music-request@@gnu.org} -@item bug-gnu-music@@gnu.org +@item @samp{bug-gnu-music@@gnu.org} (@uref{http://www.mail-archive.com/bug-gnu-music@@gnu.org,archive}) If you have bugreports, you should send them to this list. If you want to know about bugs, subscribe: send mail with subject "subscribe" -to @email{bug-gnu-music-request@@gnu.org}. The archive is at -@uref{http://www.mail-archive.com/bug-gnu-music@@gnu.org} +to @email{bug-gnu-music-request@@gnu.org}. + Please include in your bugreport the version of LilyPond that you experience the problem with, a description of your system and sample @@ -175,20 +172,20 @@ input to reproduce the problem. Do not send output files over the list, they tend to be very big and don't help with describing the problem. -@item gnu-music-discuss@@gnu.org, +@item @samp{gnu-music-discuss@@gnu.org} (@uref{http://www.mail-archive.com/gnu-music-discuss@@gnu.org,archive}) For discussions concerning LilyPond, to subscribe: send mail with subject "subscribe" to - @email{gnu-music-discuss-request@@gnu.org} - The archive is at - @uref{http://www.mail-archive.com/gnu-music-discuss@@gnu.org} -@end table + @email{gnu-music-discuss-request@@gnu.org}. + + +@end itemize If you want to unsubscribe use the same procedure as subscribing, but substitute @code{unsubscribe} where you would put @code{subscribe}. @unnumberedsubsec Webmaster's Disclaimer -These pages were entirely created from a @strong{development snapshots} +These pages were entirely created from a @strong{development snapshot} of the LilyPond package. The version of this webpage is printed at the bottom. diff --git a/input/test/hara-kiri-short.ly b/input/test/hara-kiri-short.ly new file mode 100644 index 0000000000..52b24f0503 --- /dev/null +++ b/input/test/hara-kiri-short.ly @@ -0,0 +1,33 @@ + +\version "1.3.59"; +zager = \context Staff = zager \notes \relative c'' { + \clef treble; + c1 +} + +zoger = \context Staff = zoger \notes \relative c'' { + \clef treble; + \skip 1* 1; +} + +zagers = \context GrandStaff < + \zager + \zoger +> + +\score{ + < + \context StaffGroup = zagers < + \zagers + > + > + \paper{ + linewidth = 80.0\mm; + + \translator { \HaraKiriStaffContext } +%uh? + + } +} + + diff --git a/input/trip.ly b/input/trip.ly index 5cccdb146d..70ff8a0297 100644 --- a/input/trip.ly +++ b/input/trip.ly @@ -19,8 +19,9 @@ TODO: %} +\version "1.3.59"; praeludiumRight = \notes { - \key e; + \key e \major; \clef violin; % 13 -- how to type -- where to split -- this more neatly? @@ -46,7 +47,7 @@ praeludiumRight = \notes { } praeludiumLeft = \notes \relative c { - \key e; + \key e \major; \clef bass; % 13 @@ -86,7 +87,7 @@ praeludiumLeft = \notes \relative c { fugaIIRight = \notes \relative c'' { - \key e; % E-major + \key e \major; % E-major \clef violin; \time3/4; @@ -137,7 +138,7 @@ fugaIIRight = \notes \relative c'' { gracetest = \notes \grace { [c16 ( cis dis] } fugaIILeft = \notes { - \key e; + \key e \major; \clef bass; %15 @@ -155,7 +156,7 @@ fugaIILeft = \notes { } fugaIIPedal = \notes \relative c { - \key e; + \key e \major; \clef bass; %15 @@ -192,7 +193,7 @@ fugaIIPedal = \notes \relative c { \property Staff.instr = #"bs" \time 4/4; - \key e; + \key e \major; \clef bass; %13 diff --git a/lily/auto-beam-engraver.cc b/lily/auto-beam-engraver.cc index c906fc6ac1..7e939e7c8e 100644 --- a/lily/auto-beam-engraver.cc +++ b/lily/auto-beam-engraver.cc @@ -119,11 +119,11 @@ Auto_beam_engraver::consider_end_and_begin (Moment test_mom) /* second guess: property generic time exception */ - SCM begin = get_property (time_str + "beamAutoBegin"); + SCM begin = get_property ((time_str + "beamAutoBegin").ch_C()); if (unsmob_moment (begin)) begin_mom = * unsmob_moment (begin); - SCM end = get_property (time_str + "beamAutoEnd"); + SCM end = get_property ((time_str + "beamAutoEnd").ch_C()); if (unsmob_moment (end)) end_mom = * unsmob_moment (end); @@ -132,11 +132,11 @@ Auto_beam_engraver::consider_end_and_begin (Moment test_mom) */ if (type_str.length_i ()) { - SCM end_mult = get_property ( time_str + "beamAutoEnd" + type_str); + SCM end_mult = get_property ((time_str + "beamAutoEnd" + type_str).ch_C()); if (unsmob_moment (end_mult)) end_mom = * unsmob_moment (end_mult); - SCM begin_mult = get_property (time_str + "beamAutoBegin" + type_str); + SCM begin_mult = get_property ((time_str + "beamAutoBegin" + type_str).ch_C()); if (unsmob_moment (begin_mult)) begin_mom = * unsmob_moment (begin_mult); } @@ -159,11 +159,11 @@ Auto_beam_engraver::consider_end_and_begin (Moment test_mom) */ if (type_str.length_i ()) { - SCM end_mult = get_property (String ("beamAutoEnd") + type_str); + SCM end_mult = get_property ((String ("beamAutoEnd") + type_str).ch_C()); if (unsmob_moment (end_mult)) end_mom = * unsmob_moment (end_mult); - SCM begin_mult = get_property (String ("beamAutoBegin") + type_str); + SCM begin_mult = get_property ((String ("beamAutoBegin") + type_str).ch_C()); if (unsmob_moment (begin_mult)) begin_mom = * unsmob_moment (begin_mult); } diff --git a/lily/axis-group-engraver.cc b/lily/axis-group-engraver.cc index 6ffe752dda..25b16bba20 100644 --- a/lily/axis-group-engraver.cc +++ b/lily/axis-group-engraver.cc @@ -42,7 +42,7 @@ void Axis_group_engraver::do_removal_processing () { String type = daddy_grav_l ()->type_str_ ; - SCM dims = get_property (type + "VerticalExtent"); + SCM dims = get_property ((type + "VerticalExtent").ch_C()); if (gh_pair_p (dims) && gh_number_p (gh_car (dims)) && gh_number_p (gh_cdr (dims))) @@ -51,12 +51,12 @@ Axis_group_engraver::do_removal_processing () staffline_p_->set_elt_property ("extent-Y", dims); } - dims = get_property (type + "MinimumVerticalExtent"); + dims = get_property ((type + "MinimumVerticalExtent").ch_C()); if (gh_pair_p (dims) && gh_number_p (gh_car (dims)) && gh_number_p (gh_cdr (dims))) staffline_p_->set_elt_property ("minimum-extent-Y", dims); - dims = get_property (type + "ExtraVerticalExtent"); + dims = get_property ((type + "ExtraVerticalExtent").ch_C()); if (gh_pair_p (dims) && gh_number_p (gh_car (dims)) && gh_number_p (gh_cdr (dims))) staffline_p_->set_elt_property ("extra-extent-Y", dims); diff --git a/lily/bar-engraver.cc b/lily/bar-engraver.cc index 075cd56129..b7a240b604 100644 --- a/lily/bar-engraver.cc +++ b/lily/bar-engraver.cc @@ -28,7 +28,7 @@ Bar_engraver::create_bar () { if (!bar_p_) { - bar_p_ = new Staff_bar (get_property ("basicBarlineProperties")); + bar_p_ = new Staff_bar (get_property ("basicBarProperties")); // urg: "" != empty... diff --git a/lily/bar-number-engraver.cc b/lily/bar-number-engraver.cc index f2961ee47f..13b50e0a6e 100644 --- a/lily/bar-number-engraver.cc +++ b/lily/bar-number-engraver.cc @@ -12,7 +12,7 @@ #include "paper-def.hh" #include "side-position-interface.hh" #include "staff-symbol.hh" -#include "text-item.hh" +#include "item.hh" #include "moment.hh" #include "engraver.hh" #include "protected-scm.hh" @@ -20,7 +20,7 @@ class Bar_number_engraver : public Engraver { protected: - Text_item* text_p_; + Item* text_p_; Protected_scm staffs_; @@ -107,7 +107,7 @@ Bar_number_engraver::create_items () return; SCM b = get_property ("basicBarNumberProperties"); - text_p_ = new Text_item (b); + text_p_ = new Item (b); Side_position_interface staffside(text_p_); staffside.set_axis (Y_AXIS); diff --git a/lily/bar.cc b/lily/bar.cc index 80c964c1a5..ea07643585 100644 --- a/lily/bar.cc +++ b/lily/bar.cc @@ -32,28 +32,39 @@ Bar::get_bar_size () const } -Molecule -Bar::do_brew_molecule () const +SCM +Bar::scheme_molecule (SCM smob) { - SCM s = get_elt_property ("glyph"); + Score_element * self = unsmob_element (smob); + Bar * fly = dynamic_cast<Bar*> (self); + SCM s = self->get_elt_property ("glyph"); if (gh_string_p (s)) { String str =ly_scm2string (s); - return compound_barline (str, get_bar_size ()); + return fly->compound_barline (str, fly->get_bar_size ()).create_scheme (); } - return Molecule (); + return SCM_EOL; } -MAKE_SCHEME_SCORE_ELEMENT_CALLBACKS(Bar); +MAKE_SCHEME_SCORE_ELEMENT_NON_DEFAULT_CALLBACKS(Bar); Molecule Bar::compound_barline (String str, Real h) const { - Real kern = paper_l()->get_var ("bar_kern"); - Real thinkern = paper_l()->get_var ("bar_thinkern"); + Real kern = gh_scm2double (get_elt_property ("kern")); + Real thinkern = gh_scm2double (get_elt_property ("thin-kern")); + Real hair = gh_scm2double (get_elt_property ("hair-thickness")); + Real fatline = gh_scm2double (get_elt_property ("thick-thickness")); - Molecule thin = simple_barline (paper_l()->get_var ("barthick_thin"), h); - Molecule thick = simple_barline (paper_l()->get_var ("barthick_thick"), h); + Real staffline = paper_l ()->get_var ("stafflinethickness"); + + kern *= staffline; + thinkern *= staffline; + hair *= staffline; + fatline *= staffline; + + Molecule thin = simple_barline (hair, h); + Molecule thick = simple_barline (fatline, h); Molecule colon = lookup_l ()->afm_find ("dots-repeatcolon"); Molecule m; diff --git a/lily/breathing-sign.cc b/lily/breathing-sign.cc index 8870334229..a78e610645 100644 --- a/lily/breathing-sign.cc +++ b/lily/breathing-sign.cc @@ -28,12 +28,13 @@ Breathing_sign::Breathing_sign (SCM s) -MAKE_SCHEME_SCORE_ELEMENT_CALLBACKS(Breathing_sign); +MAKE_SCHEME_SCORE_ELEMENT_NON_DEFAULT_CALLBACKS(Breathing_sign); -Molecule -Breathing_sign::do_brew_molecule () const +SCM +Breathing_sign::scheme_molecule (SCM smob) { - Staff_symbol_referencer_interface si (this); + Score_element * sc = unsmob_element (smob); + Staff_symbol_referencer_interface si (sc); Real space = si.staff_space(); @@ -41,7 +42,7 @@ Breathing_sign::do_brew_molecule () const Interval i1(0, space / 6), i2(-space / 2, space / 2); Box b(i1, i2); - return lookup_l()->filledbox(b); + return sc->lookup_l()->filledbox(b).create_scheme (); } void diff --git a/lily/chord-name-engraver.cc b/lily/chord-name-engraver.cc index b33e0f04de..cab0239b3c 100644 --- a/lily/chord-name-engraver.cc +++ b/lily/chord-name-engraver.cc @@ -14,7 +14,7 @@ #include "paper-def.hh" #include "main.hh" #include "dimensions.hh" -#include "text-item.hh" +#include "item.hh" ADD_THIS_TRANSLATOR (Chord_name_engraver); diff --git a/lily/chord-name.cc b/lily/chord-name.cc index 7e784aaa07..b2ed244267 100644 --- a/lily/chord-name.cc +++ b/lily/chord-name.cc @@ -128,24 +128,25 @@ Chord_name::ly_text2molecule (SCM text) const return mol; } -MAKE_SCHEME_SCORE_ELEMENT_CALLBACKS(Chord_name); +MAKE_SCHEME_SCORE_ELEMENT_NON_DEFAULT_CALLBACKS(Chord_name); -Molecule -Chord_name::do_brew_molecule () const +SCM +Chord_name::scheme_molecule (SCM smob) { - SCM style = get_elt_property ("style"); + Score_element *sc = unsmob_element (smob); + SCM style = sc->get_elt_property ("style"); if (style == SCM_UNDEFINED) style = ly_str02scm ("banter"); - SCM inversion = get_elt_property ("inversion"); + SCM inversion = sc-> get_elt_property ("inversion"); if (inversion == SCM_UNDEFINED) inversion = SCM_BOOL_F; - SCM bass = get_elt_property ("bass"); + SCM bass = sc->get_elt_property ("bass"); if (bass == SCM_UNDEFINED) bass = SCM_BOOL_F; - SCM pitches = get_elt_property ("pitches"); + SCM pitches = sc->get_elt_property ("pitches"); SCM text = scm_eval (gh_list (ly_symbol2scm ("chord::user-name"), style, @@ -153,7 +154,8 @@ Chord_name::do_brew_molecule () const ly_quote_scm (gh_cons (inversion, bass)), SCM_UNDEFINED)); - return ly_text2molecule (text); + return dynamic_cast<Chord_name*> (sc)-> + ly_text2molecule (text).create_scheme (); } Chord_name::Chord_name (SCM s) diff --git a/lily/clef-engraver.cc b/lily/clef-engraver.cc index 7aa6e32f0b..246d275d8b 100644 --- a/lily/clef-engraver.cc +++ b/lily/clef-engraver.cc @@ -23,12 +23,12 @@ #include "engraver.hh" #include "direction.hh" #include "side-position-interface.hh" -#include "text-item.hh" +#include "item.hh" /// where is c-0 in the staff? class Clef_engraver : public Engraver { Clef_item * clef_p_; - Text_item * octavate_p_; + Item * octavate_p_; Clef_change_req * clef_req_l_; void create_clef(); @@ -190,7 +190,7 @@ Clef_engraver::create_clef() si.set_position (clef_position_i_); if (octave_dir_) { - Text_item * g = new Text_item (get_property ("basicOctavateEightProperties")); + Item * g = new Item (get_property ("basicOctavateEightProperties")); Side_position_interface spi (g); spi.set_axis (Y_AXIS); spi.add_support (clef_p_); diff --git a/lily/clef-item.cc b/lily/clef-item.cc index 770694061d..64df471244 100644 --- a/lily/clef-item.cc +++ b/lily/clef-item.cc @@ -10,7 +10,7 @@ #include "clef-item.hh" #include "string.hh" #include "molecule.hh" -#include "text-item.hh" +#include "item.hh" Clef_item::Clef_item (SCM s) : Item (s) @@ -52,7 +52,8 @@ Clef_item::before_line_breaking () return; } - // ugh. + // ugh. + /* why not suicide? */ if (style == "transparent") // UGH. JUNKME { set_elt_property ("molecule-callback", SCM_BOOL_T); diff --git a/lily/dots.cc b/lily/dots.cc index 303f8c1509..c77175e0ad 100644 --- a/lily/dots.cc +++ b/lily/dots.cc @@ -16,7 +16,6 @@ Dots::Dots (SCM s) : Item (s) { - set_elt_property ("dot-count", gh_int2scm (0)); } void @@ -35,17 +34,19 @@ Dots::after_line_breaking () } } -MAKE_SCHEME_SCORE_ELEMENT_CALLBACKS(Dots); -Molecule -Dots::do_brew_molecule () const +MAKE_SCHEME_SCORE_ELEMENT_NON_DEFAULT_CALLBACKS(Dots); + +SCM +Dots::scheme_molecule (SCM d) { - Molecule mol (lookup_l ()->blank (Box (Interval (0,0), + Score_element *sc = unsmob_element (d); + Molecule mol (sc->lookup_l ()->blank (Box (Interval (0,0), Interval (0,0)))); - SCM c = get_elt_property ("dot-count"); + SCM c = sc->get_elt_property ("dot-count"); if (gh_number_p (c)) { - Molecule d = lookup_l ()->afm_find (String ("dots-dot")); + Molecule d = sc->lookup_l ()->afm_find (String ("dots-dot")); Real dw = d.extent (X_AXIS).length (); d.translate_axis (-dw, X_AXIS); @@ -57,7 +58,7 @@ Dots::do_brew_molecule () const mol.add_molecule (d); } } - return mol; + return mol.create_scheme (); } diff --git a/lily/dynamic-engraver.cc b/lily/dynamic-engraver.cc index 273aa10568..7c643490dd 100644 --- a/lily/dynamic-engraver.cc +++ b/lily/dynamic-engraver.cc @@ -15,7 +15,7 @@ #include "paper-column.hh" #include "staff-symbol.hh" #include "note-column.hh" -#include "text-item.hh" +#include "item.hh" #include "side-position-interface.hh" #include "engraver.hh" #include "stem.hh" @@ -77,7 +77,7 @@ Dynamic_line_spanner::add_element (Score_element* e) */ class Dynamic_engraver : public Engraver { - Text_item * text_p_; + Item * text_p_; Crescendo * finished_cresc_p_; Crescendo * cresc_p_; @@ -262,7 +262,7 @@ Dynamic_engraver::do_process_music () { String loud = text_req_l_->text_str_; - text_p_ = new Text_item (get_property ("basicDynamicTextProperties")); + text_p_ = new Item (get_property ("basicDynamicTextProperties")); text_p_->set_elt_property ("text", ly_str02scm (loud.ch_C ())); if (Direction d=text_req_l_->get_direction ()) directional_element (text_p_).set (d); @@ -309,7 +309,7 @@ Dynamic_engraver::do_process_music () gh_int2scm ((span_req_l_drul_[START]->span_type_str_ == "crescendo") ? BIGGER : SMALLER)); - SCM s = get_property (span_req_l_drul_[START]->span_type_str_ + "Text"); + SCM s = get_property ((span_req_l_drul_[START]->span_type_str_ + "Text").ch_C()); if (gh_string_p (s)) { cresc_p_->set_elt_property ("start-text", s); @@ -317,7 +317,7 @@ Dynamic_engraver::do_process_music () + "Text", SCM_UNDEFINED); } - s = get_property (span_req_l_drul_[START]->span_type_str_ + "Spanner"); + s = get_property ((span_req_l_drul_[START]->span_type_str_ + "Spanner").ch_C()); /* diff --git a/lily/extender-engraver.cc b/lily/extender-engraver.cc index 8dab340163..faf311ed83 100644 --- a/lily/extender-engraver.cc +++ b/lily/extender-engraver.cc @@ -10,7 +10,7 @@ #include "musical-request.hh" #include "extender-spanner.hh" #include "paper-column.hh" -#include "text-item.hh" +#include "item.hh" #include "engraver.hh" #include "drul-array.hh" #include "extender-spanner.hh" @@ -22,16 +22,16 @@ typesets a nice centred extender of varying length depending on the gap between syllables. - We remember the last Text_item that come across. When we get a + We remember the last Item that come across. When we get a request, we create the spanner, and attach the left point to the last lyrics, and the right point to any lyrics we receive by then. */ class Extender_engraver : public Engraver { - Text_item * last_lyric_l_; - Text_item * current_lyric_l_; + Item * last_lyric_l_; + Item * current_lyric_l_; Extender_req* req_l_; - Lyric_extender* extender_spanner_p_; + Spanner* extender_p_; public: Extender_engraver (); VIRTUAL_COPY_CONS (Translator); @@ -54,21 +54,22 @@ Extender_engraver::Extender_engraver () { current_lyric_l_ = 0; last_lyric_l_ = 0; - extender_spanner_p_ = 0; + extender_p_ = 0; req_l_ = 0; } void Extender_engraver::acknowledge_element (Score_element_info i) { - if (Text_item* t = dynamic_cast<Text_item*> (i.elem_l_)) + // -> text_item + if (Item* t = dynamic_cast<Item*> (i.elem_l_)) { current_lyric_l_ = t; - if (extender_spanner_p_ - && !extender_spanner_p_->get_bound (RIGHT) + if (extender_p_ + && !extender_p_->get_bound (RIGHT) ) { - extender_spanner_p_->set_textitem (RIGHT, t); + Lyric_extender(extender_p_).set_textitem (RIGHT, t); } } } @@ -91,10 +92,10 @@ Extender_engraver::do_try_music (Music* r) void Extender_engraver::do_removal_processing () { - if (extender_spanner_p_) + if (extender_p_) { req_l_->warning (_ ("unterminated extender")); - extender_spanner_p_->set_bound(RIGHT, get_staff_info ().command_pcol_l ()); + extender_p_->set_bound(RIGHT, get_staff_info ().command_pcol_l ()); } } @@ -109,9 +110,11 @@ Extender_engraver::do_process_music () return; } - extender_spanner_p_ = new Lyric_extender (get_property ("basicLyricExtenderProperties")); - extender_spanner_p_->set_textitem (LEFT, last_lyric_l_); - announce_element (Score_element_info (extender_spanner_p_, req_l_)); + extender_p_ = new Spanner (get_property ("basicLyricExtenderProperties")); + extender_p_->set_extent_callback (Score_element::point_dimension_callback, Y_AXIS); + + Lyric_extender (extender_p_).set_textitem (LEFT, last_lyric_l_); + announce_element (Score_element_info (extender_p_, req_l_)); } } @@ -119,10 +122,10 @@ Extender_engraver::do_process_music () void Extender_engraver::do_pre_move_processing () { - if (extender_spanner_p_) + if (extender_p_) { - typeset_element (extender_spanner_p_); - extender_spanner_p_ = 0; + typeset_element (extender_p_); + extender_p_ = 0; } if (current_lyric_l_) diff --git a/lily/hara-kiri-engraver.cc b/lily/hara-kiri-engraver.cc index 29211b6234..cab10f8cb3 100644 --- a/lily/hara-kiri-engraver.cc +++ b/lily/hara-kiri-engraver.cc @@ -20,6 +20,9 @@ void Hara_kiri_engraver::acknowledge_element (Score_element_info i) { Axis_group_engraver::acknowledge_element (i); + + i.elem_l_->add_offset_callback (Hara_kiri_group_spanner::force_hara_kiri_callback, Y_AXIS); + if (Rhythmic_head *h = dynamic_cast<Rhythmic_head *> (i.elem_l_)) { dynamic_cast<Hara_kiri_group_spanner*> (staffline_p_) diff --git a/lily/hara-kiri-vertical-group-spanner.cc b/lily/hara-kiri-vertical-group-spanner.cc index c01b068cba..21746accfd 100644 --- a/lily/hara-kiri-vertical-group-spanner.cc +++ b/lily/hara-kiri-vertical-group-spanner.cc @@ -13,6 +13,8 @@ #include "debug.hh" #include "item.hh" +/* + */ Hara_kiri_group_spanner::Hara_kiri_group_spanner(SCM s) : Spanner (s) { @@ -24,12 +26,16 @@ Hara_kiri_group_spanner::add_interesting_item (Item* n) { add_dependency (n); Pointer_group_interface (this, "items-worth-living").add_element (n); + } void Hara_kiri_group_spanner::after_line_breaking () { SCM worth = get_elt_pointer ("items-worth-living"); + /* + worth == self_scm is a stupid way to signal that we're done. + */ if (gh_pair_p (worth)) return; @@ -42,9 +48,31 @@ Hara_kiri_group_spanner::after_line_breaking () programming_error ("Killing other children too"); s->suicide (); } - set_extent_callback (0, X_AXIS); - set_extent_callback (0, Y_AXIS); + + /* + very appropriate name here :-) + */ + suicide (); } +/* + We can't rely on offsets and dimensions of elements in a hara-kiri + group. Use a callback to make sure that hara-kiri has been done + before asking for offsets. */ +Real +Hara_kiri_group_spanner::force_hara_kiri_callback (Score_element const *elt, Axis a) +{ + while (elt && !dynamic_cast<Hara_kiri_group_spanner const*> (elt)) + elt = elt->parent_l(a); + + if (elt) + { + Hara_kiri_group_spanner const * seppuku = dynamic_cast<Hara_kiri_group_spanner const*> (elt); + + ((Hara_kiri_group_spanner*)seppuku)->after_line_breaking (); + } + + return 0.0; +} diff --git a/lily/hyphen-engraver.cc b/lily/hyphen-engraver.cc index 6193fa81dc..9fbbb77f5b 100644 --- a/lily/hyphen-engraver.cc +++ b/lily/hyphen-engraver.cc @@ -6,10 +6,40 @@ #include "proto.hh" #include "musical-request.hh" -#include "hyphen-engraver.hh" #include "hyphen-spanner.hh" #include "paper-column.hh" -#include "text-item.hh" +#include "item.hh" +#include "engraver.hh" + +/** + Generate an centred hyphen. Should make a Hyphen_spanner that + typesets a nice centred hyphen of varying length depending on the + gap between syllables. + + We remember the last Item that come across. When we get a + request, we create the spanner, and attach the left point to the + last lyrics, and the right point to any lyrics we receive by + then. */ +class Hyphen_engraver : public Engraver +{ + Item *last_lyric_l_; + Item *current_lyric_l_; + Hyphen_req* req_l_; + Spanner* hyphen_p_; +public: + Hyphen_engraver (); + VIRTUAL_COPY_CONS (Translator); + +protected: + virtual void acknowledge_element (Score_element_info); + virtual void do_removal_processing(); + virtual void do_process_music(); + virtual bool do_try_music (Music*); + virtual void do_pre_move_processing(); + virtual void do_post_move_processing (); +private: + +}; ADD_THIS_TRANSLATOR (Hyphen_engraver); @@ -17,21 +47,23 @@ Hyphen_engraver::Hyphen_engraver () { current_lyric_l_ = 0; last_lyric_l_ = 0; - hyphen_spanner_p_ = 0; + hyphen_p_ = 0; req_l_ = 0; } void Hyphen_engraver::acknowledge_element (Score_element_info i) { - if (Text_item* t = dynamic_cast<Text_item*> (i.elem_l_)) + + // -> text-item + if (Item* t = dynamic_cast<Item*> (i.elem_l_)) { current_lyric_l_ = t; - if (hyphen_spanner_p_ - && !hyphen_spanner_p_->get_bound (RIGHT) + if (hyphen_p_ + && !hyphen_p_->get_bound (RIGHT) ) { - hyphen_spanner_p_->set_textitem (RIGHT, t); + Hyphen_spanner (hyphen_p_).set_textitem (RIGHT, t); } } } @@ -54,10 +86,10 @@ Hyphen_engraver::do_try_music (Music* r) void Hyphen_engraver::do_removal_processing () { - if (hyphen_spanner_p_) + if (hyphen_p_) { req_l_->warning (_ ("unterminated hyphen")); - hyphen_spanner_p_->set_bound(RIGHT, get_staff_info ().command_pcol_l ()); + hyphen_p_->set_bound(RIGHT, get_staff_info ().command_pcol_l ()); } } @@ -72,9 +104,10 @@ Hyphen_engraver::do_process_music () return; } - hyphen_spanner_p_ = new Hyphen_spanner (get_property ("basicHyphenSpannerProperties")); - hyphen_spanner_p_->set_textitem (LEFT, last_lyric_l_); - announce_element (Score_element_info (hyphen_spanner_p_, req_l_)); + hyphen_p_ = new Spanner (get_property ("basicHyphenSpannerProperties")); + hyphen_p_->set_extent_callback (Score_element::point_dimension_callback,Y_AXIS); + Hyphen_spanner (hyphen_p_).set_textitem (LEFT, last_lyric_l_); + announce_element (Score_element_info (hyphen_p_, req_l_)); } } @@ -82,10 +115,10 @@ Hyphen_engraver::do_process_music () void Hyphen_engraver::do_pre_move_processing () { - if (hyphen_spanner_p_) + if (hyphen_p_) { - typeset_element (hyphen_spanner_p_); - hyphen_spanner_p_ = 0; + typeset_element (hyphen_p_); + hyphen_p_ = 0; } if (current_lyric_l_) diff --git a/lily/hyphen-spanner.cc b/lily/hyphen-spanner.cc index a4ddc8c750..165c6c6b11 100644 --- a/lily/hyphen-spanner.cc +++ b/lily/hyphen-spanner.cc @@ -8,80 +8,54 @@ (adapted from extender-spanner) */ -/* - TODO: too complicated implementation. Why the dx_drul?. - */ - #include <math.h> + #include "box.hh" -#include "debug.hh" #include "lookup.hh" #include "molecule.hh" -#include "paper-column.hh" #include "paper-def.hh" #include "hyphen-spanner.hh" -#include "dimension-cache.hh" +#include "spanner.hh" +#include "item.hh" -Hyphen_spanner::Hyphen_spanner (SCM s) - : Spanner (s) -{ - dx_f_drul_[LEFT] = dx_f_drul_[RIGHT] = 0.0; +MAKE_SCHEME_SCORE_ELEMENT_NON_DEFAULT_CALLBACKS(Hyphen_spanner) - set_extent_callback (Score_element::point_dimension_callback,Y_AXIS); -} - -MAKE_SCHEME_SCORE_ELEMENT_CALLBACKS(Hyphen_spanner) -Molecule -Hyphen_spanner::do_brew_molecule () const +SCM +Hyphen_spanner::scheme_molecule (SCM smob) { + Spanner * sp =dynamic_cast<Spanner*> (unsmob_element (smob)); Molecule mol; - Real w = spanner_length (); + Real leftext = sp->get_bound (LEFT)->extent (X_AXIS).length (); - w += (dx_f_drul_[RIGHT] - dx_f_drul_[LEFT]); + Real ss = sp->paper_l ()->get_var ("staffspace"); + Real lt = sp->paper_l ()->get_var ("stafflinethickness"); + Real th = gh_scm2double (sp->get_elt_property ("thickness")) * lt ; + Real h = gh_scm2double (sp->get_elt_property ("height")) * ss; + Real l = gh_scm2double (sp->get_elt_property ("minimum-length")) * ss; + Real w = sp->spanner_length () - leftext - ss/2; - Real th = paper_l ()->get_var ("hyphen_thickness"); - Real h = paper_l ()->get_var ("hyphen_height"); - // UGH. First try: just make the hyphen take 1/3 of the available space - // for length, use a geometric mean of the available space and some minimum - Real l = paper_l ()->get_var ("hyphen_minimum_length"); + /* First try: just make the hyphen take 1/3 of the available space + for length, use a geometric mean of the available space and some minimum + */ if(l < w) l = sqrt(l*w); - Molecule a = lookup_l ()->filledbox ( Box (Interval ((w-l)/2,(w+l)/2), Interval (h,h+th))); - a.translate (Offset (dx_f_drul_[LEFT], 0)); - - mol.add_molecule (a); - return mol; + Box b (Interval ( (w-l)/2, (w+l)/2), Interval (h,h+th)); + mol.add_molecule (sp->lookup_l ()->filledbox (b)); + mol.translate_axis(leftext, X_AXIS); + return mol.create_scheme (); } - - -void -Hyphen_spanner::after_line_breaking () -{ - // UGH - Real gap = paper_l ()->get_var ("interline"); - - Direction d = LEFT; - do - { - Item* t = get_bound (d) - ? get_bound (d) : get_bound ((Direction)-d); - if (d == LEFT) - dx_f_drul_[d] += t->extent (X_AXIS).length (); - else - dx_f_drul_[d] -= d * gap / 2; - } - while (flip(&d) != LEFT); -} - void Hyphen_spanner::set_textitem (Direction d, Item* textitem_l) { - set_bound (d, textitem_l); - add_dependency (textitem_l); + elt_l_->set_bound (d, textitem_l); + elt_l_->add_dependency (textitem_l); } - +Hyphen_spanner::Hyphen_spanner (Spanner*s) +{ + elt_l_ = s; +} diff --git a/lily/identifier.cc b/lily/identifier.cc index 4c6284eb01..c35350b07d 100644 --- a/lily/identifier.cc +++ b/lily/identifier.cc @@ -10,9 +10,7 @@ JUNKTHIS! */ #include <assert.h> - -#include "midi-def.hh" -#include "paper-def.hh" +#include "music-output-def.hh" #include "score.hh" #include "identifier.hh" #include "my-lily-lexer.hh" @@ -86,8 +84,7 @@ DEFAULT_PRINT(Translator_group); DEFAULT_PRINT(Music); DEFAULT_PRINT(Request); DEFAULT_PRINT(Score); -DEFAULT_PRINT(Midi_def); -DEFAULT_PRINT(Paper_def); +DEFAULT_PRINT(Music_output_def); /* ugh. */ #define DUMMY_STR(Class) \ @@ -101,8 +98,7 @@ DUMMY_STR(Translator_group); DUMMY_STR(Music); DUMMY_STR(Request); DUMMY_STR(Score); -DUMMY_STR(Midi_def); -DUMMY_STR(Paper_def); +DUMMY_STR(Music_output_def); DUMMY_STR(Duration); #define STRING_PRINT(Class) \ @@ -114,8 +110,6 @@ Class ## _identifier::do_print () const\ STRING_PRINT(Duration); -STRING_PRINT(Real); -STRING_PRINT(int); #define DEFAULT_STR(Class) \ String \ @@ -124,9 +118,6 @@ Class ## _identifier::do_str () const\ return to_str (*data_p_);\ } -DEFAULT_STR(int); -DEFAULT_STR(Real); - /* @@ -163,22 +154,17 @@ Class ## _identifier::Class ## _identifier (Class ## _identifier const &s) \ IMPLEMENT_ID_CLASS(Duration); IMPLEMENT_ID_CLASS(Translator_group); -IMPLEMENT_ID_CLASS(int); -IMPLEMENT_ID_CLASS(Real); IMPLEMENT_ID_CLASS(Music); IMPLEMENT_ID_CLASS(Score); IMPLEMENT_ID_CLASS(Request); -IMPLEMENT_ID_CLASS(Midi_def); -IMPLEMENT_ID_CLASS(Paper_def); +IMPLEMENT_ID_CLASS(Music_output_def); VIRTUAL_ACCESSOR(Music); VIRTUAL_ACCESSOR(Request); VIRTUAL_ACCESSOR(Translator_group); +VIRTUAL_ACCESSOR(Music_output_def); DEFAULT_ACCESSOR(Duration); -DEFAULT_ACCESSOR(int); -DEFAULT_ACCESSOR(Real); DEFAULT_ACCESSOR(Score); -DEFAULT_ACCESSOR(Midi_def); -DEFAULT_ACCESSOR(Paper_def); + int Identifier::print_smob (SCM s, SCM p, scm_print_state*) diff --git a/lily/include/bar.hh b/lily/include/bar.hh index bfb2ce7379..8d408c04b9 100644 --- a/lily/include/bar.hh +++ b/lily/include/bar.hh @@ -23,7 +23,7 @@ public: protected: virtual void before_line_breaking (); - Molecule do_brew_molecule () const; + virtual Real get_bar_size () const; }; #endif // BAR_HH diff --git a/lily/include/extender-spanner.hh b/lily/include/extender-spanner.hh index a86a3d0e03..0fe3b35b66 100644 --- a/lily/include/extender-spanner.hh +++ b/lily/include/extender-spanner.hh @@ -27,21 +27,13 @@ extend beond, lasting the whole duration of the melissima (as in MUP, urg). */ -class Lyric_extender : public Spanner +class Lyric_extender // interface { public: - Lyric_extender (SCM); + Spanner*elt_l_; + Lyric_extender (Spanner*); void set_textitem (Direction, Item*); - static SCM scheme_molecule (SCM); - - -protected: - Molecule do_brew_molecule () const; - void after_line_breaking (); - - VIRTUAL_COPY_CONS (Score_element); - - Drul_array<Real> dx_f_drul_; + static SCM scheme_molecule (SCM); }; #endif // EXTENDER_SPANNER_HH diff --git a/lily/include/hara-kiri-vertical-group-spanner.hh b/lily/include/hara-kiri-vertical-group-spanner.hh index 1adc9480bf..abda869a39 100644 --- a/lily/include/hara-kiri-vertical-group-spanner.hh +++ b/lily/include/hara-kiri-vertical-group-spanner.hh @@ -27,6 +27,7 @@ class Hara_kiri_group_spanner : public Spanner { public: + static Real force_hara_kiri_callback (Score_element const* , Axis); Hara_kiri_group_spanner (SCM); virtual void after_line_breaking (); void add_interesting_item (Item* n); diff --git a/lily/include/hyphen-spanner.hh b/lily/include/hyphen-spanner.hh index 920c4c35fa..f1ef2ea45d 100644 --- a/lily/include/hyphen-spanner.hh +++ b/lily/include/hyphen-spanner.hh @@ -18,23 +18,13 @@ The length of the hyphen line should stretch based on the size of the gap between syllables. */ -class Hyphen_spanner : public Spanner +struct Hyphen_spanner // interface { public: - Hyphen_spanner (SCM); + Spanner* elt_l_; + Hyphen_spanner (Spanner*); void set_textitem (Direction, Item*); - static SCM scheme_molecule (SCM); - - -protected: - Molecule do_brew_molecule () const; - Interval do_height () const; - - void after_line_breaking (); - - VIRTUAL_COPY_CONS (Score_element); - - Drul_array<Real> dx_f_drul_; + static SCM scheme_molecule (SCM); }; #endif // HYPHEN_SPANNER_HH diff --git a/lily/include/identifier.hh b/lily/include/identifier.hh index 94bceeebb8..e0e4c25769 100644 --- a/lily/include/identifier.hh +++ b/lily/include/identifier.hh @@ -20,10 +20,7 @@ class Translator_group_identifier; class Music_identifier; class Articulation_req_identifier; -class Midi_def_identifier; -class Paper_def_identifier; -class Real_identifier; -class int_identifier; +class Output_def_identifier; class Request_identifier; class Score_identifier; class Duration_identifier; @@ -56,12 +53,9 @@ struct Identifier : public Input { String str () const; IDACCESSOR(Translator_group) IDACCESSOR(Music) - IDACCESSOR(Midi_def) - IDACCESSOR(Paper_def) - IDACCESSOR(Real) + IDACCESSOR(Music_output_def) IDACCESSOR(Request) IDACCESSOR(Score) - IDACCESSOR(int) IDACCESSOR(Duration) VIRTUAL_COPY_CONS(Identifier); @@ -86,14 +80,11 @@ struct Class ## _identifier : Identifier {\ DECLARE_ID_CLASS(Translator_group); DECLARE_ID_CLASS(Duration); -DECLARE_ID_CLASS(Real); DECLARE_ID_CLASS(General_script_def); DECLARE_ID_CLASS(Music); -DECLARE_ID_CLASS(int); DECLARE_ID_CLASS(Score); DECLARE_ID_CLASS(Request); -DECLARE_ID_CLASS(Paper_def); -DECLARE_ID_CLASS(Midi_def); +DECLARE_ID_CLASS(Music_output_def); Identifier * unsmob_identifier (SCM); SCM smobify (Identifier*); diff --git a/lily/include/lily-proto.hh b/lily/include/lily-proto.hh index 8f0e8c956f..e2c3393a5b 100644 --- a/lily/include/lily-proto.hh +++ b/lily/include/lily-proto.hh @@ -243,8 +243,7 @@ struct Tex_font_metric_reader; struct Text_def; struct Text_engraver; struct Text_gob; -struct Text_item ; -struct Text_item; +struct Item ; struct Text_req; struct Text_spanner; struct Tie; diff --git a/lily/include/lyric-engraver.hh b/lily/include/lyric-engraver.hh index 1ef2eb7490..d39ec7e558 100644 --- a/lily/include/lyric-engraver.hh +++ b/lily/include/lyric-engraver.hh @@ -31,7 +31,7 @@ public: private: Lyric_req * req_l_; - Text_item* text_p_; + Item* text_p_; }; diff --git a/lily/include/midi-def.hh b/lily/include/midi-def.hh index 67cdcef249..6d65f6baea 100644 --- a/lily/include/midi-def.hh +++ b/lily/include/midi-def.hh @@ -21,7 +21,7 @@ */ class Midi_def : public Music_output_def { static int default_count_i_; - int count_per_minute_i; + public: VIRTUAL_COPY_CONS(Music_output_def); diff --git a/lily/include/paper-def.hh b/lily/include/paper-def.hh index 4970d49905..a91f537879 100644 --- a/lily/include/paper-def.hh +++ b/lily/include/paper-def.hh @@ -10,7 +10,6 @@ #ifndef PAPER_DEF_HH #define PAPER_DEF_HH -#include <map> #include "lily-proto.hh" #include "lily-guile.hh" @@ -56,19 +55,19 @@ protected: public: virtual ~Paper_def (); - Array<Interval> shape_int_a_; /* JUNKME */ Real get_realvar (SCM symbol) const; Real get_var (String id) const; - + SCM get_scmvar (String id)const; void reinit (); Paper_def (); void set_lookup (int, Lookup*); Paper_def (Paper_def const&); + /** The distance between beams of multiplicity_i JUNKME */ diff --git a/lily/include/slur.hh b/lily/include/slur.hh index 9a71f42d3f..cefb249d73 100644 --- a/lily/include/slur.hh +++ b/lily/include/slur.hh @@ -28,6 +28,10 @@ protected: Molecule do_brew_molecule () const; virtual Array<Offset> get_encompass_offset_arr () const; Bezier get_curve () const; + + /* + JUNKME + */ Drul_array<Real> dy_f_drul_; Drul_array<Real> dx_f_drul_; diff --git a/lily/include/spanner.hh b/lily/include/spanner.hh index 34339a18f9..2eb457e514 100644 --- a/lily/include/spanner.hh +++ b/lily/include/spanner.hh @@ -44,6 +44,7 @@ public: Spanner (Spanner const &); bool broken_b () const; void do_break (); + Real spanner_length () const; static int compare (Spanner * const &,Spanner * const &); virtual Array<Rod> get_rods () const; @@ -57,7 +58,6 @@ protected: virtual void do_space_processing (); virtual void do_break_processing (); - Real spanner_length () const; virtual Line_of_score*line_l () const; }; #endif diff --git a/lily/include/system-start-delimiter.hh b/lily/include/system-start-delimiter.hh index b3f545daf7..61d23efdb1 100644 --- a/lily/include/system-start-delimiter.hh +++ b/lily/include/system-start-delimiter.hh @@ -19,12 +19,12 @@ class System_start_delimiter : public Spanner { public: System_start_delimiter (SCM); - static SCM scheme_molecule (SCM); + static SCM scheme_molecule (SCM); -VIRTUAL_COPY_CONS (Score_element); + VIRTUAL_COPY_CONS (Score_element); protected: virtual void after_line_breaking(); - virtual Molecule do_brew_molecule () const; + Molecule staff_bracket (Real) const; Molecule staff_brace (Real) const; Molecule simple_bar (Real) const; diff --git a/lily/include/text-item.hh b/lily/include/text-item.hh index d69a23f0af..8b13789179 100644 --- a/lily/include/text-item.hh +++ b/lily/include/text-item.hh @@ -1,30 +1 @@ -/* - text-item.hh -- declare Text_item - - source file of the GNU LilyPond music typesetter - - (c) 1998--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl> - - */ - -#ifndef Text_ITEM_HH -#define Text_ITEM_HH - -#include "item.hh" - -/** - Print a text in specified style. - */ -class Text_item : public Item -{ -public: - VIRTUAL_COPY_CONS (Score_element); - static SCM scheme_molecule (SCM); - -Text_item (SCM s); -protected: - Molecule do_brew_molecule () const; -}; - -#endif /* Text_ITEM_HH */ diff --git a/lily/include/tie.hh b/lily/include/tie.hh index c6fc1c8904..e45a456b99 100644 --- a/lily/include/tie.hh +++ b/lily/include/tie.hh @@ -35,6 +35,9 @@ protected: virtual Array<Offset> get_encompass_offset_arr () const; Bezier get_curve () const; + /* + JUNKME + */ Drul_array<Real> dy_f_drul_; Drul_array<Real> dx_f_drul_; diff --git a/lily/include/translator-group.hh b/lily/include/translator-group.hh index 2bfaad8823..47c2ef1135 100644 --- a/lily/include/translator-group.hh +++ b/lily/include/translator-group.hh @@ -29,7 +29,7 @@ typedef void (Translator::*Const_method_pointer)(void) const; class Translator_group : public virtual Translator { Array<String> consists_str_arr_; Array<String> accepts_str_arr_; - Array<String> consists_end_str_arr_; + Array<String> consists_end_str_arr_; Scheme_hash_table properties_dict_; int iterator_count_; diff --git a/lily/include/translator.hh b/lily/include/translator.hh index c84c109ec4..6352c005dc 100644 --- a/lily/include/translator.hh +++ b/lily/include/translator.hh @@ -62,7 +62,7 @@ public: */ Music_output_def *output_def_l () const; - SCM get_property (String) const; + SCM get_property (const char *) const; SCM get_property (SCM symbol) const; virtual Moment now_mom () const; diff --git a/lily/instrument-name-engraver.cc b/lily/instrument-name-engraver.cc index 1a9bd7da1f..010db52474 100644 --- a/lily/instrument-name-engraver.cc +++ b/lily/instrument-name-engraver.cc @@ -9,14 +9,14 @@ */ #include "engraver.hh" -#include "text-item.hh" +#include "item.hh" #include "bar.hh" #include "system-start-delimiter.hh" #include "side-position-interface.hh" class Instrument_name_engraver : public Engraver { - Text_item *text_; + Item *text_; System_start_delimiter * delim_ ; void create_text (SCM s); @@ -55,7 +55,7 @@ Instrument_name_engraver::create_text (SCM txt) { if(!text_) { - text_ = new Text_item (get_property ("basicInstrumentNameProperties")); + text_ = new Item (get_property ("basicInstrumentNameProperties")); text_->set_elt_property ("text", txt); /* diff --git a/lily/lexer.ll b/lily/lexer.ll index 57d9537bf1..44209d00e3 100644 --- a/lily/lexer.ll +++ b/lily/lexer.ll @@ -233,7 +233,8 @@ HYPHEN -- int n = 0; if (main_input_b_ && safe_global_b) { error (_ ("Can't evaluate Scheme in safe mode")); - return SCM_EOL; + yylval.scm = SCM_EOL; + return SCM_T; } yylval.scm = ly_parse_scm (s, &n); DEBUG_OUT << "Scheme: "; @@ -473,8 +474,12 @@ My_lily_lexer::scan_escaped_word (String str) if (gh_string_p (sid)) { yylval.scm = sid; return STRING_IDENTIFIER; + } else if (gh_number_p (sid)) { + yylval.scm = sid; + return NUMBER_IDENTIFIER; } + Identifier * id = unsmob_identifier (sid); if (id) { yylval.id = id; diff --git a/lily/lily-guile.cc b/lily/lily-guile.cc index 6336f7dd11..5c9c793c9e 100644 --- a/lily/lily-guile.cc +++ b/lily/lily-guile.cc @@ -353,7 +353,7 @@ ly_number2string (SCM s) char str[100]; // ugh. - if (scm_integer_p (s)) + if (scm_integer_p (s) == SCM_BOOL_F) { Real r (gh_scm2double (s)); diff --git a/lily/line-number-engraver.cc b/lily/line-number-engraver.cc index 7a9e48a6f1..2c235080e3 100644 --- a/lily/line-number-engraver.cc +++ b/lily/line-number-engraver.cc @@ -8,7 +8,7 @@ */ #include "engraver.hh" -#include "text-item.hh" +#include "item.hh" #include "side-position-interface.hh" #include "note-head.hh" #include "stem.hh" @@ -36,7 +36,7 @@ Line_number_engraver::process_acknowledged () { if (!text_item_p_ && interesting_.size ()) { - text_item_p_ = new Text_item (get_property ("basicTextProperties") ); + text_item_p_ = new Item (get_property ("basicTextProperties") ); Side_position_interface si (text_item_p_); si.set_axis (Y_AXIS); text_item_p_->set_parent (interesting_[0].elem_l_, Y_AXIS); diff --git a/lily/lyric-engraver.cc b/lily/lyric-engraver.cc index fce6048163..64a306b3ed 100644 --- a/lily/lyric-engraver.cc +++ b/lily/lyric-engraver.cc @@ -9,7 +9,7 @@ #include "lyric-engraver.hh" #include "musical-request.hh" -#include "text-item.hh" +#include "item.hh" #include "paper-def.hh" #include "lookup.hh" @@ -40,7 +40,7 @@ Lyric_engraver::do_process_music() { if (req_l_) { - text_p_= new Text_item (get_property ("basicLyricTextProperties")); + text_p_= new Item (get_property ("basicLyricTextProperties")); text_p_->set_elt_property ("text", ly_str02scm ((req_l_->text_str_ + " ").ch_C ())); diff --git a/lily/lyric-extender.cc b/lily/lyric-extender.cc index 879fa63772..e20d7d1ea9 100644 --- a/lily/lyric-extender.cc +++ b/lily/lyric-extender.cc @@ -3,13 +3,9 @@ source file of the GNU LilyPond music typesetter (c) 1998--2000 Jan Nieuwenhuizen <janneke@gnu.org> + Han-Wen Nienhuys */ -/* - TODO: too complicated implementation. Why the dx_drul?. - */ - -# #include "dimension-cache.hh" #include "box.hh" #include "debug.hh" @@ -19,62 +15,32 @@ #include "paper-def.hh" #include "extender-spanner.hh" -Lyric_extender::Lyric_extender (SCM s) - : Spanner (s) - -{ - dx_f_drul_[LEFT] = dx_f_drul_[RIGHT] = 0.0; - set_extent_callback (Score_element::point_dimension_callback, Y_AXIS); -} - - - -MAKE_SCHEME_SCORE_ELEMENT_CALLBACKS(Lyric_extender) -Molecule -Lyric_extender::do_brew_molecule () const +MAKE_SCHEME_SCORE_ELEMENT_NON_DEFAULT_CALLBACKS(Lyric_extender) +SCM +Lyric_extender::scheme_molecule (SCM smob) { - Molecule mol; - - Real w = spanner_length (); + Spanner *sp = dynamic_cast<Spanner*> (unsmob_element (smob)); - w += (dx_f_drul_[RIGHT] - dx_f_drul_[LEFT]); - Real h = paper_l ()->get_var ("extender_height"); - Molecule a = lookup_l ()->filledbox ( Box (Interval (0,w), Interval (0,h))); - a.translate (Offset (dx_f_drul_[LEFT], 0)); - - mol.add_molecule (a); - - return mol; + Real leftext = sp->get_bound (LEFT)->extent (X_AXIS).length (); + Real ss = sp->paper_l ()->get_var ("staffspace"); + Real w = sp->spanner_length () - leftext - ss/2; + + Real h = sp->paper_l ()->get_var ("extender_height"); + Molecule mol (sp->lookup_l ()->filledbox ( Box (Interval (0,w), Interval (0,h)))); + mol.translate (Offset (leftext, 0)); + return mol.create_scheme(); } - - void -Lyric_extender::after_line_breaking () +Lyric_extender::set_textitem (Direction d, Item* textitem_l) { - // UGH - Real gap = paper_l ()->get_var ("interline"); - - Direction d = LEFT; - do - { - Item* t = get_bound (d) - ? get_bound (d) : get_bound ((Direction)-d); - if (d == LEFT) - dx_f_drul_[d] += t->extent (X_AXIS).length (); - else - dx_f_drul_[d] -= d * gap / 2; - } - while (flip(&d) != LEFT); + elt_l_->set_bound (d, textitem_l); + elt_l_->add_dependency (textitem_l); } - -void -Lyric_extender::set_textitem (Direction d, Item* textitem_l) +Lyric_extender::Lyric_extender (Spanner*s) { - set_bound (d, textitem_l); - add_dependency (textitem_l); + elt_l_ = s; } - diff --git a/lily/mark-engraver.cc b/lily/mark-engraver.cc index 88c1550606..92945681de 100644 --- a/lily/mark-engraver.cc +++ b/lily/mark-engraver.cc @@ -20,7 +20,7 @@ #include "side-position-interface.hh" #include "staff-symbol-referencer.hh" #include "staff-symbol.hh" -#include "text-item.hh" +#include "item.hh" #include "group-interface.hh" /** @@ -33,7 +33,7 @@ public: VIRTUAL_COPY_CONS(Translator); Mark_engraver (); protected: - Text_item* text_p_; + Item* text_p_; Protected_scm staffs_; protected: @@ -77,7 +77,7 @@ Mark_engraver::acknowledge_element (Score_element_info inf) { /* Ugh. Figure out how to do this right at beginning of line, (without - creating class Bar_script : public Text_item). + creating class Bar_script : public Item). */ text_p_->set_parent (s, X_AXIS); } @@ -102,7 +102,7 @@ Mark_engraver::create_items (Request *rq) return; SCM s = get_property ("basicMarkProperties"); - text_p_ = new Text_item (s); + text_p_ = new Item (s); Group_interface (text_p_, "interfaces").add_thing (ly_symbol2scm ("Mark")); Side_position_interface staffside(text_p_); diff --git a/lily/midi-def.cc b/lily/midi-def.cc index 753976a9b6..1915e82071 100644 --- a/lily/midi-def.cc +++ b/lily/midi-def.cc @@ -14,12 +14,6 @@ #include "score-performer.hh" #include "debug.hh" -// classes, alphasorted -// statics -// constructors -// destructor -// routines, alphasorted - Midi_def::Midi_def() { // ugh diff --git a/lily/note-heads-engraver.cc b/lily/note-heads-engraver.cc index 431c637b84..067a3d3933 100644 --- a/lily/note-heads-engraver.cc +++ b/lily/note-heads-engraver.cc @@ -79,7 +79,11 @@ Note_heads_engraver::do_process_music() sd.set_interface (); note_p->add_dots (d); - d->set_elt_property ("dot-count", gh_int2scm (note_req_l->duration_.dots_i_)); + + if (note_req_l->duration_.dots_i_ + != gh_scm2int (d->get_elt_property ("dot-count"))) + d->set_elt_property ("dot-count", gh_int2scm (note_req_l->duration_.dots_i_)); + announce_element (Score_element_info (d,0)); dot_p_arr_.push (d); } diff --git a/lily/note-name-engraver.cc b/lily/note-name-engraver.cc index 1f03a0ea1a..d6e10628de 100644 --- a/lily/note-name-engraver.cc +++ b/lily/note-name-engraver.cc @@ -9,14 +9,14 @@ #include "engraver.hh" #include "musical-request.hh" -#include "text-item.hh" +#include "item.hh" class Note_name_engraver : public Engraver { public: VIRTUAL_COPY_CONS(Translator); Link_array<Note_req> req_l_arr_; - Link_array<Text_item> texts_; + Link_array<Item> texts_; virtual bool do_try_music (Music*m); virtual void do_process_music (); virtual void do_pre_move_processing (); @@ -46,7 +46,7 @@ Note_name_engraver::do_process_music () } if (s.length_i()) { - Text_item * t = new Text_item (SCM_EOL); + Item * t = new Item (SCM_EOL); t->set_elt_property ("text", ly_str02scm ( s.ch_C())); announce_element (Score_element_info (t, req_l_arr_[0])); texts_.push (t); diff --git a/lily/paper-def.cc b/lily/paper-def.cc index c32c88f415..cc8bd881d6 100644 --- a/lily/paper-def.cc +++ b/lily/paper-def.cc @@ -44,7 +44,6 @@ Paper_def::~Paper_def () Paper_def::Paper_def (Paper_def const&s) : Music_output_def (s) { - shape_int_a_ = s.shape_int_a_; lookup_p_tab_p_ = new map<int, Lookup*>; for (map<int,Lookup*>::const_iterator ai = s.lookup_p_tab_p_->begin(); @@ -62,19 +61,30 @@ Paper_def::get_var (String s) const return get_realvar (ly_symbol2scm (s.ch_C())); } +SCM +Paper_def::get_scmvar (String s) const +{ + return scope_p_->scm_elem (ly_symbol2scm (s.ch_C())); +} + Real Paper_def::get_realvar (SCM s) const { if (!scope_p_->elem_b (s)) - error (_f ("unknown paper variable: `%s'", ly_symbol2string (s))); - Real * p = scope_p_->elem (s)->access_content_Real (false); - if (!p) { - error (_("not a real variable")); + 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 + { + non_fatal_error (_("not a real variable")); return 0.0; } - - return *p; } /* diff --git a/lily/paper-outputter.cc b/lily/paper-outputter.cc index 97b542168b..8329051981 100644 --- a/lily/paper-outputter.cc +++ b/lily/paper-outputter.cc @@ -160,20 +160,13 @@ Paper_outputter::output_scope (Scope *scope, String prefix) { output_String_def (prefix + s, ly_scm2string (v)); } - - Identifier * id = unsmob_identifier (v); - - if(dynamic_cast<Real_identifier*> (id)) + else if (scm_integer_p (v) == SCM_BOOL_T) { - Real val = *id->access_content_Real (false); - - output_Real_def (prefix + s, val); + output_int_def (prefix + s, gh_scm2int (v)); } - else if (dynamic_cast<int_identifier*> (id)) + else if (gh_number_p (v)) { - int val = *id->access_content_int (false); - - output_int_def (prefix + s, val); + output_Real_def (prefix + s, gh_scm2double (v)); } } } diff --git a/lily/parser.yy b/lily/parser.yy index e7d2361273..fb8a04b914 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -50,7 +50,7 @@ is_duration_b (int t) // mmm JUNKME ? -Mudela_version oldest_version ("1.3.42"); +Mudela_version oldest_version ("1.3.59"); void print_mudela_versions (ostream &os) @@ -82,7 +82,6 @@ print_mudela_versions (ostream &os) %union { Array<Musical_pitch> *pitch_arr; Link_array<Request> *reqvec; - Array<int> *intvec; Duration *duration; Identifier *id; String * string; @@ -96,13 +95,13 @@ print_mudela_versions (ostream &os) Musical_pitch * pitch; Midi_def* midi; Moment *moment; - Paper_def *paper; Real real; Request * request; /* We use SCMs to do strings, because it saves us the trouble of deleting them. Let's hope that a stack overflow doesnt trigger a move of the parse stack onto the heap. */ + SCM scm; Tempo_req *tempo; @@ -197,20 +196,18 @@ yylex (YYSTYPE *s, void * v_l) %token <id> IDENTIFIER %token <id> MUSIC_IDENTIFIER %token <id> REQUEST_IDENTIFIER -%token <id> REAL_IDENTIFIER %token <id> TRANS_IDENTIFIER -%token <id> INT_IDENTIFIER +%token <scm> NUMBER_IDENTIFIER + %token <id> SCORE_IDENTIFIER -%token <id> MIDI_IDENTIFIER -%token <id> PAPER_IDENTIFIER -%token <real> REAL +%token <id> MUSIC_OUTPUT_DEF_IDENTIFIER -%token <scm> STRING_IDENTIFIER SCM_IDENTIFIER +%token <scm> STRING_IDENTIFIER SCM_IDENTIFIER %token <scm> DURATION RESTNAME -%token <scm> STRING +%token <scm> STRING %token <scm> SCM_T %token <i> UNSIGNED - +%token <real> REAL %type <outputdef> output_def %type <scope> mudela_header mudela_header_body @@ -220,14 +217,14 @@ yylex (YYSTYPE *s, void * v_l) %type <music> simple_element request_chord command_element Simple_music Composite_music %type <music> Alternative_music Repeated_music %type <i> tremolo_type -%type <i> int unsigned +%type <i> bare_int bare_unsigned %type <i> script_dir -%type <scm> identifier_init +%type <scm> identifier_init %type <duration> steno_duration optional_notemode_duration %type <duration> entered_notemode_duration explicit_duration -%type <intvec> int_list + %type <reqvec> pre_requests post_requests %type <request> gen_text_def %type <pitch> steno_musical_pitch musical_pitch absolute_musical_pitch @@ -236,7 +233,6 @@ yylex (YYSTYPE *s, void * v_l) %type <pitch_arr> chord_additions chord_subtractions chord_notes chord_step %type <music> chord %type <pitch> chord_note chord_inversion chord_bass -%type <midi> midi_block midi_body %type <duration> duration_length %type <scm> embedded_scm scalar @@ -244,14 +240,13 @@ yylex (YYSTYPE *s, void * v_l) %type <music> relative_music re_rhythmed_music %type <music> property_def translator_change %type <music_list> Music_list -%type <paper> paper_block paper_def_body -%type <real> real real_with_dimension +%type <outputdef> music_output_def_body %type <request> shorthand_command_req %type <request> post_request %type <request> command_req verbose_command_req %type <request> extender_req %type <request> hyphen_req -%type <scm> string +%type <scm> string bare_number number_expression %type <score> score_block score_body %type <trans> translator_spec_block translator_spec_body @@ -290,15 +285,13 @@ toplevel_expression: | score_block { score_global_array.push ($1); } - | paper_block { + | output_def { Identifier * id = new - Paper_def_identifier ($1, PAPER_IDENTIFIER); - THIS->lexer_p_->set_identifier ("$defaultpaper", smobify (id)) - } - | midi_block { - Identifier * id = new - Midi_def_identifier ($1, MIDI_IDENTIFIER); - THIS->lexer_p_->set_identifier ("$defaultmidi", smobify (id)) + Music_output_def_identifier ($1, MUSIC_OUTPUT_DEF_IDENTIFIER); + if (dynamic_cast<Paper_def*> ($1)) + THIS->lexer_p_->set_identifier ("$defaultpaper", smobify (id)); + else if (dynamic_cast<Midi_def*> ($1)) + THIS->lexer_p_->set_identifier ("$defaultmidi", smobify (id)); } | embedded_scm { // junk value @@ -377,14 +370,9 @@ assignment: identifier_init: score_block { $$ = smobify (new Score_identifier ($1, SCORE_IDENTIFIER)); - } - | paper_block { - $$ = smobify (new Paper_def_identifier ($1, PAPER_IDENTIFIER)); - } - | midi_block { - $$ = smobify (new Midi_def_identifier ($1, MIDI_IDENTIFIER)); - + | output_def { + $$ = smobify (new Music_output_def_identifier ($1, MUSIC_OUTPUT_DEF_IDENTIFIER)); } | translator_spec_block { $$ = smobify (new Translator_group_identifier ($1, TRANS_IDENTIFIER)); @@ -399,15 +387,12 @@ identifier_init: | explicit_duration { $$ = smobify (new Duration_identifier ($1, DURATION_IDENTIFIER)); } - | real { - $$ = smobify (new Real_identifier (new Real ($1), REAL_IDENTIFIER)); + | number_expression { + $$ = $1; } | string { $$ = $1; } - | int { - $$ = smobify (new int_identifier (new int ($1), INT_IDENTIFIER)); - } | embedded_scm { $$ = $1; } @@ -441,21 +426,12 @@ translator_spec_body: tg->set_property (ly_scm2string ($2), $4); } | translator_spec_body STRING '=' identifier_init semicolon { - Identifier* id = unsmob_identifier ($4); - - Real_identifier *r= dynamic_cast<Real_identifier*>(id); - int_identifier *i = dynamic_cast<int_identifier*> (id); - - SCM v; - if (gh_string_p ($4)) + SCM v = gh_int2scm (0); + if (gh_string_p ($4) || gh_number_p ($4)) v = $4; - else if (i) v = gh_int2scm (*i->access_content_int (false)); - else if (r) v = gh_double2scm (*r->access_content_Real (false)); else THIS->parser_error (_("Wrong type for property value")); - if (id) - delete id; /* ugh*/ Translator_group* tg = dynamic_cast<Translator_group*> ($$); @@ -490,7 +466,7 @@ score_block: { Identifier *id = unsmob_identifier (THIS->lexer_p_->lookup_identifier ("$defaultpaper")); - $$->add_output (id ? id->access_content_Paper_def (true) : new Paper_def ); + $$->add_output (id ? id->access_content_Music_output_def (true) : new Paper_def ); } } ; @@ -515,148 +491,77 @@ score_body: } ; -output_def: - paper_block { - $$ = $1; - } - | midi_block { - $$= $1; - } - ; - - -/* - PAPER -*/ -paper_block: - PAPER '{' paper_def_body '}' { - $$ = $3; - THIS-> lexer_p_->scope_l_arr_.pop (); - } - ; - - -paper_def_body: - /* empty */ { - Identifier *id = unsmob_identifier (THIS->lexer_p_->lookup_identifier ("$defaultpaper")); - Paper_def *p = id ? id->access_content_Paper_def (true) : new Paper_def; - THIS-> lexer_p_-> scope_l_arr_.push (p->scope_p_); - $$ = p; - } - | PAPER_IDENTIFIER { - Paper_def *p = $1->access_content_Paper_def (true); - THIS->lexer_p_->scope_l_arr_.push (p->scope_p_); - $$ = p; - } - | paper_def_body int '=' FONT STRING { // ugh, what a syntax - Lookup * l = new Lookup; - l->font_name_ = ly_scm2string ($5); - $$->set_lookup ($2, l); - } - | paper_def_body assignment semicolon { - - } - | paper_def_body translator_spec_block { - $$->assign_translator ($2); - } - | paper_def_body error { - - } - ; - - - -real_with_dimension: - REAL CM_T { - $$ = $1 CM; - } - | REAL PT_T { - $$ = $1 PT; - } - | REAL IN_T { - $$ = $1 INCH; - } - | REAL MM_T { - $$ = $1 MM; - } - | REAL CHAR_T { - $$ = $1 CHAR; - } - ; -real: - REAL { - $$ = $1; - } - | real_with_dimension - | REAL_IDENTIFIER { - $$= *$1->access_content_Real (false); - } - | '-' real %prec UNARY_MINUS { - $$ = -$2; - } - | real '*' real { - $$ = $1 * $3; - } - | real '/' real { - $$ = $1 / $3; - } - | real '+' real { - $$ = $1 + $3; - } - | real '-' real { - $$ = $1 - $3; - } - | '(' real ')' { - $$ = $2; - } - ; - /* MIDI */ -midi_block: - MIDI - '{' midi_body '}' { - $$ = $3; +output_def: + music_output_def_body '}' { + $$ = $1; THIS-> lexer_p_-> scope_l_arr_.pop(); } ; -midi_body: /* empty */ { +music_output_def_body: + MIDI '{' { Identifier *id = unsmob_identifier (THIS->lexer_p_->lookup_identifier ("$defaultmidi")); - Midi_def* p = id - ? id->access_content_Midi_def (true) : new Midi_def ; + + + Midi_def* p =0; + if (id) + p = dynamic_cast<Midi_def*> (id->access_content_Music_output_def (true)); + else + p = new Midi_def; $$ = p; THIS->lexer_p_->scope_l_arr_.push (p->scope_p_); } - | MIDI_IDENTIFIER { - Midi_def * p =$1-> access_content_Midi_def (true); + | PAPER '{' { + Identifier *id = unsmob_identifier (THIS->lexer_p_->lookup_identifier ("$defaultpaper")); + Paper_def *p = 0; + if (id) + p = dynamic_cast<Paper_def*> (id->access_content_Music_output_def (true)); + else + p = new Paper_def; + THIS-> lexer_p_-> scope_l_arr_.push (p->scope_p_); + $$ = p; + } + | PAPER '{' MUSIC_OUTPUT_DEF_IDENTIFIER { + Music_output_def *p = $3->access_content_Music_output_def (true); + THIS->lexer_p_->scope_l_arr_.push (p->scope_p_); $$ = p; + } + | MIDI '{' MUSIC_OUTPUT_DEF_IDENTIFIER { + Music_output_def *p = $3->access_content_Music_output_def (true); THIS->lexer_p_->scope_l_arr_.push (p->scope_p_); + $$ = p; } - | midi_body assignment semicolon { + | music_output_def_body assignment semicolon { } - | midi_body translator_spec_block { + | music_output_def_body translator_spec_block { $$-> assign_translator ($2); } - | midi_body tempo_request semicolon { + | music_output_def_body tempo_request semicolon { /* junk this ? there already is tempo stuff in music. */ - $$->set_tempo ($2->dur_.length_mom (), $2->metronome_i_); + dynamic_cast<Midi_def*> ($$)->set_tempo ($2->dur_.length_mom (), $2->metronome_i_); delete $2; } - | midi_body error { + | music_output_def_body bare_int '=' FONT STRING { // ugh, what a syntax + Lookup * l = new Lookup; + l->font_name_ = ly_scm2string ($5); + dynamic_cast<Paper_def*> ($$)->set_lookup ($2, l); + } + | music_output_def_body error { } ; tempo_request: - TEMPO steno_duration '=' unsigned { + TEMPO steno_duration '=' bare_unsigned { $$ = new Tempo_req; $$->dur_ = *$2; delete $2; @@ -695,7 +600,7 @@ Alternative_music: Repeated_music: - REPEAT STRING unsigned Music Alternative_music + REPEAT STRING bare_unsigned Music Alternative_music { Music_sequence* m = dynamic_cast <Music_sequence*> ($5); if (m && $3 < m->length_i ()) @@ -757,11 +662,11 @@ Simple_music: | MUSIC_IDENTIFIER { $$ = $1->access_content_Music (true); } | property_def | translator_change - | Simple_music '*' unsigned '/' unsigned { + | Simple_music '*' bare_unsigned '/' bare_unsigned { $$ = $1; $$->compress (Moment($3, $5 )); } - | Simple_music '*' unsigned { + | Simple_music '*' bare_unsigned { $$ = $1; $$->compress (Moment ($3, 1)); } @@ -799,7 +704,7 @@ Composite_music: THIS->remember_spot (); } /* CONTINUED */ - unsigned '/' unsigned Music + bare_unsigned '/' bare_unsigned Music { $$ = new Time_scaled_music ($3, $5, $6); @@ -882,7 +787,7 @@ property_def: scalar: string { $$ = $1; } - | int { $$ = gh_int2scm ($1); } + | bare_int { $$ = gh_int2scm ($1); } | embedded_scm { $$ = $1; } ; @@ -963,7 +868,7 @@ verbose_command_req: BAR STRING { $$ = new Bar_req (ly_scm2string ($2)); } - | COMMANDSPANREQUEST int STRING { + | COMMANDSPANREQUEST bare_int STRING { Span_req * sp_p = new Span_req; sp_p-> span_dir_ = Direction($2); sp_p->span_type_str_ = ly_scm2string ($3); @@ -980,19 +885,19 @@ verbose_command_req: $$ = m; } - | MARK unsigned { + | MARK bare_unsigned { Mark_req *m = new Mark_req; m->mark_label_ = gh_int2scm ($2); $$ = m; } - | TIME_T unsigned '/' unsigned { + | TIME_T bare_unsigned '/' bare_unsigned { Time_signature_change_req *m = new Time_signature_change_req; m->beats_i_ = $2; m->one_beat_i_=$4; $$ = m; } - | PENALTY int { + | PENALTY bare_int { Break_req * b = new Break_req; b->penalty_f_ = $2 / 100.0; b->set_spot (THIS->here_input ()); @@ -1015,19 +920,6 @@ verbose_command_req: Key_change_req *key_p= new Key_change_req; $$ = key_p; } -/* -TODO: Support for minor/major keys; make `major-scale' settable. - -FIXME: force modality. -*/ -/* - | KEY NOTENAME_PITCH { - Key_change_req *key_p= new Key_change_req; - - key_p->pitch_alist_ = scm_eval (ly_symbol2scm ("major-scale")); - $$ = key_p; - } -*/ | KEY NOTENAME_PITCH SCM_IDENTIFIER { Key_change_req *key_p= new Key_change_req; @@ -1090,9 +982,9 @@ verbose_request: $$ = ts_p; } - | SPANREQUEST int STRING { + | SPANREQUEST bare_int STRING { Span_req * sp_p = new Span_req; - sp_p-> span_dir_ = Direction($2); + sp_p->span_dir_ = Direction($2); sp_p->span_type_str_ = ly_scm2string ($3); sp_p->set_spot (THIS->here_input ()); $$ = sp_p; @@ -1172,15 +1064,15 @@ musical_pitch: ; explicit_duration: - DURATION '{' int_list '}' { + DURATION embedded_scm { $$ = new Duration; - Array<int> &a = *$3; - ARRAY_SIZE(a,2); - - $$-> durlog_i_ = a[0]; - $$-> dots_i_ = a[1]; - - delete &a; + if (scm_ilength ($2) == 2) + { + $$-> durlog_i_ = gh_scm2int (gh_car($2)); + $$-> dots_i_ = gh_scm2int (gh_cadr($2)); + } + else + THIS->parser_error (_("Must have 2 arguments for duration")); } ; @@ -1309,10 +1201,10 @@ duration_length: steno_duration { $$ = $1; } - | duration_length '*' unsigned { + | duration_length '*' bare_unsigned { $$->tuplet_iso_i_ *= $3; } - | duration_length '/' unsigned { + | duration_length '/' bare_unsigned { $$->tuplet_type_i_ *= $3; } ; @@ -1333,7 +1225,7 @@ optional_notemode_duration: ; steno_duration: - unsigned { + bare_unsigned { $$ = new Duration; if (!is_duration_b ($1)) THIS->parser_error (_f ("not a duration: %d", $1)); @@ -1354,7 +1246,7 @@ tremolo_type: ':' { $$ =0; } - | ':' unsigned { + | ':' bare_unsigned { if (!is_duration_b ($2)) THIS->parser_error (_f ("not a duration: %d", $2)); $$ = $2; @@ -1386,7 +1278,6 @@ simple_element: delete $1; delete $4; - } | RESTNAME optional_notemode_duration { Simultaneous_music* velt_p = new Request_chord; @@ -1438,16 +1329,16 @@ simple_element: | STRING optional_notemode_duration { if (!THIS->lexer_p_->lyric_state_b ()) THIS->parser_error (_ ("Have to be in Lyric mode for lyrics")); - Simultaneous_music* velt_p = new Request_chord; + Simultaneous_music* velt_p = new Request_chord; - Lyric_req* lreq_p = new Lyric_req; - lreq_p ->text_str_ = ly_scm2string ($1); - lreq_p->duration_ = *$2; - lreq_p->set_spot (THIS->here_input()); + Lyric_req* lreq_p = new Lyric_req; + lreq_p ->text_str_ = ly_scm2string ($1); + lreq_p->duration_ = *$2; + lreq_p->set_spot (THIS->here_input()); - velt_p->add_music (lreq_p); + velt_p->add_music (lreq_p); - delete $2; + delete $2; $$= velt_p; } @@ -1458,6 +1349,7 @@ simple_element: } ; + chord: steno_tonic_pitch optional_notemode_duration chord_additions chord_subtractions chord_inversion chord_bass { $$ = THIS->get_chord (*$1, $3, $4, $5, $6, *$2); @@ -1529,19 +1421,19 @@ chord_step: ; chord_note: - unsigned { + bare_unsigned { $$ = new Musical_pitch; $$->notename_i_ = ($1 - 1) % 7; $$->octave_i_ = $1 > 7 ? 1 : 0; $$->accidental_i_ = 0; } - | unsigned '+' { + | bare_unsigned '+' { $$ = new Musical_pitch; $$->notename_i_ = ($1 - 1) % 7; $$->octave_i_ = $1 > 7 ? 1 : 0; $$->accidental_i_ = 1; } - | unsigned CHORD_MINUS { + | bare_unsigned CHORD_MINUS { $$ = new Musical_pitch; $$->notename_i_ = ($1 - 1) % 7; $$->octave_i_ = $1 > 7 ? 1 : 0; @@ -1552,48 +1444,91 @@ chord_note: /* UTILITIES */ - -/* - FIXME: use scm. -*/ -/* -pitch_list: { - $$ = new Array<Musical_pitch>; +number_expression: + bare_number { + $$ = $1; } - | pitch_list musical_pitch { - $$->push (*$2); - delete $2; + | '-' number_expression %prec UNARY_MINUS { + $$ = scm_difference ($2, SCM_UNDEFINED); } - ; -*/ - -int_list: - /**/ { - $$ = new Array<int> + | number_expression '*' number_expression { + $$ = scm_product ($1, $3); + } + | number_expression '/' number_expression { + $$ = scm_divide ($1, $3); + } + | number_expression '+' number_expression { + $$ = scm_sum ($1, $3); } - | int_list int { - $$->push ($2); + | number_expression '-' number_expression { + $$ = scm_difference ($1, $3); + } + | '(' number_expression ')' { + $$ = $2; } ; -unsigned: +bare_number: UNSIGNED { - $$ = $1; + $$ = gh_int2scm ($1); } | DIGIT { + $$ = gh_int2scm ($1); + } + | REAL { + $$ = gh_double2scm ($1); + } + | NUMBER_IDENTIFIER { $$ = $1; } + | REAL CM_T { + $$ = gh_double2scm ($1 CM); + } + | REAL PT_T { + $$ = gh_double2scm ($1 PT); + } + | REAL IN_T { + $$ = gh_double2scm ($1 INCH); + } + | REAL MM_T { + $$ = gh_double2scm ($1 MM); + } + | REAL CHAR_T { + $$ = gh_double2scm ($1 CHAR); + } ; -int: - unsigned { - $$ = $1; + +bare_unsigned: + bare_number { + if (scm_integer_p ($1) == SCM_BOOL_T) { + $$ = gh_scm2int ($1); + + } else { + THIS->parser_error (_("need integer number arg")); + $$ = 0; + } + if ($$ < 0) { + THIS->parser_error (_("Must be positive integer")); + $$ = -$$; + } + } - | '-' unsigned { - $$ = -$2; + ; +bare_int: + bare_number { + if (scm_integer_p ($1) == SCM_BOOL_T) + { + int k = gh_scm2int ($1); + $$ = k; + } else + { + THIS->parser_error (_("need integer number arg")); + $$ = 0; + } } - | INT_IDENTIFIER { - $$ = *$1->access_content_int (false); + | '-' bare_int { + $$ = -$2; } ; @@ -1625,6 +1560,7 @@ questions: semicolon: ';' ; + %% void diff --git a/lily/piano-pedal-engraver.cc b/lily/piano-pedal-engraver.cc index b8a69703a7..8f43379ba5 100644 --- a/lily/piano-pedal-engraver.cc +++ b/lily/piano-pedal-engraver.cc @@ -16,8 +16,8 @@ #include "stem.hh" #include "side-position-interface.hh" #include "staff-symbol-referencer.hh" -#include "text-item.hh" -#include "sustain-pedal.hh" +#include "item.hh" + /* TODO: @@ -159,7 +159,7 @@ Piano_pedal_engraver::do_process_music () } else { - s = get_property ("stopStart" + String (p->name_ )); + s = get_property (("stopStart" + String (p->name_ )).ch_C()); } p->start_req_l_ = p->req_l_drul_[START]; } @@ -171,14 +171,14 @@ Piano_pedal_engraver::do_process_music () } else { - s = get_property ("stop" + String (p->name_ )); + s = get_property (("stop" + String (p->name_ )).ch_C()); } p->start_req_l_ = 0; } else if (p->req_l_drul_[START]) { p->start_req_l_ = p->req_l_drul_[START]; - s = get_property ("start" + String (p->name_ )); + s = get_property (("start" + String (p->name_ )).ch_C()); } if (gh_string_p (s)) @@ -186,14 +186,14 @@ Piano_pedal_engraver::do_process_music () if (p->name_ == String ("Sustain")) { // fixme: Item should be sufficient. - p->item_p_ = new Text_item (get_property ("basicSustainPedalProperties")); + p->item_p_ = new Item (get_property ("basicSustainPedalProperties")); } else { - p->item_p_ = new Text_item (get_property ("basicPedalProperties")); + p->item_p_ = new Item (get_property ("basicPedalProperties")); } - p->item_p_->set_elt_property ("text", s); - // guh + p->item_p_->set_elt_property ("text", s); + // guh Side_position_interface si (p->item_p_); si.set_axis (Y_AXIS); diff --git a/lily/rest.cc b/lily/rest.cc index 5270a355e3..24bc4d0847 100644 --- a/lily/rest.cc +++ b/lily/rest.cc @@ -14,7 +14,7 @@ #include "paper-score.hh" #include "staff-symbol-referencer.hh" - +// -> offset callback void Rest::after_line_breaking () { @@ -36,29 +36,35 @@ Rest::after_line_breaking () } -MAKE_SCHEME_SCORE_ELEMENT_CALLBACKS(Rest) -Molecule -Rest::do_brew_molecule () const +MAKE_SCHEME_SCORE_ELEMENT_NON_DEFAULT_CALLBACKS(Rest) + +SCM +Rest::scheme_molecule (SCM smob) { + Score_element* sc = unsmob_element (smob); + bool ledger_b =false; - if (balltype_i () == 0 || balltype_i () == 1) + SCM balltype = sc->get_elt_property ("duration-log"); + + if (balltype == gh_int2scm (0) || balltype == gh_int2scm (1)) { - Staff_symbol_referencer_interface si(this); - ledger_b = abs(si.position_f () - (2* balltype_i () - 1)) + Staff_symbol_referencer_interface si(sc); + ledger_b = abs(si.position_f () - (2* gh_scm2int (balltype) - 1)) > si.line_count (); } String style; - SCM style_sym =get_elt_property ("style"); - if (balltype_i () >= 2 &&gh_string_p ( style_sym)) + SCM style_sym =sc->get_elt_property ("style"); + if (gh_scm2int (balltype) >= 2 && gh_string_p (style_sym)) { style = ly_scm2string (style_sym); } - String idx = ("rests-") + to_str (balltype_i ()) + (ledger_b ? "o" : "") + style; + String idx = ("rests-") + to_str (gh_scm2int (balltype)) + + (ledger_b ? "o" : "") + style; - return lookup_l ()->afm_find (idx); + return sc-> lookup_l ()->afm_find (idx).create_scheme(); } diff --git a/lily/scope.cc b/lily/scope.cc index 96d1b86d33..c04878f934 100644 --- a/lily/scope.cc +++ b/lily/scope.cc @@ -20,15 +20,6 @@ Scope::~Scope () Scope::Scope (Scope const&s) : id_dict_ (new Scheme_hash_table (*s.id_dict_)) { - /* - cloning not necessary. - - id_dict_ = new Hash_table<Protected_scm,Identifier*> (*s.id_dict_); - for (Scope_iter ai (s); ai.ok(); ai++) - { - id_dict_->elem (ai.scm_key ()) = ai.val ()->clone (); - } - */ } Scope::Scope () diff --git a/lily/score-element.cc b/lily/score-element.cc index 906c4c5a96..a0a13eb5af 100644 --- a/lily/score-element.cc +++ b/lily/score-element.cc @@ -38,6 +38,7 @@ remove dynamic_cast<Spanner,Item> and put this code into respective */ +#define INFINITY_MSG "Infinity or NaN encountered" Score_element::Score_element(SCM basicprops) { @@ -49,9 +50,6 @@ Score_element::Score_element(SCM basicprops) status_i_ = 0; self_scm_ = SCM_EOL; original_l_ = 0; -#ifndef READONLY_PROPS - basic_property_list_ = basicprops; -#endif READONLY_PROPS property_alist_ = basicprops; pointer_alist_ = SCM_EOL; @@ -67,17 +65,7 @@ Score_element::Score_element (Score_element const&s) self_scm_ = SCM_EOL; original_l_ =(Score_element*) &s; property_alist_ = s.property_alist_; -#ifndef READONLY_PROPS - basic_property_list_ = s.basic_property_list_; - /* - TODO: should copy the private part of the list. - */ - SCM y ; - for (SCM *sp = &s.property_alist_; *sp != basic_property_list_; sp = &SCM_CDR(*sp)) - { - *sp = gh_cons ( - } -#endif + pointer_alist_ = SCM_EOL; status_i_ = s.status_i_; @@ -138,24 +126,6 @@ void Score_element::set_elt_property (String k, SCM val) { SCM sym = ly_symbol2scm (k.ch_C ()); -#ifndef READONLY_PROPS - /* - destructive if found in my part of the list. - */ - for (SCM s = property_alist_; s != basic_property_list_; s =gh_cdr (s)) - { - if (gh_caar (s)== sym) - { - gh_set_cdr_x (gh_car (s), val); - return; - } - } -/* - not found in private list. Override in private list. - */ - -#endif - property_alist_ = gh_cons (gh_cons (sym, val), property_alist_); } @@ -298,25 +268,23 @@ Score_element::do_add_processing() } -MAKE_SCHEME_SCORE_ELEMENT_CALLBACKS(Score_element) +MAKE_SCHEME_SCORE_ELEMENT_NON_DEFAULT_CALLBACKS(Score_element) - /* +/* ugh. */ - -Molecule -Score_element::do_brew_molecule () const +SCM +Score_element::scheme_molecule (SCM smob) { - SCM glyph = get_elt_property ("glyph"); + Score_element * sc = unsmob_element (smob); + SCM glyph = sc->get_elt_property ("glyph"); if (gh_string_p (glyph)) { - return lookup_l ()->afm_find (String (ly_scm2string (glyph))); + return sc->lookup_l ()->afm_find (String (ly_scm2string (glyph))).create_scheme (); } else { - Molecule m ; - m.set_empty (true); - return m; + return SCM_EOL; } } @@ -500,7 +468,12 @@ Score_element::find_broken_piece (Line_of_score*) const void Score_element::translate_axis (Real y, Axis a) { - dim_cache_[a].offset_ += y; + if (isinf (y) || isnan (y)) + programming_error (_(INFINITY_MSG)); + else + { + dim_cache_[a].offset_ += y; + } } Real @@ -532,7 +505,7 @@ Score_element::get_offset (Axis a) const if (isinf (r) || isnan (r)) { r = 0.0; - programming_error ("Infinity or NaN encountered"); + programming_error (INFINITY_MSG); } me->dim_cache_[a].offset_ +=r; } @@ -608,9 +581,9 @@ Score_element * Score_element::common_refpoint (Score_element const* s, Axis a) const { /* - I don't like the quadratic aspect of this code. Maybe this should - be rewritten some time, but the largest chain of parents might be - 10 high or so, so it shouldn't be a real issue. */ + I don't like the quadratic aspect of this code, but I see no other + way. The largest chain of parents might be 10 high or so, so + it shouldn't be a real issue. */ for (Score_element const *c = this; c; c = c->dim_cache_[a].parent_l_) for (Score_element const * d = s; d; d = d->dim_cache_[a].parent_l_) if (d == c) diff --git a/lily/span-bar.cc b/lily/span-bar.cc index da89393ba6..415f1cac8b 100644 --- a/lily/span-bar.cc +++ b/lily/span-bar.cc @@ -50,8 +50,12 @@ Span_bar::before_line_breaking () void Span_bar::after_line_breaking () { - Bar::after_line_breaking (); Interval i (get_spanned_interval ()); + + /* + Bar::brew_molecule delivers a barline of y-extent (-h/2,h/2), so + we have to translate ourselves to be in the center of the + interval that we span. */ translate_axis (i.center (), Y_AXIS); } diff --git a/lily/stem.cc b/lily/stem.cc index 6c111feee1..1ca3d9b3eb 100644 --- a/lily/stem.cc +++ b/lily/stem.cc @@ -623,7 +623,7 @@ Stem::calc_stem_info () const s = beam_l ()->get_elt_property ("shorten"); if (gh_number_p (s)) - info.idealy_f_ -= gh_double2scm (s); + info.idealy_f_ -= gh_scm2double (s); Real interstaff_f = -beam_dir* calc_interstaff_dist (this, beam_l ()); diff --git a/lily/sustain-pedal.cc b/lily/sustain-pedal.cc index 93e454441c..1906eb29ac 100644 --- a/lily/sustain-pedal.cc +++ b/lily/sustain-pedal.cc @@ -6,27 +6,34 @@ (c) 2000 Han-Wen Nienhuys <hanwen@cs.uu.nl> */ - -#include "sustain-pedal.hh" -#include "side-position-interface.hh" +#include "score-element.hh" #include "molecule.hh" #include "lookup.hh" -#include "staff-symbol-referencer.hh" -void -Sustain_pedal::after_line_breaking () +// update comment --hwn +/* + Urg. + This is almost text + Problem is: + * we have no kerning + * symbols are at wrong place in font + + + + Properties: + + glyph -- text string (TODO: make one large glyph of the Ped symbol, removes need for do_brew_molecule ()) + +*/ + +struct Sustain_pedal { - return ; - /* - UGH. Should work automatically via offset callback. - */ - Side_position_interface i (this); - Direction d = i.get_direction (); - i.set_direction (d); -} +public: + static SCM scheme_molecule (SCM); +}; -MAKE_SCHEME_SCORE_ELEMENT_NON_DEFAULT_CALLBACKS(Sustain_pedal); +MAKE_SCHEME_SCORE_ELEMENT_NON_DEFAULT_CALLBACKS(Sustain_pedal); SCM Sustain_pedal::scheme_molecule (SCM smob) @@ -57,7 +64,3 @@ Sustain_pedal::scheme_molecule (SCM smob) return mol.create_scheme (); } -Sustain_pedal ::Sustain_pedal(SCM s ) - : Item (s) -{ -} diff --git a/lily/text-engraver.cc b/lily/text-engraver.cc index a0390bd6a2..3611f59dcc 100644 --- a/lily/text-engraver.cc +++ b/lily/text-engraver.cc @@ -10,7 +10,7 @@ #include "dimension-cache.hh" #include "engraver.hh" #include "side-position-interface.hh" -#include "text-item.hh" +#include "item.hh" #include "musical-request.hh" #include "note-head.hh" #include "stem.hh" @@ -22,7 +22,7 @@ class Text_engraver : public Engraver { Link_array<Text_script_req> reqs_; - Link_array<Text_item> texts_; + Link_array<Item> texts_; public: VIRTUAL_COPY_CONS(Translator); @@ -78,7 +78,7 @@ Text_engraver::do_process_music () { Text_script_req * r = reqs_[i]; - Text_item *text = new Text_item (get_property ("basicTextScriptProperties")); + Item *text = new Item (get_property ("basicTextScriptProperties")); Side_position_interface stafy (text); SCM axisprop = get_property ("scriptHorizontal"); @@ -121,7 +121,7 @@ Text_engraver::do_pre_move_processing () { for (int i=0; i < texts_.size (); i++) { - Text_item *ti = texts_[i]; + Item *ti = texts_[i]; Side_position_interface (ti).add_staff_support (); typeset_element (ti); } diff --git a/lily/text-item.cc b/lily/text-item.cc index 35e5aa5c3d..ae3ea80b40 100644 --- a/lily/text-item.cc +++ b/lily/text-item.cc @@ -1,5 +1,5 @@ /* - text-item.cc -- implement Text_item + text-item.cc -- implement Item source file of the GNU LilyPond music typesetter @@ -7,40 +7,41 @@ */ -#include "text-item.hh" #include "debug.hh" #include "molecule.hh" #include "paper-def.hh" #include "lookup.hh" #include "staff-symbol-referencer.hh" -Text_item::Text_item (SCM s) - : Item (s) +struct Text_item { - -} + static SCM scheme_molecule (SCM); +}; -MAKE_SCHEME_SCORE_ELEMENT_CALLBACKS(Text_item) -Molecule -Text_item::do_brew_molecule () const +MAKE_SCHEME_SCORE_ELEMENT_NON_DEFAULT_CALLBACKS(Text_item) + +SCM +Text_item::scheme_molecule (SCM sm) { - SCM style = get_elt_property ("style"); + Score_element * s = unsmob_element (sm); + + SCM style = s->get_elt_property ("style"); String st = gh_string_p (style) ? ly_scm2string (style) : ""; - SCM txt = get_elt_property ("text"); + SCM txt = s-> get_elt_property ("text"); String t = gh_string_p (txt) ? ly_scm2string (txt) : ""; - Molecule mol = paper_l ()->lookup_l(0)->text (st, t, paper_l ()); + Molecule mol = s->paper_l ()->lookup_l(0)->text (st, t, s->paper_l ()); - SCM s = get_elt_property ("word-space"); - if (gh_number_p (s)) + SCM space = s->get_elt_property ("word-space"); + if (gh_number_p (space)) { Molecule m; m.set_empty (false); - mol.add_at_edge (X_AXIS, RIGHT, m, gh_scm2double (s)* - staff_symbol_referencer (this).staff_space ()); + mol.add_at_edge (X_AXIS, RIGHT, m, gh_scm2double (space)* + staff_symbol_referencer (s).staff_space ()); } - return mol; + return mol.create_scheme (); } diff --git a/lily/translator.cc b/lily/translator.cc index 9471666e8b..579deaad47 100644 --- a/lily/translator.cc +++ b/lily/translator.cc @@ -164,9 +164,9 @@ Translator::output_def_l () const } SCM -Translator::get_property (String id) const +Translator::get_property (char const * id) const { - return daddy_trans_l_->get_property (ly_symbol2scm (id.ch_C())); + return daddy_trans_l_->get_property (ly_symbol2scm (id)); } SCM diff --git a/lily/tuplet-spanner.cc b/lily/tuplet-spanner.cc index fbb5f04872..eeabe86e5b 100644 --- a/lily/tuplet-spanner.cc +++ b/lily/tuplet-spanner.cc @@ -90,25 +90,26 @@ Tuplet_spanner::do_brew_molecule () const mol.add_molecule (num); } - Real thick = paper_l ()->get_var ("tuplet_thick"); if (bracket_visibility) { - Real gap = paper_l () -> get_var ("tuplet_spanner_gap"); - Real height = staff_space; + SCM ss = paper_l ()->get_scmvar ("staffspace"); + SCM lt = paper_l ()->get_scmvar ("stafflinethickness"); + + SCM thick = get_elt_property ("thick"); + SCM gap = get_elt_property ("number-gap"); + SCM at =gh_list(ly_symbol2scm ("tuplet"), - gh_double2scm (height), - gh_double2scm (gap), - gh_double2scm (w), - gh_double2scm (dy), - gh_double2scm (thick), - gh_int2scm (dir), - SCM_UNDEFINED); + ss, + scm_product (gap, ss), + gh_double2scm (w), + gh_double2scm (dy), + scm_product (thick, lt), + gh_int2scm (dir), + SCM_UNDEFINED); Box b; mol.add_molecule (Molecule (b, at)); } - - //mol.translate_axis (dir * staff_space, Y_AXIS); } return mol; } diff --git a/ly/declarations.ly b/ly/declarations.ly index c113cfec3c..e6f16c1539 100644 --- a/ly/declarations.ly +++ b/ly/declarations.ly @@ -1,8 +1,8 @@ -breve = \duration { -1 0 } -longa = \duration { -2 0 } -maxima = \duration { -3 0 } +breve = \duration #'( -1 0) +longa = \duration #'( -2 0 ) +maxima = \duration #'( -3 0 ) #(eval-string (ly-gulp-file "generic-property.scm")) @@ -25,7 +25,7 @@ center=0 break = \penalty -1000000; nobreak = \penalty 1000000; -\include "scales.ly" +\include "scale-definitions.ly" melisma = \property Staff.melismaBusy = ##t melismaEnd = \property Staff.melismaBusy = ##f diff --git a/ly/engraver.ly b/ly/engraver.ly index 965321ee6c..4445e4afa7 100644 --- a/ly/engraver.ly +++ b/ly/engraver.ly @@ -395,11 +395,25 @@ ScoreContext = \translator { % in alphabetical order % TODO: uniform naming.; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - basicBarlineProperties = #`( + + % + % distances are given in stafflinethickness (thicknesses) and staffspace (distances) + % + + + basicBarProperties = #`( (break-align-symbol . Staff_bar) (molecule-callback . ,Bar::scheme_molecule) (visibility-lambda . ,begin-of-line-invisible) (breakable . #t) + + ;; + ;; Ross. page 151 lists other values, we opt for a leaner look + ;; + (kern . 3.0) + (thin-kern . 3.0) + (hair-thickness . 1.6) + (thick-thickness . 6.0) ) basicBarNumberProperties = #`( @@ -444,6 +458,7 @@ ScoreContext = \translator { ) basicDotsProperties = #`( (molecule-callback . ,Dots::scheme_molecule) + (dot-count . 1) ) basicDynamicLineSpannerProperties = #`( @@ -459,6 +474,9 @@ ScoreContext = \translator { (breakable . #t) ) basicHyphenSpannerProperties = #`( + (thickness . 1.0) + (height . 0.4) + (minimum-length . 0.5) (molecule-callback . ,Hyphen_spanner::scheme_molecule) ) basicKeyProperties = #`( @@ -530,6 +548,13 @@ ScoreContext = \translator { basicSystemStartDelimiterProperties = #`( (molecule-callback . ,System_start_delimiter::scheme_molecule) (collapse-height . 1.0) + (thickness . 1.6) + (arch-height . 1.5) + (arch-angle . 50.0) + (arch-thick . 0.25) + (arch-width . 1.5) + (bracket-thick . 0.25) + (bracket-width . 2.0) ) basicStemProperties = #`( (molecule-callback . ,Stem::scheme_molecule) @@ -556,6 +581,8 @@ ScoreContext = \translator { ) basicTupletSpannerProperties = #`( + (number-gap . 2.0) + (thick . 1.0) (molecule-callback . ,Tuplet_spanner::scheme_molecule) ) basicStemTremoloProperties = #`( diff --git a/ly/init.ly b/ly/init.ly index 27c3fa6612..fd0a20c879 100644 --- a/ly/init.ly +++ b/ly/init.ly @@ -1,4 +1,6 @@ % Toplevel initialisation file. + +foo = \tempo 4 = 100 ; \version "1.3.59"; diff --git a/ly/params-as.ly b/ly/params-as.ly index 974dae0b7b..f06f633e0f 100644 --- a/ly/params-as.ly +++ b/ly/params-as.ly @@ -44,12 +44,6 @@ arithmetic_basicspace = 2.; arithmetic_multiplier = 0.9 * \quartwidth ; -#'Stem_tremolo::beam-width = 1.5 * \quartwidth ; - -#'Clef_item::visibility-lambda = #postbreak-only-visibility -#'Key_item::visibility-lambda = #postbreak-only-visibility -#'Breathing_sign::visibility-lambda = #non-postbreak-visibility - % catch suspect beam slopes, set slope to zero if % outer stem is lengthened more than beam_lengthened = 0.2 * \staffspace; diff --git a/ly/params.ly b/ly/params.ly index 09e12e0680..46e240e986 100644 --- a/ly/params.ly +++ b/ly/params.ly @@ -158,35 +158,9 @@ method. %} gourlay_maxmeasures = 10.; - +% vertical space between lines. line_kern = \staffspace; -%{ Ross. page 151 lists these values, but we think that thick lines -and kernings are too thick. - -bar_kern = 0.5 * \staffspace; -bar_thinkern = 0.75 * \staffspace; -barthick_thick = 0.5* \staffspace; -barthick_score = 0.13333* \staffspace; -barthick_thin = 0.1*\staffspace; - -%} - -bar_kern = 3.0 * \stafflinethickness; -bar_thinkern = 3.0 * \stafflinethickness; -barthick_thick = 6.0* \stafflinethickness; -barthick_thin = 1.6*\stafflinethickness; -barthick_score = 1.6*\stafflinethickness; - -bracket_arch_thick = \staffspace / 4.0; -bracket_width = 2.0 * \staffspace; -bracket_thick = \staffspace / 4.0; -bracket_arch_height = 1.5 * \staffspace; -bracket_arch_width = \bracket_arch_height; -bracket_arch_angle = 50.0; - -tuplet_spanner_gap = 2.0 * \staffspace; -tuplet_thick = 1.0*\stafflinethickness; volta_thick = 1.6*\stafflinethickness; volta_spanner_height = 2.0 *\staffspace; @@ -197,9 +171,6 @@ rulethickness = \stafflinethickness; extender_height = 0.8*\stafflinethickness; -hyphen_thickness = 0.05*\font_normal; -hyphen_height = 0.2*\font_normal; -hyphen_minimum_length = 0.25*\font_normal; % Multi-measure rests multi_measure_rest_x_minimum = 2.5*\staffheight; @@ -221,9 +192,6 @@ restcollision_minimum_beamdist = 1.5; % unit for note collision resolving collision_note_width = \notewidth; %ugh. -% deprecated! -postBreakPadding = 0.0; - % optical correction amount. stemSpacingCorrection = 0.5*\staffspace; @@ -268,9 +236,6 @@ stem_default_neutral_direction = 1.0; % in staffspace articulation_script_padding_default = 1.0; -% Backward compatibility -- has no function; -Gourlay = 0.0; -Wordwrap =0.0; \include "engraver.ly"; diff --git a/scm/lily.scm b/scm/lily.scm index 2b3d8b26c4..80e3ffeb6a 100644 --- a/scm/lily.scm +++ b/scm/lily.scm @@ -136,6 +136,7 @@ ) ) +;; silly, use alist? (define (find-notehead-symbol duration style) (case style ((cross) "2cross") diff --git a/stepmake/bin/add-html-footer.py b/stepmake/bin/add-html-footer.py index 705ed904a0..adb1152088 100644 --- a/stepmake/bin/add-html-footer.py +++ b/stepmake/bin/add-html-footer.py @@ -9,13 +9,11 @@ import os import time import string import getopt -import __main__ fullname = "unknown" index_file='' -banner_file = '' changelog_file='' -changes ='' +package_name = '' package_version = '' mail_address = '(address unknown)' @@ -24,17 +22,18 @@ try: except KeyError: pass - webmaster= mail_address try: webmaster= os.environ['WEBMASTER'] except KeyError: pass +header_file = '' +footer_file = '' +default_header = r""" +""" - -footer_fn = '' -footer = r"""<hr>Please take me <a href=%s>back to the index</a> +default_footer = r"""<hr>Please take me <a href=%s>back to the index</a> of %s <!-- package name %s> <!-- webmaster fields. %s %s> @@ -44,13 +43,8 @@ builtstr = r"""<hr><font size=-1> This page was built from %s-%s by <address><br>%s <<a href="mailto:%s">%s</a>>, %s.</address><p></font>""" -package_name = '' - -(options, files) = getopt.getopt(sys.argv[1:], 'c:hp:', [ - 'name=', 'footer=', 'version=', - 'changelog=', 'help', 'news=', 'index=']) -def gulp_file(f): +def gulp_file (f): try: i = open(f) i.seek (0, 2) @@ -67,33 +61,45 @@ def gulp_file(f): def help (): sys.stdout.write (r"""Usage: add-html-footer [OPTION]... HTML-FILE -Add a nice footer, add the top of the ChangLog file (up to the ********) +Add header, footer and top of ChangLog file (up to the ********) to HTML-FILE + Options: --h, --help print this help ---version package version ---name package_name ---footer footer file + --changelog=FILE use FILE as ChangeLog [ChangeLog] + --footer=FILE use FILE as footer + --header=FILE use FILE as header + -h, --help print this help + --index=URL set homepage to URL + --name=NAME set package_name to NAME + --version=VERSION set package version to VERSION """) sys.exit (0) +(options, files) = getopt.getopt(sys.argv[1:], 'h', [ + 'changelog=', 'footer=', 'header=', 'help', 'index=', + 'name=', 'version=']) + for opt in options: o = opt[0] a = opt[1] - if o == '--news' or o == '--changelog' or o == '-c': + if o == '--changelog': changelog_file = a + elif o == '--footer': + footer_file = a + elif o == '--header': + header_file = a + elif o == '-h' or o == '--help': + help () elif o == '--index': index_file = a - elif o == '--footer': - footer_fn = a elif o == '--name': package_name = a - elif o == '-h' or o == '--help': - help () elif o == '--version': package_version = a else: raise 'unknown opt ', o -def set_vars(): + +def set_vars (): + global fullname os.environ["CONFIGSUFFIX"] = 'www'; if os.name == 'nt': import ntpwd @@ -102,36 +108,38 @@ def set_vars(): import pwd pw = pwd.getpwuid (os.getuid()); - f =pw[4] + f = pw[4] f = string.split (f, ',')[0] - __main__.fullname=f -set_vars () + fullname = f +#burp +def compose_header (): + global default_header + head = default_header + if header_file: + head = gulp_file (header_file) + return head -def footstr(index): - ft = __main__.footer +def compose_footer (index): + global default_footer + foot = default_footer - if footer_fn: - try: - ft = open (footer_fn).read () - except: - raise 'oops: ' , footer_fn + if footer_file: + foot = gulp_file (footer_file) - - s = ft % (index, package_name, package_name, webmaster, webmaster) + s = foot % (index, package_name, package_name, webmaster, webmaster) s = s + builtstr % (package_name, package_version, fullname, mail_address, mail_address, time.strftime ('%c %Z', time.localtime (time.time ()))) return s -banner = footstr (index_file) -banner_id = '<! banner_id >' - - - +set_vars () +header = compose_header () +footer = compose_footer (index_file) +header_tag = '<! header_tag >' +footer_tag = '<! footer_tag >' def do_file (s): - if changelog_file: changes = gulp_file (changelog_file) # urg? @@ -141,24 +149,31 @@ def do_file (s): changes = changes[:m.start (0)] s = re.sub ('top_of_ChangeLog', '<XMP>\n'+ changes + '\n</XMP>\n', s) + if re.search (header_tag, s) == None: + body='<BODY BGCOLOR=WHITE><FONT COLOR=BLACK>' + s = re.sub ('(?i)<body>', body, s) + if re.search ('(?i)<BODY', s): + s = re.sub ('(?i)<body[^>]*>', body + header, s) + elif re.search ('(?i)<html', s): + s = re.sub ('(?i)<html>', '<HTML>' + header, s) + else: + s = header + s - if re.search (banner_id, s) == None: - s = banner_id + s - else: - return s - - s = re.sub ('(?i)<body>', '<BODY BGCOLOR=WHITE><FONT COLOR=BLACK>', s) - # do title. - #s = check_tag ('<body', '', s, 0) - if re.search ('(?i)</body', s): - s = re.sub ('(?i)</body>', banner + '</BODY>', s) - elif re.search ('(?i)</html', s): - s = re.sub ('(?i)</html>', banner + '</HTML>', s) - else: - s = s + banner + s = header_tag + s + + if re.search (footer_tag, s) == None: + s = s + footer_tag + + if re.search ('(?i)</body', s): + s = re.sub ('(?i)</body>', footer + '</BODY>', s) + elif re.search ('(?i)</html', s): + s = re.sub ('(?i)</html>', footer + '</HTML>', s) + else: + s = s + footer return s + for f in files: s = gulp_file (f) s = do_file (s) diff --git a/stepmake/stepmake/documentation-vars.make b/stepmake/stepmake/documentation-vars.make index 6fb5343eae..440e6b9410 100644 --- a/stepmake/stepmake/documentation-vars.make +++ b/stepmake/stepmake/documentation-vars.make @@ -3,7 +3,7 @@ AT_FILES = $(BLURBS) # at-dir = $(doc-dir)/ at-ext = .in -footify=$(PYTHON) $(step-bindir)/add-html-footer.py --name $(PACKAGE_NAME) --version $(TOPLEVEL_VERSION) --footer $(depth)/Documentation/footer.html.in +footify=$(PYTHON) $(step-bindir)/add-html-footer.py --name $(PACKAGE_NAME) --version $(TOPLEVEL_VERSION) --header=$(depth)/Documentation/header.html.in --footer $(depth)/Documentation/footer.html.in footify-all-command=$(footify) `$(FIND) . -name '*.html' -print`