From: Han-Wen Nienhuys Date: Thu, 2 Dec 1999 11:55:55 +0000 (+0100) Subject: release: 1.3.9 X-Git-Tag: release/1.3.9 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=59e4ae99bad964d00dc167919779301c5ec2a535;p=lilypond.git release: 1.3.9 --- diff --git a/CHANGES b/CHANGES index 37b136440f..dcf9175885 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,11 @@ +pl 8.hwn2 + - staff-support for Crescendi. + - padding for accidentals. + - cascading offset callbacks + pl 8.hwn1 - note-head-side - - + - naming Staff_sidify -> Side_position_interface diff --git a/Documentation/topdocs/index.tely b/Documentation/topdocs/index.tely index dc1e42e5ff..4f137441ae 100644 --- a/Documentation/topdocs/index.tely +++ b/Documentation/topdocs/index.tely @@ -64,17 +64,6 @@ project. The webpages for the stable version reside at GNU. has the development pages. @end itemize -@ignore -@unnumberedsec NEWS - - -This is what the latest version brings: -@example - -top_of_NEWS - -@end example -@end ignore @unnumberedsec Download @@ -92,7 +81,6 @@ binary 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 i386 RPM: @uref{http://linux.umbc.edu/software/lilypond/rpms/} -@item i386 RPM: @uref{ftp://ftp.freshmeat.net/pub/rpms/lilypond/} @item Windows NT: @uref{http://home.austin.rr.com/jbr/jeff/lilypond/} @end itemize diff --git a/Documentation/user/properties.itely b/Documentation/user/properties.itely index f5ead31c6c..76f89acb85 100644 --- a/Documentation/user/properties.itely +++ b/Documentation/user/properties.itely @@ -1,9 +1,16 @@ @node Properties, , , Reference Manual +Properties are Scheme values, so they have a type. The type of a +property is listed in parentheses after the property name. + +@macro propertytype{t} + (/t/) +@end macro + @cindex properties!Lyrics @table @samp - @item @code{textStyle}@indexcode{textStyle} + @item @code{textStyle}@indexcode{textStyle} @propertytype{string} Set the font for lyrics. The available font choices are @code{roman}, @code{italic}, @code{bold}, @code{large}, @code{Large}, @code{typewriter}, and @code{finger}. The @code{finger} font can @@ -18,7 +25,7 @@ @cindex properties!Thread @table @samp - @item @code{noteheadStyle}@indexcode{noteheadStyle} + @item @code{noteheadStyle}@indexcode{noteheadStyle} @propertytype{string} Selects type of note head. Choices are @code{cross}, @code{diamond}, @code{harmonic}, @code{transparent}, and @code{""}. They are shown in that order below. @@ -53,7 +60,7 @@ @table @samp - @item @code{stemStyle}@indexcode{stemStyle} + @item @code{stemStyle}@indexcode{stemStyle} @propertytype{string} By default set to @code{"grace"} meaning that all unbeamed notes with flags are typeset with a slash through the flag. Setting to @code{""} gives standard flags. @@ -65,17 +72,16 @@ @cindex properties!Voice @table @samp - @item @code{abbrev}@indexcode{abbrev} + @item @code{abbrev}@indexcode{abbrev} @propertytype{integer} Set length for tremolo to be used if no length is explicitly specified. @item @code{articulationScriptPadding}@indexcode{articulationScriptPadding} - Determines the extra space added between articulation marks, such as staccato, tenuto, trill, up/down bow or fermata, and the closest staff line or note. - @item @code{articulationScriptVerticalDirection} + @item @code{articulationScriptVerticalDirection} @propertytype{direction} @indexcode{articulationScriptVerticalDirection} Determines the location of articulation marks. Set to @code{\up} to print marks above the staff; set to @code{\down} to print marks @@ -93,7 +99,7 @@ Specifies when automatically generated beams can start. See section XREF-autobeam [FIXME]. - @item @code{beamquantisation}@indexcode{beamquantisation} + @item @code{beamQuantisation}@indexcode{beamQuantisation} @propertytype{symbol} Set to @code{\none} for no quantization. Set to @code{\normal} to quantize position and slope. Set to @code{\traditional} to avoid wedges. These three settings are available via @@ -101,7 +107,7 @@ @code{\beamposnormal}@keyindex{beamposnormal}, and @code{\beampostraditional}@keyindex{beampostraditional}. - @item @code{beamslopedamping}@indexcode{beamslopedamping} + @item @code{beamSlopeDamping}@indexcode{beamSlopeDamping} @propertytype{number} Set to @code{\none} for undamped beams. Set to @code{\normal} for damped beams. Set to @code{\infinity} for beams with zero slope. The identifiers @@ -110,15 +116,15 @@ @code{\beamslopezero}@keyindex{beamslopezero} each set the corresponding value. - @item @code{dynamicDirection}@indexcode{dynamicDirection} + @item @code{dynamicDirection}@indexcode{dynamicDirection} @propertytype{direction} Determines location of dynamic marks. Set to @code{\up} to print marks above the staff; set to @code{\down} to print marks below the staff. - @item @code{dynamicStyle}@indexcode{dynamicStyle} + @item @code{dynamicStyle}@indexcode{dynamicStyle} @propertytype{string} Set the text style for dynamics. - @item @code{fontSize}@indexcode{fontSize} + @item @code{fontSize}@indexcode{fontSize} @propertytype{number} Can be used to select smaller font sizes for music. The normal font size is 0, and the two smaller sizes are -1 and -2. @@ -201,41 +207,36 @@ the note. Determines the extra space added between the mark and the closest staff line or note. - @item @code{markDirection}@indexcode{markDirection} + @item @code{markDirection}@indexcode{markDirection} @propertytype{direction} Determines if marks should be printed above or below the staff. Set to @code{\up} to print marks above the staff; set to @code{\down} to print marks below the staff. - @item @code{midiInstrument}@indexcode{midiInstrument} + @item @code{midiInstrument}@indexcode{midiInstrument} @propertytype{string} Sets the instrument for MIDI output. If this property is not set then LilyPond will use the @code{instrument} property. This must be set to one of the strings on the list of MIDI instruments that appears in section XREF-midilist [FIXME]. If you use a string which is not listed, LilyPond will silently substitute piano. - @item @code{oldTieBehavior}@indexcode{oldTieBehavior} - Set to 1 in order to get old tie behavior where ties would - connect unequal pitches. This property is deprecated, and its - use is not recommended. - - @item @code{restStyle}@indexcode{restStyle} + @item @code{restStyle}@indexcode{restStyle} @propertytype{string} Change the layout of rests shorter than quarter notes. Currently, the standard layout @code{""} and mensural notation @code{"mensural"} are available. Mensural rests of duration 32 or shorter are not available. - @item @code{scriptHorizontal}@indexcode{scriptHorizontal} + @item @code{scriptHorizontal}@indexcode{scriptHorizontal} @propertytype{boolean} Put scripts left or right of note heads. Support for this is limited. Accidentals will collide with scripts. - @item @code{slurVerticalDirection}@indexcode{slurVerticalDirection} + @item @code{slurVerticalDirection}@indexcode{slurVerticalDirection} @propertytype{direction} Set to @code{\free} for free choice of slur direction, set to @code{\up} to force slurs up, set to @code{\down} to force slurs down. The shorthands @code{\slurup}@keyindex{slurup}, @code{\slurdown}@keyindex{slurdown}, and @code{\slurboth}@keyindex{slurboth} are available. - @item @code{slurDash}@indexcode{slurDash} + @item @code{slurDash}@indexcode{slurDash} @propertytype{number} Set to 0 for normal slurs, 1 for dotted slurs, and a larger value for dashed slurs. Identifiers @code{\slurnormal}@keyindex{slurnormal} and @@ -246,30 +247,29 @@ the note. Set length of stems. Unit is `@code{interline}/2', so @code{stemLength} defaults to 7. - @item @code{stemLeftBeamCount}@indexcode{stemLeftBeamCount} + @item @code{stemLeftBeamCount}@indexcode{stemLeftBeamCount} @propertytype{integer} Specify the number of beams to draw on the left side of the next note. Overrides automatic beaming. The value is only used once, and then it is erased. - @item @code{stemRightBeamCount}@indexcode{stemRightBeamCount} + @item @code{stemRightBeamCount}@indexcode{stemRightBeamCount} @propertytype{integer} Specify the number of beams to draw on the right side of the next note. Overrides automatic beaming. The value is only used once, and then it is erased. - @item @code{tieVerticalDirection}@indexcode{tieVerticalDirection} + @item @code{tieVerticalDirection}@indexcode{tieVerticalDirection} @propertytype{direction} Set to @code{\free} for free choice of tie direction, set to @code{\up} to force ties up, set to @code{\down} to force ties down. - @item @code{transposing}@indexcode{transposing} + @item @code{transposing}@indexcode{transposing} @propertytype{integer} Transpose the MIDI output. Set this property to the number of half-steps to transpose by. - - @item @code{textEmptyDimension}@indexcode{textEmptyDimension} + @item @code{textEmptyDimension}@indexcode{textEmptyDimension} @propertytype{boolean} If set to 1 then text placed above or below the staff is assumed to have zero width. - @item @code{textStyle}@indexcode{textStyle} + @item @code{textStyle}@indexcode{textStyle} @propertytype{string} Set the text style for superscripts and subscripts. See above for list of text styles. @@ -277,7 +277,7 @@ the note. Determines the extra space added between superscripted resp. subscripted text and the closest staff line or note. - @item @code{verticalDirection}@indexcode{verticalDirection} + @item @code{verticalDirection}@indexcode{verticalDirection} @propertytype{direction} Determines the direction of stems, subscripts, beams, slurs, and ties. Set to @code{\down} to force them down, @code{\up} to force them up, or @code{\free} to let LilyPond decide. This can be used @@ -287,12 +287,12 @@ the note. property. - @item @code{tupletDirection}@indexcode{tupletDirection} + @item @code{tupletDirection}@indexcode{tupletDirection} @propertytype{direction} Determines the direction of triplets and other tuplets. Set to @code{\down} to force them below the staff, @code{\up} to force them above, or @code{\free} to let LilyPond decide. - @item @code{tupletVisibility}@indexcode{tupletVisibility} + @item @code{tupletVisibility}@indexcode{tupletVisibility} (number) [FIXME] Determines whether tuplets of notes are labelled. Setting to 0 shows nothing; setting to 1 shows a number; setting to 2 shows a number and a bracket if there is no @@ -308,22 +308,17 @@ the note. @table @samp - @item @code{barNonAuto}@indexcode{barNonAuto} + @item @code{barNonAuto}@indexcode{barNonAuto} @propertytype{boolean} If set to 1 then bar lines will not be printed automatically; they must be explicitly created with @code{\bar} keywords. Unlike with the @code{\cadenza} keyword, measures are still counted. Bar generation will resume according to that count if this property is set to zero. - @item @code{barNumberDirection}@indexcode{barNumberDirection} + @item @code{barNumberDirection}@indexcode{barNumberDirection} @propertytype{direction} Set to @code{\up} or @code{\down} to put bar numbers above or below the staff. - @item @code{barNumberHangOnClef}@indexcode{barNumberHangOnClef} - Set to 1 to cause bar numbers to appear above or below the - clef instead of on the bar line. This property is deprecated. - Do not use. - @item @code{barNumberScriptPadding}@indexcode{barNumberScriptPadding} Sets extra space between the bar number and the bar it labels. @@ -331,45 +326,41 @@ the note. Specify the height of the bar lines if it should be different than the staff height. - @item @code{barAtLineStart}@indexcode{barAtLineStart} + @item @code{barAtLineStart}@indexcode{barAtLineStart} @propertytype{boolean} Set to 1 to produce a bar line after the clef at the start of each line (but not at the beginning of the music). - @item @code{clefStyle}@indexcode{clefStyle} + @item @code{clefStyle}@indexcode{clefStyle} @propertytype{string} Determines how clefs are typeset. If set to @code{transparent}, the clefs are not printed at all, if set to @code{fullSizeChanges}, clef changes in the middle of a line are typeset with a full size clef. By default, clef changes are typeset in smaller size. - @item @code{createKeyOnClefChange}@indexcode{createKeyOnClefChange} + @item @code{createKeyOnClefChange}@indexcode{createKeyOnClefChange} @propertytype{boolean} Set to a nonempty string if you want key signatures to be printed when the clef changes. Set to the empty string if you do not want key signatures printed. - @item @code{createInitdefaultClef}@indexcode{createInitdefaultClef} - Specify whether clefs are created on default? (Doesn't seem to - do anything.) + @item @code{createInitdefaultClef}@indexcode{createInitdefaultClef} @propertytype{boolean} + Specify whether clefs are created on default? @propertytype{Doesn't seem to + do anything.} - @item @code{defaultClef}@indexcode{defaultClef} + @item @code{defaultClef}@indexcode{defaultClef} @propertytype{string} Determines the default clef. See @code{\clef} keyword. - @item @code{markHangOnClef}@indexcode{markHangOnClef} - Set to 1 to cause marks to appear by clefs instead of by bar - lines. Deprecated, use is not recommended. - - @item @code{marginDirection}@indexcode{marginDirection} + @item @code{marginDirection}@indexcode{marginDirection} @propertytype{direction} Set to @code{\left} or @code{\right} to specify location of marginal scripts. @item @code{marginScriptPadding}@indexcode{marginScriptPadding} Specify extra space for marginal scripts. - @item @code{forgetAccidentals}@indexcode{forgetAccidentals} + @item @code{forgetAccidentals}@indexcode{forgetAccidentals} @propertytype{boolean} Causes accidentals to be printed at every note instead of remembered for the duration of a measure. - @item @code{noResetKey}@indexcode{noResetKey} + @item @code{noResetKey}@indexcode{noResetKey} @propertytype{boolean} Do not reset the key at the start of a measure. Accidentals will be printed only once and are in effect until overridden, possibly many measures later. @@ -377,24 +368,22 @@ the note. @item @code{staffLineLeading}@indexcode{staffLineLeading} Specifies the distance (in points) between lines of the staff. - @item @code{numberOfStaffLines}@indexcode{numberOfStaffLines} + @item @code{numberOfStaffLines}@indexcode{numberOfStaffLines} @propertytype{integer} Specifies the number of staff lines. The default is 5. @item @code{postBreakPadding}@indexcode{postBreakPadding} Extra space in points to be added after the clef, time signature and key signature on the staff. Deprecated, do not use. - @item @code{noVoltaBraces}@indexcode{noVoltaBraces} + @item @code{noVoltaBraces}@indexcode{noVoltaBraces} @propertytype{boolean} Set to true to suppress the printing of brackets over alternate endings specified by the command @code{\alternative}. - @item @code{numberOfStaffLines}@indexcode{numberOfStaffLines} - Sets the number of lines that the staff has. - @item @code{barAlways}@indexcode{barAlways} + @item @code{barAlways}@indexcode{barAlways} @propertytype{boolean} If set to 1 a bar line is drawn after each note. - @item @code{defaultBarType}@indexcode{defaultBarType} + @item @code{defaultBarType}@indexcode{defaultBarType} @propertytype{string} Sets the default type of bar line. See Section XREF-barlines [FIXME] for a list of available bar types. @@ -409,7 +398,7 @@ the note. @code{midiInstrument} property is not set, then @code{instrument} is used to determine the instrument for MIDI output. - @item @code{keyOctaviation}@indexcode{keyOctaviation} + @item @code{keyOctaviation}@indexcode{keyOctaviation} @propertytype{boolean} If set to 1, then keys are the same in all octaves. If set to 0 then the key signature for different octaves can be different and is specified independently: @@ -421,7 +410,7 @@ the note. The default value is 1. Can be set to zero with @code{\specialkey} or reset to 1 with @code{\normalkey}. - @item @code{timeSignatureStyle}@indexcode{timeSignatureStyle} + @item @code{timeSignatureStyle}@indexcode{timeSignatureStyle} @propertytype{string} Changes the default two-digit layout for time signatures. The following values are recognized: @@ -485,7 +474,7 @@ the note. @end mudela - @item @code{voltaSpannerDuration}@indexcode{voltaSpannerDuration} + @item @code{voltaSpannerDuration}@indexcode{voltaSpannerDuration} @propertytype{moment} Set to an integer to control the size of the brackets printed by @code{\alternative}. The integer specifies the number of whole notes duration to use for the brackets. It is rounded to the @@ -515,7 +504,7 @@ the note. @cindex properties!Score @table @samp - @item @code{skipBars}@indexcode{skipBars} + @item @code{skipBars}@indexcode{skipBars} @propertytype{boolean} Set to 1 to skip the empty bars that are produced by multimeasure notes and rests. These bars will not appear on the printed output. Set to zero (the default) to expand multimeasure @@ -537,7 +526,7 @@ r1 r1*3 R1*3\property Score.skipBars=1 r1*3 R1*3 @cindex properties!ChordNamesVoice @table @samp - @item @code{chordInversion}@indexcode{chordInversion} + @item @code{chordInversion}@indexcode{chordInversion} @propertytype{boolean} Determines whether LilyPond should look for chord inversions when translating from notes to chord names. Set to 1 to find inversions. The default is 0 which does not look for diff --git a/TODO b/TODO index a3a4e28c82..48be8ed92c 100644 --- a/TODO +++ b/TODO @@ -9,9 +9,11 @@ Most of the items are marked in the code as well Grep -i for TODO, FIXME and ugh/ugr/urg. .* TODO -. * agressive type-checking for SCM stuff. +. * use hash tabs iso. alist_ for elt property? +. * agressive type-checking for SCM stuff. + . * TODO^2: -. *make a TODO.texi, like http://www.gnu.org/software/guile/ideas.html +. * make a TODO.texi, like http://www.gnu.org/software/guile/ideas.html . * make this file understandable for 3rd parties. . * \accepts -> \acceptedby . * context in embedded SCM errors. @@ -34,7 +36,6 @@ it's some sort of a numerical (truncation/roundoff) problem. John . * fix #'margin-shape; setting indent to 0 with \shape fails . * Fixed size staff/system heights; -. * . * ly2dvi : don't repeat opus if same. . * hara kiri _8 clef. . * junk -M ? @@ -443,13 +444,8 @@ hesitate to ask. . * account for rhythmic position in measure . * etc. -. * Output class, handles : (smallish) -. * help text /(c) notice? -. * version line -. * warning /errors/progress -. * abort on error/warning; exit status -. * quiet/ignore-version options -. * logfile output + +. * logfile output? . * PS . * speed up PS code. diff --git a/VERSION b/VERSION index 0430cf942d..9c66264a28 100644 --- a/VERSION +++ b/VERSION @@ -1,8 +1,8 @@ PACKAGE_NAME=LilyPond MAJOR_VERSION=1 MINOR_VERSION=3 -PATCH_LEVEL=8 -MY_PATCH_LEVEL=uu1 +PATCH_LEVEL=9 +MY_PATCH_LEVEL= # use the above to send patches: MY_PATCH_LEVEL is always empty for a # released version. diff --git a/lily/dimension-cache.cc b/lily/dimension-cache.cc index 5899d4474a..b7cf04207a 100644 --- a/lily/dimension-cache.cc +++ b/lily/dimension-cache.cc @@ -18,7 +18,7 @@ Dimension_cache::Dimension_cache (Dimension_cache const &d) basic_offset_ = d.basic_offset_; extra_offset_ = d.extra_offset_; off_valid_b_ = d.off_valid_b_; - off_callback_l_ = d.off_callback_l_; + off_callbacks_ = d.off_callbacks_; } Dimension_cache::Dimension_cache () @@ -40,7 +40,6 @@ Dimension_cache::init() valid_b_ = false; empty_b_ = false; off_valid_b_ = false; - off_callback_l_ =0; } @@ -62,13 +61,13 @@ Dimension_cache::set_offset (Real x) */ - basic_offset_ = x; + extra_offset_ = x; } void Dimension_cache::translate (Real x) { - basic_offset_ += x; + extra_offset_ += x; } Real @@ -100,11 +99,14 @@ Dimension_cache::axis () const Real Dimension_cache::get_offset () const { - if (!off_valid_b_ && off_callback_l_ ) + if (!off_valid_b_) { Dimension_cache *d = (Dimension_cache*) this; + + d->basic_offset_ =0.0; d->off_valid_b_ = true; - d->basic_offset_ = (*off_callback_l_) (d); + for (int i=0; i < off_callbacks_.size (); i++) + d->basic_offset_ += (*off_callbacks_[i]) (d); } return basic_offset_ + extra_offset_; @@ -166,8 +168,4 @@ Dimension_cache::set_callback (Dim_cache_callback c) callback_l_ =c; } -void -Dimension_cache::set_offset_callback (Offset_cache_callback c) -{ - off_callback_l_ =c; -} + diff --git a/lily/dynamic-engraver.cc b/lily/dynamic-engraver.cc index 408fde144e..d112945de1 100644 --- a/lily/dynamic-engraver.cc +++ b/lily/dynamic-engraver.cc @@ -113,6 +113,8 @@ Dynamic_engraver::do_process_requests() text_p_->set_elt_property ("style", gh_str02scm ("dynamic")); text_p_->set_elt_property ("script-priority", gh_int2scm (100)); + text_p_->set_elt_property ("staff-support", SCM_BOOL_T); + Side_position_interface (text_p_).set_axis (Y_AXIS); @@ -134,7 +136,6 @@ Dynamic_engraver::do_process_requests() if (isdir_b (prop) && to_dir (prop)) text_p_->set_elt_property ("direction", prop); - prop = get_property ("dynamicPadding", 0); if (gh_number_p(prop)) { @@ -165,6 +166,8 @@ Dynamic_engraver::do_process_requests() assert (!new_cresc_p); new_cresc_p = new Crescendo; new_cresc_p->grow_dir_ = (span_l->span_type_str_ == "crescendo") ? BIGGER : SMALLER; + new_cresc_p->set_elt_property ("staff-support", SCM_BOOL_T); + Side_position_interface (new_cresc_p).set_axis (Y_AXIS); announce_element (Score_element_info (new_cresc_p, span_l)); @@ -177,6 +180,8 @@ Dynamic_engraver::do_process_requests() if (cresc_p_) { ::warning (_ ("Too many crescendi here")); + + typeset_element (cresc_p_); cresc_p_ = 0; @@ -223,7 +228,6 @@ Dynamic_engraver::typeset_all () if (to_end_cresc_p_) { to_end_cresc_p_->set_bounds(RIGHT,get_staff_info().musical_pcol_l ()); - typeset_element (to_end_cresc_p_); to_end_cresc_p_ =0; diff --git a/lily/grace-align-item.cc b/lily/grace-align-item.cc index 3ffb02c42d..ed1989cd9b 100644 --- a/lily/grace-align-item.cc +++ b/lily/grace-align-item.cc @@ -34,12 +34,7 @@ Grace_align_item::do_pre_processing () translate_axis (-0.5* nhw, X_AXIS); // ugh. } -void -Grace_align_item::do_substitute_element_pointer (Score_element*o, Score_element*n) -{ - Axis_align_item::do_substitute_element_pointer (o,n); - Note_head_side::do_substitute_element_pointer( o,n); -} + void Grace_align_item::do_add_processing () { diff --git a/lily/include/dimension-cache.hh b/lily/include/dimension-cache.hh index e63ffc9ee2..fc23932284 100644 --- a/lily/include/dimension-cache.hh +++ b/lily/include/dimension-cache.hh @@ -46,7 +46,7 @@ class Dimension_cache void init (); public: - Offset_cache_callback off_callback_l_; + Array off_callbacks_; Axis axis () const; Real get_offset () const; diff --git a/lily/include/grace-align-item.hh b/lily/include/grace-align-item.hh index e12dbeead2..9780c3f818 100644 --- a/lily/include/grace-align-item.hh +++ b/lily/include/grace-align-item.hh @@ -20,7 +20,6 @@ public: Grace_align_item (); protected: virtual void do_add_processing (); - virtual void do_substitute_element_pointer (Score_element*,Score_element*); virtual void do_pre_processing (); }; #endif /* GRACE_ALIGN_ITEM_HH */ diff --git a/lily/include/local-key-item.hh b/lily/include/local-key-item.hh index 96de7a8569..e10468474a 100644 --- a/lily/include/local-key-item.hh +++ b/lily/include/local-key-item.hh @@ -50,7 +50,6 @@ public: void add_pitch (Musical_pitch, bool cautionary, bool natural); protected: virtual void do_pre_processing(); - virtual void do_substitute_element_pointer (Score_element*,Score_element*); virtual Molecule* do_brew_molecule_p() const; }; #endif // LOCALKEYITEM_HH diff --git a/lily/include/score-element.hh b/lily/include/score-element.hh index 79a3daca6c..2f770ba431 100644 --- a/lily/include/score-element.hh +++ b/lily/include/score-element.hh @@ -101,7 +101,8 @@ public: #funcptr# is the function to call to update this element. */ void calculate_dependencies (int final, int busy, Score_element_method_pointer funcptr); - static SCM handle_broken_smobs (SCM, Line_of_score*); + + static SCM handle_broken_smobs (SCM, SCM criterion); virtual Score_element *find_broken_piece (Line_of_score*) const; protected: diff --git a/lily/include/staff-sym-engraver.hh b/lily/include/staff-sym-engraver.hh index 3c016b07df..18d2efceab 100644 --- a/lily/include/staff-sym-engraver.hh +++ b/lily/include/staff-sym-engraver.hh @@ -7,8 +7,8 @@ */ -#ifndef STAFF_SYM_GRAV_HH -#define STAFF_SYM_GRAV_HH +#ifndef STAFF_SYMBOL_GRAV_HH +#define STAFF_SYMBOL_GRAV_HH #include "engraver.hh" #include "moment.hh" @@ -29,4 +29,4 @@ protected: virtual void do_creation_processing(); }; -#endif // STAFF_SYM_GRAV_HH +#endif // STAFF_SYMBOL_GRAV_HH diff --git a/lily/include/staff-symbol-referencer.hh b/lily/include/staff-symbol-referencer.hh index 2dc8ae8c00..f90fe8c1e3 100644 --- a/lily/include/staff-symbol-referencer.hh +++ b/lily/include/staff-symbol-referencer.hh @@ -1,5 +1,5 @@ /* - staff-sym-referencer.hh -- declare Staff_sym_referencer + staff-sym-referencer.hh -- declare staff_symbol_referencer source file of the GNU LilyPond music typesetter @@ -7,8 +7,8 @@ */ -#ifndef STAFF_SYM_REFERENCER_HH -#define STAFF_SYM_REFERENCER_HH +#ifndef STAFF_SYMBOL_REFERENCER_HH +#define STAFF_SYMBOL_REFERENCER_HH #include "score-element.hh" @@ -19,13 +19,14 @@ */ class Staff_symbol_referencer : public virtual Score_element { - int position_i_; + Real position_f_; + protected: - Staff_symbol * staff_sym_l_; + Staff_symbol * staff_symbol_l_; public: Staff_symbol_referencer (); - void set_position (int); + void set_position (Real); void set_staff_symbol (Staff_symbol*); /** @@ -39,7 +40,8 @@ public: virtual void do_substitute_element_pointer (Score_element*,Score_element*); virtual void do_pre_processing (); virtual Real position_f () const; + }; -#endif /* STAFF_SYM_REFERENCER_HH */ +#endif /* STAFF_SYMBOL_REFERENCER_HH */ diff --git a/lily/local-key-item.cc b/lily/local-key-item.cc index ec0d2a4c1b..a8823c59c9 100644 --- a/lily/local-key-item.cc +++ b/lily/local-key-item.cc @@ -110,18 +110,26 @@ Local_key_item::do_brew_molecule_p() const if (accidental_arr_.size()) { - Box b(Interval (0, 0.6 * note_distance), Interval (0,0)); - Molecule m (lookup_l ()->fill (b)); - output->add_at_edge (X_AXIS, RIGHT, m, 0); + Drul_array pads; + + /* + Use a cons? + */ + pads[RIGHT] = get_elt_property ("right-padding"); + pads[LEFT] = get_elt_property ("left-padding"); + + Direction d = LEFT; + do { + if (!gh_number_p (pads[d])) + continue; + + Box b(Interval (0, gh_scm2double (pads[d]) * note_distance), + Interval (0,0)); + Molecule m (lookup_l ()->fill (b)); + output->add_at_edge (X_AXIS, d, m, 0); + } while ( flip (&d)!= LEFT); } return output; } -void -Local_key_item::do_substitute_element_pointer (Score_element *o, Score_element*n) -{ - Note_head_side::do_substitute_element_pointer (o,n); - Staff_symbol_referencer::do_substitute_element_pointer (o,n); - -} diff --git a/lily/lookup.cc b/lily/lookup.cc index 35bdc323a3..7f98f45965 100644 --- a/lily/lookup.cc +++ b/lily/lookup.cc @@ -448,18 +448,6 @@ Molecule Lookup::staff_brace (Real y, int staff_size) const { Molecule m; - /* - (define (pianobrace y staffht) - (let* ((step 1.0) - (minht (* 2 staffht)) - (maxht (* 7 minht)) - ) - (string-append - (select-font (string-append "feta-braces" (number->string (inexact->exact staffht))) 0) - (char (max 0 (/ (- (min y (- maxht step)) minht) step)))) - ) - ) - */ Real step = 1.0; int minht = 2 * staff_size; diff --git a/lily/note-head-side.cc b/lily/note-head-side.cc index d5d154ac0d..1406da12a6 100644 --- a/lily/note-head-side.cc +++ b/lily/note-head-side.cc @@ -14,7 +14,6 @@ Note_head_side::add_support (Item*head_l) { Side_position_interface s (this); s.add_support (head_l); - add_dependency (head_l); } diff --git a/lily/score-element.cc b/lily/score-element.cc index b65a66ca9d..b87027a0c8 100644 --- a/lily/score-element.cc +++ b/lily/score-element.cc @@ -60,6 +60,10 @@ Score_element::Score_element (Score_element const&s) self_scm_ = SCM_EOL; used_b_ = true; original_l_ =(Score_element*) &s; + + /* + should protect because smobify_self () might trigger GC. + */ element_property_alist_ = scm_protect_object (scm_list_copy (s.element_property_alist_)); dependency_arr_ = s.dependency_arr_; output_p_ =0; @@ -207,13 +211,14 @@ Score_element::add_processing() return; status_i_ ++; - /* +#if 0 + /* UGH. UGH. UGH. */ if (get_elt_property ("self-alignment-X") != SCM_UNDEFINED && !dim_cache_[X_AXIS]->off_callback_l_) { - dim_cache_[X_AXIS]->set_offset_callback (Side_position_interface::self_alignment); + dim_cache_[X_AXIS]->off_callbacks_.push (Side_position_interface::self_alignment); } if (get_elt_property ("self-alignment-Y") != SCM_UNDEFINED @@ -222,6 +227,7 @@ Score_element::add_processing() { dim_cache_[Y_AXIS]->set_offset_callback (Side_position_interface::self_alignment); } +#endif do_add_processing(); } @@ -245,8 +251,6 @@ Score_element::calculate_dependencies (int final, int busy, for (int i=0; i < extra.size(); i++) extra[i]->calculate_dependencies (final, busy, funcptr); - invalidate_cache (X_AXIS); - invalidate_cache (Y_AXIS); (this->*funcptr)(); status_i_= final; } @@ -358,28 +362,46 @@ Score_element::substitute_dependency (Score_element* old, Score_element* new_l) /** - Do break substitution, and return new value. - */ -SCM -Score_element::handle_broken_smobs (SCM s, Line_of_score * line) + Do break substitution in S, using CRITERION. Return new value. + CRITERION is either a SMOB pointer to the desired line, or a number + representing the break direction. */ +SCM +Score_element::handle_broken_smobs (SCM s, SCM criterion) { if (SMOB_IS_TYPE_B (Score_element, s)) { Score_element *sc = SMOB_TO_TYPE (Score_element, s); - if (sc->line_l () != line) + + if (gh_number_p (criterion)) { - sc= sc->find_broken_piece (line); + Item * i = dynamic_cast (sc); + Direction d = to_dir (criterion); + if (i && i->break_status_dir () != d) + { + Item *br = i->find_broken_piece (d); + return (br) ? br->self_scm_ : SCM_UNDEFINED; + } } + else + { + Score_element * ln = SMOB_TO_TYPE (Score_element, criterion); + Line_of_score * line = dynamic_cast (ln); + Score_element * br =0; + if (sc->line_l () != line) + { + br = sc->find_broken_piece (line); + return (br) ? br->self_scm_ : SCM_UNDEFINED; + } - return sc ? sc->self_scm_ : SCM_UNDEFINED; + } } else if (gh_pair_p (s)) { /* UGH! breaks on circular lists. - */ - gh_set_car_x (s, handle_broken_smobs (gh_car (s), line)); - gh_set_cdr_x (s, handle_broken_smobs (gh_cdr (s), line)); + */ + gh_set_car_x (s, handle_broken_smobs (gh_car (s), criterion)); + gh_set_cdr_x (s, handle_broken_smobs (gh_cdr (s), criterion)); } return s; } @@ -391,7 +413,8 @@ Score_element::handle_broken_dependencies() if (!line) return; - element_property_alist_ = handle_broken_smobs (element_property_alist_, line); + element_property_alist_ = handle_broken_smobs (element_property_alist_, + line->self_scm_); Link_array new_deps; @@ -418,8 +441,12 @@ Score_element::handle_broken_dependencies() void Score_element::handle_prebroken_dependencies() { - element_property_alist_ - = handle_broken_smobs (element_property_alist_, line_l ()); + if (Item*i =dynamic_cast (this)) + { + element_property_alist_ + = handle_broken_smobs (element_property_alist_, + gh_int2scm (i->break_status_dir ())); + } Link_array old_arr, new_arr; diff --git a/lily/script-engraver.cc b/lily/script-engraver.cc index b96f3b0465..a959550a77 100644 --- a/lily/script-engraver.cc +++ b/lily/script-engraver.cc @@ -75,13 +75,14 @@ Script_engraver::do_process_requests() stafy.set_direction (l->get_direction ()); SCM axisprop = get_property ("scriptHorizontal",0); - if (gh_boolean_p (axisprop) && gh_scm2bool (axisprop)) + bool xaxis = gh_boolean_p (axisprop) && gh_scm2bool (axisprop); + if (xaxis) stafy.set_axis (X_AXIS); else stafy.set_axis (Y_AXIS); - if (follow_staff && !gh_boolean_p (axisprop) && gh_scm2bool (axisprop)) - p->set_elt_property ("no-staff-support", SCM_BOOL_T); + if (!follow_staff && ! xaxis) + p->set_elt_property ("staff-support", SCM_BOOL_T); p->set_elt_property ("script-priority", priority); diff --git a/lily/script.cc b/lily/script.cc index a063601753..f523de37bb 100644 --- a/lily/script.cc +++ b/lily/script.cc @@ -7,11 +7,6 @@ */ -/* - - TODO: Quantisation support (staccato dots between stafflines) - -*/ #include "debug.hh" #include "script.hh" #include "lookup.hh" @@ -58,17 +53,8 @@ Script::do_post_processing () { Direction d = Side_position_interface (this).get_direction (); Molecule m (get_molecule(d)); - - /* - UGH UGH UGH - */ -#if 0 - if (staff_side_l_->get_elt_property ("no-staff-support") == SCM_UNDEFINED) - translate_axis (- m.dim_[Y_AXIS][Direction (-d)], Y_AXIS); -#endif } - Molecule* Script::do_brew_molecule_p () const { diff --git a/lily/staff-side.cc b/lily/staff-side.cc index c511b6fb1a..bea519b2dd 100644 --- a/lily/staff-side.cc +++ b/lily/staff-side.cc @@ -140,7 +140,7 @@ Side_position_interface::aligned_side (Dimension_cache const *c) Score_element * me = dynamic_cast (c->element_l ()); Side_position_interface s(me); Direction d = s.get_direction (); - Axis ax = s.get_axis (); + Axis ax = c->axis (); Real o = side_position (c); Interval iv = me->extent (ax); @@ -156,6 +156,35 @@ Side_position_interface::aligned_side (Dimension_cache const *c) return o; } +#if 0 + +/* + need cascading off callbacks for this. + */ +Side_position_interface::quantised_side (Dimension_cache const *c) +{ + Score_element * me = dynamic_cast (c->element_l ()); + Side_position_interface s(me); + Direction d = s.get_direction (); + Axis ax = c->axis (); + Real o = side_position (c); + Staff_symbol_referencer * st = dynamic_cast (me); + + if (st && ax == Y_AXIS) + { + st->translate_axis (o, Y_AXIS); + st->set_position (); + + st->lines_i (); + st->quantise_to_next_line (d); + st->translate_axis (o, -Y_AXIS); + } + + return o; +} +#endif + + void Side_position_interface::set_axis (Axis a) @@ -165,21 +194,21 @@ Side_position_interface::set_axis (Axis a) elt_l_->set_elt_property ("side-support" ,SCM_EOL); Axis other = Axis ((a +1)%2); - elt_l_->dim_cache_[a]->set_offset_callback (aligned_side); - elt_l_->dim_cache_[other]->set_offset_callback (0); + elt_l_->dim_cache_[a]->off_callbacks_.push (aligned_side); } Axis Side_position_interface::get_axis () const { - Offset_cache_callback c = elt_l_->dim_cache_[X_AXIS]->off_callback_l_ ; - if (c == side_position - || c == aligned_side - ) // UGH. - return X_AXIS; - else - return Y_AXIS; + Dimension_cache * c = elt_l_->dim_cache_[X_AXIS]; + for (int i=0 ; i < c->off_callbacks_.size();i ++) + if (c->off_callbacks_[i] == side_position + ||c->off_callbacks_[i] == aligned_side) + return X_AXIS; + + + return Y_AXIS; } void @@ -197,5 +226,6 @@ Side_position_interface::is_staff_side_b () const bool Side_position_interface::supported_b () const { - return elt_l_->get_elt_property ("side-support") != SCM_EOL; + SCM s =elt_l_->get_elt_property ("side-support"); + return s != SCM_UNDEFINED && s != SCM_EOL; } diff --git a/lily/staff-sym-engraver.cc b/lily/staff-sym-engraver.cc index 188cdc48ac..695d109999 100644 --- a/lily/staff-sym-engraver.cc +++ b/lily/staff-sym-engraver.cc @@ -12,6 +12,7 @@ #include "paper-column.hh" #include "staff-symbol-referencer.hh" #include "paper-def.hh" +#include "staff-side.hh" Staff_symbol_engraver::~Staff_symbol_engraver() { @@ -61,6 +62,14 @@ Staff_symbol_engraver::acknowledge_element (Score_element_info s) { st->set_staff_symbol (span_p_); } + + SCM ss =s.elem_l_->remove_elt_property ("staff-support"); + if (gh_boolean_p (ss) && gh_scm2bool (ss)) + { + Side_position_interface si (s.elem_l_); + if (si.is_staff_side_b ()) + si.add_support (span_p_); + } } diff --git a/lily/staff-symbol-referencer.cc b/lily/staff-symbol-referencer.cc index 4a0a5b7558..22b29af539 100644 --- a/lily/staff-symbol-referencer.cc +++ b/lily/staff-symbol-referencer.cc @@ -15,43 +15,44 @@ Staff_symbol_referencer::Staff_symbol_referencer () { - staff_sym_l_ =0; - position_i_ =0; + staff_symbol_l_ =0; + position_f_ =0; } void -Staff_symbol_referencer::do_substitute_element_pointer (Score_element *o, Score_element*n) +Staff_symbol_referencer::do_substitute_element_pointer (Score_element *o, + Score_element*n) { - if (staff_sym_l_ == o) + if (staff_symbol_l_ == o) { - staff_sym_l_ = dynamic_cast (n); + staff_symbol_l_ = dynamic_cast (n); } } int Staff_symbol_referencer::lines_i () const { - return (staff_sym_l_) ? staff_sym_l_->no_lines_i_ : 5; + return (staff_symbol_l_) ? staff_symbol_l_->no_lines_i_ : 5; } void Staff_symbol_referencer::set_staff_symbol (Staff_symbol*s) { - staff_sym_l_ =s; + staff_symbol_l_ =s; add_dependency (s); } Staff_symbol* Staff_symbol_referencer::staff_symbol_l () const { - return staff_sym_l_; + return staff_symbol_l_; } Real Staff_symbol_referencer::staff_line_leading_f () const { - if (staff_sym_l_) - return staff_sym_l_->staff_line_leading_f_; + if (staff_symbol_l_) + return staff_symbol_l_->staff_line_leading_f_; else if (pscore_l_ && paper_l ()) paper_l ()->get_var ("interline"); @@ -61,11 +62,11 @@ Staff_symbol_referencer::staff_line_leading_f () const Real Staff_symbol_referencer::position_f () const { - Real p = position_i_; - if (staff_sym_l_ ) + Real p = position_f_; + if (staff_symbol_l_ ) { - Graphical_element * c = common_refpoint (staff_sym_l_, Y_AXIS); - Real y = relative_coordinate (c, Y_AXIS) - staff_sym_l_->relative_coordinate (c, Y_AXIS); + Graphical_element * c = common_refpoint (staff_symbol_l_, Y_AXIS); + Real y = relative_coordinate (c, Y_AXIS) - staff_symbol_l_->relative_coordinate (c, Y_AXIS); p += 2.0 * y / staff_line_leading_f (); } @@ -74,22 +75,26 @@ Staff_symbol_referencer::position_f () const +/* + should use offset callback! + */ void Staff_symbol_referencer::do_pre_processing () { - translate_axis (position_i_ * staff_line_leading_f () /2.0, Y_AXIS); - position_i_ =0; + translate_axis (position_f_ * staff_line_leading_f () /2.0, Y_AXIS); + position_f_ =0; } void -Staff_symbol_referencer::set_position (int p) +Staff_symbol_referencer::set_position (Real p) { Real halfspace = staff_line_leading_f ()* 0.5; translate_axis (- halfspace * position_f (), Y_AXIS); - if (staff_sym_l_) + if (staff_symbol_l_) translate_axis (halfspace * p, Y_AXIS); else - position_i_ = p; + position_f_ = p; } + diff --git a/lily/time-signature-engraver.cc b/lily/time-signature-engraver.cc index 2eabe72fe4..bba35fe2b1 100644 --- a/lily/time-signature-engraver.cc +++ b/lily/time-signature-engraver.cc @@ -54,11 +54,6 @@ Time_signature_engraver::do_pre_move_processing() { if (time_signature_p_) { - SCM sigstyle = get_property ("timeSignatureStyle", 0); - if (gh_string_p (sigstyle)) - { - time_signature_p_->set_elt_property ("style", sigstyle); - } typeset_element (time_signature_p_); time_signature_p_ =0; } diff --git a/ly/params.ly b/ly/params.ly index 581520e325..61ac19f2dc 100644 --- a/ly/params.ly +++ b/ly/params.ly @@ -306,3 +306,7 @@ Wordwrap =0.0; #'margin-shape = #'() + +% +#'Local_key_item::left-padding = #'0.2 +#'Local_key_item::right-padding = #'0.4 diff --git a/make/out/lilypond.lsm b/make/out/lilypond.lsm index 03cd877898..9663028c13 100644 --- a/make/out/lilypond.lsm +++ b/make/out/lilypond.lsm @@ -1,15 +1,15 @@ Begin3 Title: LilyPond -Version: 1.3.8 -Entered-date: 24NOV99 +Version: 1.3.9 +Entered-date: 02DEC99 Description: Keywords: music notation typesetting midi fonts engraving Author: hanwen@cs.uu.nl (Han-Wen Nienhuys) janneke@gnu.org (Jan Nieuwenhuizen) Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys) Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert - 1000k lilypond-1.3.8.tar.gz + 1000k lilypond-1.3.9.tar.gz Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/ - 1000k lilypond-1.3.8.tar.gz + 1000k lilypond-1.3.9.tar.gz Copying-policy: GPL End diff --git a/make/out/lilypond.spec b/make/out/lilypond.spec index 8ce3122e2e..51cb9ffde0 100644 --- a/make/out/lilypond.spec +++ b/make/out/lilypond.spec @@ -1,9 +1,9 @@ Name: lilypond -Version: 1.3.8 +Version: 1.3.9 Release: 1 Copyright: GPL Group: Applications/Publishing -Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.8.tar.gz +Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.9.tar.gz Summary: A program for printing sheet music. URL: http://www.cs.uu.nl/~hanwen/lilypond # get Packager from (undocumented?) ~/.rpmmacros! diff --git a/scm/generic-property.scm b/scm/generic-property.scm index 48b92431a6..867d71e624 100644 --- a/scm/generic-property.scm +++ b/scm/generic-property.scm @@ -2,7 +2,7 @@ (define generic-beam-properties (cons "Beam" (list - (list 'beamslopedamping number? 'damping) + (list 'beamSlopeDamping number? 'damping) (list 'autoKneeGap number? 'auto-knee-gap) (list 'autoInterstaffKneeGap number? 'auto-interstaff-knee-gap) (list 'beamQuantisation symbol? 'slope-quantisation) @@ -105,7 +105,7 @@ (define generic-timesig-properties (cons "Time_signature" (list - (list 'timeSignatureStyle string? 'sigstyle)))) + (list 'timeSignatureStyle string? 'style)))) (define generic-voice-properties (list