+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
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
@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
@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
@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.
@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.
@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
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
@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
@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.
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
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.
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
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
@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.
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.
@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.
@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:
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:
@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
@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
@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
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.
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 ?
. * 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.
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.
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 ()
valid_b_ = false;
empty_b_ = false;
off_valid_b_ = false;
- off_callback_l_ =0;
}
*/
- basic_offset_ = x;
+ extra_offset_ = x;
}
void
Dimension_cache::translate (Real x)
{
- basic_offset_ += x;
+ extra_offset_ += x;
}
Real
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_;
callback_l_ =c;
}
-void
-Dimension_cache::set_offset_callback (Offset_cache_callback c)
-{
- off_callback_l_ =c;
-}
+
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);
if (isdir_b (prop) && to_dir (prop))
text_p_->set_elt_property ("direction", prop);
-
prop = get_property ("dynamicPadding", 0);
if (gh_number_p(prop))
{
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));
if (cresc_p_)
{
::warning (_ ("Too many crescendi here"));
+
+
typeset_element (cresc_p_);
cresc_p_ = 0;
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;
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 ()
{
void init ();
public:
- Offset_cache_callback off_callback_l_;
+ Array<Offset_cache_callback> off_callbacks_;
Axis axis () const;
Real get_offset () const;
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 */
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
#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:
*/
-#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"
virtual void do_creation_processing();
};
-#endif // STAFF_SYM_GRAV_HH
+#endif // STAFF_SYMBOL_GRAV_HH
/*
- staff-sym-referencer.hh -- declare Staff_sym_referencer
+ staff-sym-referencer.hh -- declare staff_symbol_referencer
source file of the GNU LilyPond music typesetter
*/
-#ifndef STAFF_SYM_REFERENCER_HH
-#define STAFF_SYM_REFERENCER_HH
+#ifndef STAFF_SYMBOL_REFERENCER_HH
+#define STAFF_SYMBOL_REFERENCER_HH
#include "score-element.hh"
*/
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*);
/**
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 */
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<SCM> 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);
-
-}
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;
{
Side_position_interface s (this);
s.add_support (head_l);
- add_dependency (head_l);
}
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;
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
{
dim_cache_[Y_AXIS]->set_offset_callback (Side_position_interface::self_alignment);
}
+#endif
do_add_processing();
}
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;
}
/**
- 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<Item*> (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<Line_of_score*> (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;
}
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<Score_element> new_deps;
void
Score_element::handle_prebroken_dependencies()
{
- element_property_alist_
- = handle_broken_smobs (element_property_alist_, line_l ());
+ if (Item*i =dynamic_cast<Item*> (this))
+ {
+ element_property_alist_
+ = handle_broken_smobs (element_property_alist_,
+ gh_int2scm (i->break_status_dir ()));
+ }
Link_array<Score_element> old_arr, new_arr;
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);
*/
-/*
-
- TODO: Quantisation support (staccato dots between stafflines)
-
-*/
#include "debug.hh"
#include "script.hh"
#include "lookup.hh"
{
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
{
Score_element * me = dynamic_cast<Score_element*> (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);
return o;
}
+#if 0
+
+/*
+ need cascading off callbacks for this.
+ */
+Side_position_interface::quantised_side (Dimension_cache const *c)
+{
+ Score_element * me = dynamic_cast<Score_element*> (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)
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
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;
}
#include "paper-column.hh"
#include "staff-symbol-referencer.hh"
#include "paper-def.hh"
+#include "staff-side.hh"
Staff_symbol_engraver::~Staff_symbol_engraver()
{
{
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_);
+ }
}
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<Staff_symbol*> (n);
+ staff_symbol_l_ = dynamic_cast<Staff_symbol*> (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");
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 ();
}
+/*
+ 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;
}
+
{
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;
}
#'margin-shape = #'()
+
+%
+#'Local_key_item::left-padding = #'0.2
+#'Local_key_item::right-padding = #'0.4
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
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!
(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)
(define generic-timesig-properties
(cons "Time_signature"
(list
- (list 'timeSignatureStyle string? 'sigstyle))))
+ (list 'timeSignatureStyle string? 'style))))
(define generic-voice-properties
(list