2002-06-29 Han-Wen <hanwen@cs.uu.nl>
+ * lily/(phrasing-)slur-engraver.cc: remove slur{Begin|End}Attachment.
+
+ * lily/separating-line-group-engraver.cc (acknowledge_grob):
+ ignore grobs with no-spacing-rods set.
+
* Documentation/user/tutorial.itely (Fine tuning a piece): more tut.
* scm/grob-description.scm (all-grob-descriptions): sort list
@end ifinfo
+
@ifnottex
@node Top
@top
See @internalsref{\NAME\}
@end macro
@end ifhtml
+@ifnothtml
+@macro seeinternals{NAME}
+@end macro
+@macro internalsref{NAME}
+@cindex \NAME\
+\NAME\
+@end macro
+@end ifnothtml
+
-@ifnothtml
-@macro seeinternals{NAME}
-@end macro
-@macro internalsref{NAME}
-@cindex \NAME\
-\NAME\
-@end macro
-@end ifnothtml
-
@c .{Reference Manual}
@node Reference Manual
@cindex diminuendo
Dynamics are grobs of @internalsref{DynamicText} and
-@internalsref{Hairpin}. Vertical positioning of these symbols is handled
-by the @internalsref{DynamicLineSpanner} grob. If you want to adjust
-padding or vertical direction of the dynamics, you must set properties
-for the @internalsref{DynamicLineSpanner} grob. Predefined identifiers
-to set the vertical direction are \dynamicUp and \dynamicDown.
+@internalsref{Hairpin}. Vertical positioning of these symbols is
+handled by the @internalsref{DynamicLineSpanner} grob. If you want to
+adjust padding or vertical direction of the dynamics, you must set
+properties for the @internalsref{DynamicLineSpanner} grob. Predefined
+identifiers to set the vertical direction are \dynamicUp and
+\dynamicDown.
@cindex direction, of dynamics
@cindex @code{\dynamicDown}
@lilypond[fragment,verbatim]
\property Staff.SustainPedal \override #'pedal-type = #'bracket
-c''4 \sustainDown d''4 e''4 a'4 \sustainUp \sustainDown f'4 g'4 a'4 \sustainUp
+c''4 \sustainDown d''4 e''4 a'4
+\sustainUp \sustainDown
+ f'4 g'4 a'4 \sustainUp
@end lilypond
A third style of pedal notation is a mixture of text and brackets,
@lilypond[fragment,verbatim]
\property Staff.SustainPedal \override #'pedal-type = #'mixed
-c''4 \sustainDown d''4 e''4 c'4 \sustainUp \sustainDown f'4 g'4 a'4 \sustainUp
+c''4 \sustainDown d''4 e''4 c'4
+\sustainUp \sustainDown
+ f'4 g'4 a'4 \sustainUp
@end lilypond
The default '*Ped' style for sustain and damper pedals corresponds to
@section Chords
@cindex Chords
-LilyPond has support for both entering and printing chords. Chords are
-characterized by a set of pitches. They are
-internally stored as simultaneous music expressions. This means you can
-enter chords by name and print them as note head, enter them as notes
-and print them as chord names, or (the most common case) enter them by
-name, and print them as name.
-
-
+LilyPond has support for both entering and printing chords.
@lilypond[verbatim,singleline]
twoWays = \notes \transpose c'' {
\chords {
\context Voice \twoWays > }
@end lilypond
-Note that this example also shows that the chord printing routines do
-not attempt to be intelligent. If you enter @code{f bes d}, it does not
-interpret this as an inversion.
+This example also shows that the chord printing routines do not try to
+be intelligent. If you enter @code{f bes d}, it does not interpret
+this as an inversion.
+
+As you can see chords really are a set of pitches. They are internally
+stored as simultaneous music expressions. This means you can enter
+chords by name and print them as notes, enter them as notes and print
+them as chord names, or (the most common case) enter them by name, and
+print them as name.
@menu
* Chords mode::
Chord mode is a mode where you can input sets of pitches using common
names. It is introduced by the keyword @code{\chords}. It is similar
to note mode, but words are also looked up in a chord modifier table
-(containing @code{maj}, @code{dim}, etc).
-
-Dashes and carets are used to indicate chord additions and subtractions,
-so articulation scripts can not be entered in Chord mode.
-
-The syntax for named chords is as follows:
-@example
- @var{tonic}[@var{duration}][@code{-}@var{modifiers}][@code{^}@var{subtractions}][@code{/}@var{inversion}][@code{/+}@var{bass}].
-@end example
-
-@var{tonic} should be the tonic note of the chord, and @var{duration} is
-the chord duration in the usual notation. There are two kinds of
-modifiers. One type is formed by @emph{chord additions}. Additions are
-obtained by listing intervals separated by dots. An interval is written
-by its number with an optional @code{+} or @code{-} to indicate raising
-or lowering by half a step. Chord additions have two effects: they adds
-the specified interval and all lower odd numbered intervals to the
-chord, and they may lower or raise the specified interval.
+(containing @code{maj}, @code{dim}, etc). Dashes and carets are used
+to indicate chord additions and subtractions, so articulation scripts
+can not be entered in Chord mode.
Throughout these examples, chords have been shifted around the staff
using @code{\transpose}.
@end lilypond
+The formal syntax for named chords is as follows:
+@example
+ @var{tonic}[@var{duration}][@code{-}@var{modifiers}][@code{^}@var{subtractions}][@code{/}@var{inversion}][@code{/+}@var{bass}].
+@end example
+
+@var{tonic} should be the tonic note of the chord, and @var{duration} is
+the chord duration in the usual notation. There are two kinds of
+modifiers. One type is formed by @emph{chord additions}. Additions are
+obtained by listing intervals separated by dots. An interval is written
+by its number with an optional @code{+} or @code{-} to indicate raising
+or lowering by half a step. Chord additions have two effects: they adds
+the specified interval and all lower odd numbered intervals to the
+chord, and they may lower or raise the specified interval.
+
+
@refbugs
-Implementation details are gory. For example @code{c:4} not only
-adds a fourth, but also removes the third.
+Implementation details are gory. For example @code{c:4} not only adds
+a fourth, but also removes the third.
@c . {Printing named chords}
\property ChordNames.chordChanges = ##t
\scheme }
\context Staff \transpose c'' \scheme
- > }
+ >
+\paper{linewidth= 9.\cm}
+}
@end lilypond
LilyPond examines chords specified as lists of notes to determine a name
@cindex mark
@cindex @code{\mark}
-
-@example
- \mark @var{unsigned}
- \mark @var{string}
- \mark \default
-@end example
-
-This command prints a rehearsal mark above the system. You can provide
-a number, a string or a markup text as argument. If you use
-@code{\default}, the value of property @code{rehearsalMark} is used and
-automatically incremented.
-
+To print a rehearsal mark, use the @code{\mark} command.
@lilypond[fragment,verbatim]
\relative c'' {
- c1 \mark "A2"
+ c1 \mark "A"
c1 \mark \default
c1 \mark \default
c1 \mark "12"
+ c1 \mark \default
c1 \mark #'(music "scripts-segno")
c1
}
@end lilypond
-The grob is @internalsref{RehearsalMark} in @internalsref{Score} context. See
-@code{input/test/boxed-molecule.ly} if you need boxes around the marks.
+As you can see, the mark is incremented automatically if you use
+@code{\mark \default}. The value to use is stored in the property
+@code{rehearsalMark} is used and automatically incremented. The grob
+is @internalsref{RehearsalMark} in @internalsref{Score} context. See
+@code{input/test/boxed-molecule.ly} if you need boxes around the
+marks.
@node Bar numbers
@subsection Bar numbers
@cindex measure numbers
@cindex currentBarNumber
-Bar numbers are @internalsref{BarNumber} grobs. They are printed at the
+ They are printed at the
start of the line. The number itself is a property that can be set by
modifying the @code{currentBarNumber} property, i.e.
@example
If you want boxed bar numbers, see the example file
@code{input/test/boxed-molecule.ly}.
+Bar numbers are @internalsref{BarNumber} grobs.
+
@refbugs
It is not possible to have bar numbers printed at regular intervals
only.
Barnumbers can collide with the StaffGroup, if there is one at the
-top. To solve this, You have to twiddle with the padding-property of
-the bar-number if your score starts with a staff-group.
+top. To solve this, You have to twiddle with the
+@internalsref{padding} property of @internalsref{BarNumber} if your
+score starts with a @internalsref{StaffGroup}.
@node Instrument names
@subsection Instrument names
-You can specify an instrument name for a staff by setting
-@code{Staff.instrument} and @code{Staff.instr}. This will print a string
-before the start of the staff. For the first start, @code{instrument} is
-used, for the next ones @code{instr} is used.
+In scores, the instrument name is printed before the staff. This can
+be done by setting @code{Staff.instrument} and
+@code{Staff.instr}. This will print a string before the start of the
+staff. For the first start, @code{instrument} is used, for the next
+ones @code{instr} is used.
@lilypond[verbatim,singleline]
\property Staff.instrument = "ploink " { c''4 }
a tone. The first version will print sharps and the second version
will print flats.
-@lilypond[fragment,verbatim]
-\context Staff {
- \clef "F"
- { \key e \major c d e f }
+@lilypond[singleline, verbatim]
+mus =\notes { \key e \major c d e f }
+\score { \notes \context Staff {
+ \clef "F" \mus
\clef "G"
- \transpose des'' { \key e \major c d e f }
- \transpose cis'' { \key e \major c d e f }
-}
+ \transpose des'' \mus
+ \transpose cis'' \mus
+}}
@end lilypond
If you want to use both @code{\transpose} and @code{\relative}, then
you must use @code{\transpose} first. @code{\relative} will have no
effect music that appears inside a @code{\transpose}.
-@node Sound output for transposing instruments
-@subsection Sound output transposing instruments
-
-When you want to make a MIDI file from a score containing transposed and
-untransposed
-instruments, you have to instruct LilyPond the pitch offset (in
-semitones) for the transposed instruments. This is done using the
-@code{transposing} property. It does not affect printed output.
-
-@cindex @code{transposing}
-
-@example
- \property Staff.instrument = #"Cl. in B-flat"
- \property Staff.transposing = #-2
-@end example
-
@c . {Multi measure rests}
@node Multi measure rests
@subsection Multi measure rests
automatically.
@lilypond[fragment,verbatim]
- \time 3/4 r2. | R2. | R2.*2 \property Score.skipBars = ##t R2.*17 R2.*4
+ \time 3/4 r2. | R2. | R2.*2
+ \property Score.skipBars = ##t R2.*17 R2.*4
@end lilypond
Notice that the @code{R2.} is printed as a whole rest, centered in the
@refbugs
-Currently, there is no way to automatically condense multiple rests into
-a single multimeasure rest.
+Currently, there is no way to automatically condense multiple rests
+into a single multimeasure rest. Multi measure rests do not take part
+in rest collisions.
@cindex condensing rests
Automatic part combining is used to merge two parts of music onto a
staff in an intelligent way. It is aimed primarily at typesetting
orchestral scores. When the two parts are identical for a period of
-time, only one is shown. In places where the two parts differ, they are
-typeset as separate voices, and stem directions are set automatically.
-Also, solo and @emph{a due} parts can be identified and marked.
+time, only one is shown. In places where the two parts differ, they
+are typeset as separate voices, and stem directions are set
+automatically. Also, solo and @emph{a due} parts can be identified
+and marked.
The syntax for part combining is
@end lilypond
+@node Sound output for transposing instruments
+@subsection Sound output for transposing instruments
+
+When you want to make a MIDI file from a score containing transposed
+and untransposed instruments, you have to instruct LilyPond the pitch
+offset (in semitones) for the transposed instruments. This is done
+using the @code{transposing} property. It does not affect printed
+output.
+
+@cindex @code{transposing}
+
+@example
+ \property Staff.instrument = #"Cl. in B-flat"
+ \property Staff.transposing = #-2
+@end example
+
+
@c . {Custodes}
@node Ancient notation
@cindex Basso continuo
-TODO. see figured-bass.ly
+LilyPond has limited support for figured bass:
+
+@lilypond[verbatim,fragment]
+<
+ \context FiguredBass
+ \figures {
+ <_! 3+ 5- _ 7! 9 >4
+ < [4 6] 8 >
+ }
+ \context Voice { c4 g8 }
+>
+@end lilypond
+
+The support for figured bass consists of two parts: there is an input
+mode, introduced by @code{\figures}, where you can enter bass figures
+as numbers, and there is a context called @internalsref{FiguredBass}
+that takes care of making @internalsref{BassFigure} grobs.
+
+In figures input mode, a group of bass figures is delimited by
+@code{<} and @code{>}. The duration is entered after the @code{>}.
+@lilypond[fragment]
+\context FiguredBass
+\figures { <4 6> }
+@end lilypond
+@example
+ <4 6>
+@end example
+
+Accidentals are added to the numbers if you alterate them by
+appending @code{-}, @code{!} and @code{+}.
+
+@lilypond[fragment]
+ \context FiguredBass
+\figures { <4- 6+ 7!> }
+@end lilypond
+@example
+ <4- 6+ 7!>
+@end example
+
+Spaces or dashes may be inserted by using @code{_}. Brackets are
+introduced with @code{[} and @code{]}.
+
+@lilypond[fragment]
+ \context FiguredBass
+\figures { < [4 6] 8 [_ 12]> }
+@end lilypond
+@example
+ < [4 6] 8 [_ 12]>
+@end example
+
+Although the support for figured bass may superficially resemble chord
+support, it works much simpler: in figured bass simply stores the
+numbers, and then prints the numbers you entered. There is no
+conversion to pitches, and no realizations of the bass are played in
+the MIDI file.
+
@c . {Tuning output}
@node Tuning output
-@node What to tune?
-@subsection What to tune?
-
-This all tells you how to tune grobs, but you don't know what variables
-to set? The question is not answered in this part of the manual
-(although you may encounter some examples.).
-
-Grob properties are tied directly to the implementation of LilyPond, and
-they are thus a moving target. Documentation of such variables is in the
-automatically generated documentation. Description of properties are
-generated from the source code for each version. This documentation is
-therefore more up to date. It should be available from the same place
-where you got this manual.
-
-To decide how to tune a grob, you need to find the following information
-@itemize @bullet
-@item
-which grob to modify
-@item
-which property to modify
-@item
-which context the grob comes from.
-@end itemize
-
-Included with the automatically generated documentation is a master list
-of grobs. Selecting a grob will take you to an overview of the
-properties available for that grob.
-
-There is also a master list of contexts. Selecting one takes you to an
-overview of that context which lists which grob types are created there.
-
-
@node Font selection
@subsection Font selection
In this section, we show some ways to fine tune the final output of a
piece. We do so using a single measure of a moderately complex piano
piece: a Brahms intermezzo (opus 119, no. 1).
+@cindex Brahms, Johannes
The code for the untuned example shows us some new things.
@lilypondfile[verbatim]{brahms-original.ly}
+
+@cindex dynamics
+@cindex loudness
+@cindex forte
+@cindex crescendo
+@cindex @code{\<}
+@cindex @code{\!}
+
+The crescendo is ended at the half note by the escaped exclamation
+mark @code{\!}.
+
Hairpin dynamics can be indicated using @code{\>} to start a
decrescendo, and @code{\!} to end one. The crescendo is started using
@code{\<} and also ended using @code{\!}. Absolute dynamics can be
-entered using @code{\p}, @code{\mf}, etc.
+entered using @code{\p}, @code{\mf}, etc. All these commands apply to
+the complete chord where they are entered, but for syntactical
+reasons, they must be attached to one of the notes of the chord.
+
+@cindex fingering instructions
Fingering indications are entered simply using @code{-@var{N}}, where
@var{N} is a digit.
@lilypondfile{brahms-tweaked.ly}
+@cindex tuning grob behavior
+
The basic process that we follow is that we override defaults in the
printing system. We do this by setting variables in so-called grobs.
Printed symbols are internally represented by Graphical Objects
etc. The initial values of these settings are set in the Scheme file
@file{scm/grob-description.scm}.
+@cindex slur attachments
+
We start with the slur: the slur in the upper part, running from the F
sharp to the A, runs from stem to stem in the printed edition, while
ours starts from the note head at the left. The following property
different types of Grobs, that may be created in 14 different context
types besides Voice.
+@cindex internal documentation
+@cindex finding grobs
+@cindex grob descriptiosn
+
The interesting information is how you can figure out which properties
to tune for your own scores. To discover this, you must have a copy of
the internals document. This is a set of HTML pages, which should be
``Documentation: other'' on the side bar, click
``lilypond-internals'', under information for users.
+You might want to bookmark either the HTML files on disk, or the one
+on the web. One word of caution is in place here: the internals
+documentation is generated from the definitions that lily uses. For
+that reason, it is strongly tied to the version of LilyPond that you
+use. Before you proceed, please make sure that you are using the
+documentation that corresponds to the LilyPond version that you use.
+
Suppose that you wanted to tune the behavior of the slur. The first
step is to get some general info on slurs in lilypond. Turn to the
-index, and look up slur. The text says
+index, and look up slur. The section on slurs says
@quotation
The grob for this object is @internalsref{Slur}, generally in
@internalsref{Voice} context.
and select ``slur'' (the list is alphabetical.)
Now you get a list of all the properties that the slur object
-supports, along with their default values.
+supports, along with their default values. Among the properties we
+find the @code{attachment} property, leading to
+@example
+ \property Voice.Slur \set #'attachment = #'(stem . stem)
+@end example
+
+If you ran the previous example, you have unknowingly already used
+this kind of command. The @file{ly/property-init.ly} contains the
+definition of @code{\stemUp}
+@example
+ stemUp = \property Voice.Stem \set #'direction = #1
+@end example
We also want to move around the fingering `3'. In the printed edition
The second fingering instruction should be moved up a little, to avoid
a collision with the slur. This could be achieved with
@code{extra-offset}, but in this case, a simpler mechanism also
-works. We insert an empty text between the 5 and note. The empty text
-pushes the fingering instruction away:
+works. We insert an empty text between the 5 and the note. The empty
+text pushes the fingering instruction away:
@example
a^" "^#'(finger "5")
@end example
finger and the note, we have disguised the fingering instruction as a
text: @code{(finger "5")}.
+Normally, one would specify dynamics in a single voice, and start and
+end dynamics (such as @b{f} and @b{p}) will be aligned with
+hairpins. In this case, we want the decrescendo to be in a different
+place from the piano sign. We achieve this by putting the dynamic
+markings in different voices. The crescendo should be above the upper
+staff. This can be forced by the precooked command
+@example
+ \dynamicsUp
+@end example
+
+However, if you do that, the decrescendo will be too close to the
+upper voice, and collide with the stems. Looking at the manual for
+dynamics, we notice that ``Vertical positioning of these symbols is
+handled by the @internalsref{DynamicLineSpanner} grob.''. If we turn
+to the documentation of @code{DynamicLineSpanner}, we find that the
+@code{DynamicLineSpanner} supports several so-called
+`interfaces'. This grob not only puts dynamic objects next to the
+staff (@code{side-position-interface}), but it also groups dynamic
+objects (@code{axis-group-interface}), is considered a dynamic sign
+itself (@code{dynamic-interface}) and is a grob: it has the
+@code{grob-interface}, with all the variables that come with it.
+
+For the moment, we are interested in the side positioning:
+@quotation
+ side-position-interface
-
-@separate
+ Position a victim object (this one) next to other objects (the
+ support). In this case, the direction signifies where to put the
+ victim object relative to the support (left or right, up or down?)
+@end quotation
+Between the grob and its support (in this case: the notes in the voice
+going down), there should be more space. This space is controlled by
+@code{padding}, so we increase it.
@example
- stemDown = \property Voice.Stem \override #'direction = #-1
+ \property Voice.DynamicLineSpanner \override #'padding = #5.0
@end example
-Set a property for all Stem grobs in the current Voice:
-@code{direction} is set to @code{-1}, which encodes down. The setting
-remains in effect until it is reverted.
+This command is almost like the command for setting slur attachments,
+but subtly different in its details. Grob properties can be
+manipulated with two commands: @code{\override} extends the grob
+variables with a setting, and @code{\revert} releases this
+setting. This has a certain theoretical appeal: the operations are
+simple and symmetric. For practical use, it can be cumbersome. Both
+commands act like parentheses: you should carefully balance the use of
+@code{\override} and @code{\revert}. The @code{\set} command is more
+friendly: it first does a @code{\revert} followed by @code{\override}.
+
+Finally, Brahms uses music notation is a slightly unorthodox way. Ties
+usually happen only within one voice. In this piece, the composer
+gladly produces ties that jump voices. We deal with this by faking
+these ties: whenever we need such a tie, we insert a notehead in a
+different voice, and blank the stem. This is done in the following
+snippet of code.
-@separate
@example
- \property Voice.Stem \revert #'direction
+ \property Voice.Stem \set #'transparent = ##t
+ d'
+ \property Voice.Stem \revert #'transparent
@end example
-Revert the to the previous setting. The effect of precisely one
-@code{\stemDown} or @code{\stemUp} is neutralized.
-
-
-@cindex dynamics
-@cindex loudness
-@cindex forte
-@code{\f} places a forte symbol under the chord. The forte applies to
-the whole chord, but the syntax requires that commands like forte and
-arpeggio are attached to a note, so here we attach them to the first
-note.
-
-On the first chord, a crescendo is started with
-@code{\<}. To be precise, the crescendo start is syntactically attached
-to the preceding note, the @code{d}.
-
-@cindex dynamics
-@cindex crescendo
-@cindex @code{\<}
-
-@cindex @code{\!}
-
-The crescendo is ended at the half note by the escaped exclamation
-mark @code{\!}.
+Finally, the last tie is forced up using @code{\tieUp}.
@node An orchestral score
New features in 1.5
-* Simple tablature.
+* Tablature support.
* Many speedups, many slowdowns.
* Better spacing. Includes subtle details like optical stem spacing.
-* More ancient notation support: mensural ligatures, porrectuses, more shapes.
+* More ancient notation support: mensural ligatures, porrectuses,
+ambituses, more shapes.
* Bracket piano pedals.
* Font completely revised and improved.
-* Completely rewritten midi input support.
\ No newline at end of file
+* Completely rewritten midi input support.
+
+* Many bugfixes
\notes\context PianoStaff <
\context Staff = up
\relative c'' <
- { \key d\major
- fis4-3_\p ( ~
- fis16 )a-5 } \\
- {
- fis16( \> d \! b \translator Staff = down
- \clef treble g ~ < g8 )e> } \\
- { s16
- d'
- ~ < d4 b4 > }
+ { \key d\major
+ fis4-3_\p ( ~
+ fis16 )a-5 } \\
+ {
+ fis16( \> d \! b \translator Staff = down
+ \clef treble g ~ < g8 )e> } \\
+ { s16
+ d'
+ ~ < d4 b4 > }
>
\context Staff = down {
- \key d \major
- \time 3/8 \clef bass s4. }
+ \key d \major
+ \time 3/8 \clef bass s4. }
>
\paper { linewidth = -1. }
}
\notes\context PianoStaff <
\context Staff = up
\relative c'' <
- { \key d\major
- \property Voice.Slur \set #'attachment = #'(stem . stem)
+ { \key d\major
+ \property Voice.Slur \set #'attachment = #'(stem . stem)
- \property Voice.Fingering \set #'extra-offset = #'(-0.3 . -1.8)
- fis4-3_\p ( ~
+ \property Voice.Fingering \set #'extra-offset = #'(-0.3 . -1.8)
+ fis4-3_\p ( ~
- \property Voice.Fingering \revert #'extra-offset
- fis16 )a^" "^#'(finger "5") } \\
- {
- \dynamicUp
- \property Voice.DynamicLineSpanner \override #'padding = #5.0
- \tieUp
- fis16( \> d \! b \translator Staff = down \clef treble g ~ < g8 )e> } \\
- { s16
- \property Voice.Stem \set #'transparent = ##t
- d'
- \property Voice.Stem \revert #'transparent
- ~ < d4 b4 > }
+ \property Voice.Fingering \revert #'extra-offset
+ fis16 )a^" "^#'(finger "5") } \\
+ {
+ \dynamicUp
+ \property Voice.DynamicLineSpanner \override #'padding = #5.0
+ \tieUp
+ fis16( \> d \! b \translator Staff = down \clef treble g ~ < g8 )e> } \\
+ { s16
+ \property Voice.Stem \set #'transparent = ##t
+ d'
+ \property Voice.Stem \revert #'transparent
+ ~ < d4 b4 > }
>
\context Staff = down {
- \key d \major
- \time 3/8 \clef bass s4. }
+ \key d \major
+ \time 3/8 \clef bass s4. }
>
\paper { linewidth = -1. }
}
else
{
Grob* phrasing_slur = phrasing_slur_l_stack_.pop ();
- SCM s = get_property ("phrasingSlurEndAttachment");
- if (gh_symbol_p (s))
- {
- index_set_cell (phrasing_slur->get_grob_property ("attachment"), STOP, s);
- }
end_phrasing_slur_l_arr_.push (phrasing_slur);
requests_arr_.pop ();
}
// (use temp. array to wait for all phrasing_slur STOPs)
Grob* phrasing_slur = new Spanner (get_property ("PhrasingSlur"));
Slur::set_interface (phrasing_slur); // can't remove.
- SCM s = get_property ("phrasingSlurBeginAttachment");
- if (gh_symbol_p (s))
- {
- index_set_cell (phrasing_slur->get_grob_property ("attachment"), START, s);
- }
start_phrasing_slur_l_arr.push (phrasing_slur);
requests_arr_.push (phrasing_slur_req_l);
announce_grob(phrasing_slur, phrasing_slur_req_l->self_scm());
/* descr */ "Print phrasing slurs. Similar to Slur_engraver",
/* creats*/ "PhrasingSlur",
/* acks */ "note-column-interface",
-/* reads */ "slurBeginAttachment slurEndAttachment slurMelismaBusy",
+/* reads */ "slurMelismaBusy",
/* write */ "");
->has_extent_callback_b(Axis_group_interface::group_extent_callback_proc, X_AXIS))
return;
+
+
+ if (to_boolean (it->get_grob_property ("no-spacing-rods")))
+ return ;
+
if (Note_spacing::has_interface (it))
{
current_spacings_.note_spacings_.push (it);
}
-
-
-
ENTER_DESCRIPTION(Separating_line_group_engraver,
/* descr */ "Generates objects for computing spacing parameters.",
/* creats*/ "SeparationItem SeparatingGroupSpanner",
ADD_INTERFACE (Side_position_interface,"side-position-interface",
- "Position a victim object (this one) next to other objects (the support).
-#'direction = where to put the victim object (left or right?)
+ "Position a victim object (this one) next to other objects (the
+support). In this case, the direction signifies where to put the
+victim object relative to the support (left or right, up or down?)
",
"side-support-elements direction-source direction side-relative-direction minimum-space padding");
else
{
Grob* slur = slur_l_stack_.pop ();
- SCM s = get_property ("slurEndAttachment");
- if (gh_symbol_p (s))
- {
- index_set_cell (slur->get_grob_property ("attachment"), STOP, s);
- }
+
end_slur_l_arr_.push (slur);
requests_arr_.pop ();
}
// (use temp. array to wait for all slur STOPs)
Grob* slur = new Spanner (get_property ("Slur"));
Slur::set_interface (slur); // cannot remove yet!
- SCM s = get_property ("slurBeginAttachment");
- if (gh_symbol_p (s))
- {
- index_set_cell (slur->get_grob_property ("attachment"), START, s);
- }
start_slur_l_arr.push (slur);
requests_arr_.push (slur_req_l);
announce_grob (slur, slur_req_l->self_scm ());
/* descr */ "Build slurs from Slur_reqs",
/* creats*/ "Slur",
/* acks */ "note-column-interface",
-/* reads */ "slurBeginAttachment slurEndAttachment slurMelismaBusy",
+/* reads */ "slurMelismaBusy",
/* write */ "");
"When true, all no typesetting is done at
this moment, causing the interpretation phase to go a lot faster. This can
help with debugging large scores.")
-
-(translator-property-description 'slurBeginAttachment symbol?
-"translates to the car of grob-property 'attachment of NoteColumn. See
-@ref{Slur}.")
-
-(translator-property-description 'slurEndAttachment symbol? "translates to the cdr of grob-property 'attachment of NoteColumn. See @ref{Slur}.")
(translator-property-description 'slurMelismaBusy boolean? "Signal a slur if automaticMelismata is set.")
(translator-property-description 'solo boolean? "set if solo is detected by the part combiner.")
(translator-property-description 'soloADue boolean? "set Solo/A due texts in the part combiner?.")
\csname%
nolilyfooter\texsuffix\endcsname
\fi
+
\newdimen\outputscale
\endinput