]> git.donarmstrong.com Git - lilypond.git/commitdiff
Merge branch 'master' into lilypond/translation
authorFrancisco Vila <francisco.vila@hispalinux.es>
Wed, 12 Oct 2011 09:26:38 +0000 (11:26 +0200)
committerFrancisco Vila <francisco.vila@hispalinux.es>
Wed, 12 Oct 2011 09:26:38 +0000 (11:26 +0200)
277 files changed:
Documentation/GNUmakefile
Documentation/contributor/source-code.itexi
Documentation/notation/changing-defaults.itely
Documentation/notation/rhythms.itely
Documentation/notation/vocal.itely
Documentation/snippets/accordion-discant-symbols.ly
Documentation/snippets/adding-a-figured-bass-above-or-below-the-notes.ly
Documentation/snippets/adding-ambitus-per-voice.ly
Documentation/snippets/adding-an-extra-staff-at-a-line-break.ly
Documentation/snippets/adding-an-extra-staff.ly
Documentation/snippets/adding-bar-lines-to-chordnames-context.ly
Documentation/snippets/adding-beams,-slurs,-ties-etc.-when-using-tuplet-and-non-tuplet-rhythms.ly
Documentation/snippets/adding-drum-parts.ly
Documentation/snippets/adding-fingerings-to-tablatures.ly
Documentation/snippets/adding-orchestral-cues-to-a-vocal-score.ly
Documentation/snippets/adding-parentheses-around-an-expressive-mark-or-chordal-note.ly
Documentation/snippets/adding-the-current-date-to-a-score.ly
Documentation/snippets/adding-volta-brackets-to-additional-staves.ly
Documentation/snippets/additional-voices-to-avoid-collisions.ly
Documentation/snippets/adjusting-grace-note-spacing.ly
Documentation/snippets/adjusting-lyrics-vertical-spacing.ly
Documentation/snippets/adjusting-the-shape-of-falls-and-doits.ly
Documentation/snippets/aligning-and-centering-instrument-names.ly
Documentation/snippets/aligning-bar-numbers.ly
Documentation/snippets/aligning-marks-with-various-notation-objects.ly
Documentation/snippets/allowing-fingerings-to-be-printed-inside-the-staff.ly
Documentation/snippets/altering-the-length-of-beamed-stems.ly
Documentation/snippets/ambitus-with-multiple-voices.ly
Documentation/snippets/analysis-brackets-above-the-staff.ly
Documentation/snippets/ancient-fonts.ly
Documentation/snippets/ancient-notation-template----modern-transcription-of-gregorian-music.ly
Documentation/snippets/ancient-notation-template----modern-transcription-of-mensural-music.ly
Documentation/snippets/ancient-time-signatures.ly
Documentation/snippets/anglican-psalm-template.ly
Documentation/snippets/applying-note-head-styles-depending-on-the-step-of-the-scale.ly
Documentation/snippets/arabic-improvisation.ly
Documentation/snippets/asymmetric-slurs.ly
Documentation/snippets/automatic-beam-subdivisions.ly
Documentation/snippets/avoiding-collisions-with-chord-fingerings.ly
Documentation/snippets/beam-endings-in-score-context.ly
Documentation/snippets/beam-grouping-in-7-8-time.ly
Documentation/snippets/beams-across-line-breaks.ly
Documentation/snippets/blanking-staff-lines-using-the--whiteout-command.ly
Documentation/snippets/broken-crescendo-hairpin.ly
Documentation/snippets/caesura-railtracks-with-fermata.ly
Documentation/snippets/center-text-below-hairpin-dynamics.ly
Documentation/snippets/changing--flageolet-mark-size.ly
Documentation/snippets/changing-a-single-notes-size-in-a-chord.ly
Documentation/snippets/changing-beam-knee-gap.ly
Documentation/snippets/changing-chord-separator.ly
Documentation/snippets/changing-form-of-multi-measure-rests.ly
Documentation/snippets/changing-fret-orientations.ly
Documentation/snippets/changing-midi-output-to-one-channel-per-voice.ly
Documentation/snippets/changing-partcombine-texts.ly
Documentation/snippets/changing-text-and-spanner-styles-for-text-dynamics.ly
Documentation/snippets/changing-the-ambitus-gap.ly
Documentation/snippets/changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.ly
Documentation/snippets/changing-the-breath-mark-symbol.ly
Documentation/snippets/changing-the-chord-names-to-german-or-semi-german-notation.ly
Documentation/snippets/changing-the-number-of-augmentation-dots-per-note.ly
Documentation/snippets/changing-the-positions-of-figured-bass-alterations.ly
Documentation/snippets/changing-the-size-of-woodwind-diagrams.ly
Documentation/snippets/changing-the-tempo-without-a-metronome-mark.ly
Documentation/snippets/changing-the-text-for-sustain-markings.ly
Documentation/snippets/changing-the-time-signature-without-affecting-the-beaming.ly
Documentation/snippets/changing-the-tuplet-number.ly
Documentation/snippets/changing-time-signatures-inside-a-polymetric-section-using--scaledurations.ly
Documentation/snippets/chant-or-psalms-notation.ly
Documentation/snippets/chord-glissando-in-tablature.ly
Documentation/snippets/chord-name-exceptions.ly
Documentation/snippets/chord-name-major7.ly
Documentation/snippets/chordchanges-for-fretboards.ly
Documentation/snippets/clip-systems.ly
Documentation/snippets/clusters.ly
Documentation/snippets/combining-dynamics-with-markup-texts.ly
Documentation/snippets/combining-two-parts-on-the-same-staff.ly
Documentation/snippets/compound-time-signatures.ly
Documentation/snippets/conducting-signs,-measure-grouping-signs.ly
Documentation/snippets/contemporary-glissando.ly
Documentation/snippets/controlling-spanner-visibility-after-a-line-break.ly
Documentation/snippets/controlling-the-placement-of-chord-fingerings.ly
Documentation/snippets/controlling-the-vertical-ordering-of-scripts.ly
Documentation/snippets/controlling-tuplet-bracket-visibility.ly
Documentation/snippets/creating-a-delayed-turn.ly
Documentation/snippets/creating-a-sequence-of-notes-on-various-pitches.ly
Documentation/snippets/creating-arpeggios-across-notes-in-different-voices.ly
Documentation/snippets/creating-blank-staves.ly
Documentation/snippets/creating-cross-staff-arpeggios-in-a-piano-staff.ly
Documentation/snippets/creating-cross-staff-arpeggios-in-other-contexts.ly
Documentation/snippets/creating-metronome-marks-in-markup-mode.ly
Documentation/snippets/creating-real-parenthesized-dynamics.ly
Documentation/snippets/creating-simultaneous-rehearsal-marks.ly
Documentation/snippets/creating-slurs-across-voices.ly
Documentation/snippets/creating-text-spanners.ly
Documentation/snippets/cross-staff-tremolos.ly
Documentation/snippets/custodes.ly
Documentation/snippets/customizing-fretboard-fret-diagrams.ly
Documentation/snippets/customizing-markup-fret-diagrams.ly
Documentation/snippets/default-direction-of-stems-on-the-center-line-of-the-staff.ly
Documentation/snippets/defining-an-engraver-in-scheme-ambitus-engraver.ly
Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly
Documentation/snippets/display-bracket-with-only-one-staff-in-a-system.ly
Documentation/snippets/displaying-complex-chords.ly
Documentation/snippets/displaying-grob-ancestry.ly
Documentation/snippets/dodecaphonic-style-accidentals-for-each-note-including-naturals.ly
Documentation/snippets/dynamics-custom-text-spanner-postfix.ly
Documentation/snippets/dynamics-text-spanner-postfix.ly
Documentation/snippets/embedding-native-postscript-in-a--markup-block.ly
Documentation/snippets/engravers-one-by-one.ly
Documentation/snippets/engraving-ties-manually.ly
Documentation/snippets/entering-several-tuplets-using-only-one--times-command.ly
Documentation/snippets/faking-a-hammer-in-tablatures.ly
Documentation/snippets/fingering-symbols-for-wind-instruments.ly
Documentation/snippets/fingerings,-string-indications,-and-right-hand-fingerings.ly
Documentation/snippets/flamenco-notation.ly
Documentation/snippets/flat-flags-and-beam-nibs.ly
Documentation/snippets/forcing-horizontal-shift-of-notes.ly
Documentation/snippets/forcing-hyphens-to-be-shown.ly
Documentation/snippets/fretboards-alternate-tables.ly
Documentation/snippets/fretted-string-harmonics-in-tablature.ly
Documentation/snippets/generating-random-notes.ly
Documentation/snippets/graphical-and-text-woodwind-diagrams.ly
Documentation/snippets/grid-lines--changing-their-appearance.ly
Documentation/snippets/grid-lines--emphasizing-rhythms-and-notes-synchronization.ly
Documentation/snippets/grouping-beats.ly
Documentation/snippets/guitar-slides.ly
Documentation/snippets/guitar-strum-rhythms.ly
Documentation/snippets/hairpins-with-different-line-styles.ly
Documentation/snippets/hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.ly
Documentation/snippets/hiding-the-extender-line-for-text-dynamics.ly
Documentation/snippets/hymn-template.ly
Documentation/snippets/incipit.ly
Documentation/snippets/indicating-cross-staff-chords-with-arpeggio-bracket.ly
Documentation/snippets/inserting-a-caesura.ly
Documentation/snippets/isolated-percent-repeats.ly
Documentation/snippets/jazz-combo-template.ly
Documentation/snippets/keep-change-clefs-full-sized.ly
Documentation/snippets/letter-tablature-formatting.ly
Documentation/snippets/line-arrows.ly
Documentation/snippets/lyrics-alignment.ly
Documentation/snippets/makam-example.ly
Documentation/snippets/making-slurs-with-complex-dash-structure.ly
Documentation/snippets/making-some-staff-lines-thicker-than-the-others.ly
Documentation/snippets/measure-counter.ly
Documentation/snippets/mensurstriche-layout-bar-lines-between-the-staves.ly
Documentation/snippets/modern-tab-text-clef.ly
Documentation/snippets/modifying-default-values-for-articulation-shorthand-notation.ly
Documentation/snippets/moving-dotted-notes-in-polyphony.ly
Documentation/snippets/moving-slur-positions-vertically.ly
Documentation/snippets/multi-measure-rest-markup.ly
Documentation/snippets/nesting-staves.ly
Documentation/snippets/non-default-tuplet-numbers.ly
Documentation/snippets/non-traditional-key-signatures.ly
Documentation/snippets/numbers-as-easy-note-heads.ly
Documentation/snippets/open-string-harmonics-in-tablature.ly
Documentation/snippets/orchestra,-choir-and-piano-template.ly
Documentation/snippets/ottava-text.ly
Documentation/snippets/partcombine-and-autobeamoff.ly
Documentation/snippets/percent-repeat-count-visibility.ly
Documentation/snippets/percent-repeat-counter.ly
Documentation/snippets/permitting-line-breaks-within-beamed-tuplets.ly
Documentation/snippets/piano-template-simple.ly
Documentation/snippets/piano-template-with-centered-dynamics.ly
Documentation/snippets/piano-template-with-centered-lyrics.ly
Documentation/snippets/piano-template-with-melody-and-lyrics.ly
Documentation/snippets/placement-of-right-hand-fingerings.ly
Documentation/snippets/polyphony-in-tablature.ly
Documentation/snippets/positioning-arpeggios.ly
Documentation/snippets/positioning-grace-note-beams-at-the-height-of-normal-note-beams.ly
Documentation/snippets/positioning-grace-notes-with-floating-space.ly
Documentation/snippets/positioning-multi-measure-rests.ly
Documentation/snippets/positioning-text-markups-inside-slurs.ly
Documentation/snippets/preventing-extra-naturals-from-being-automatically-added.ly
Documentation/snippets/preventing-natural-signs-from-being-printed-when-the-key-signature-changes.ly
Documentation/snippets/printing-a-repeat-sign-at-the-beginning-of-a-piece.ly
Documentation/snippets/printing-bar-numbers-at-regular-intervals.ly
Documentation/snippets/printing-bar-numbers-inside-boxes-or-circles.ly
Documentation/snippets/printing-hairpins-using-al-niente-notation.ly
Documentation/snippets/printing-marks-at-the-end-of-a-line.ly
Documentation/snippets/printing-marks-on-every-staff.ly
Documentation/snippets/printing-metronome-and-rehearsal-marks-below-the-staff.ly
Documentation/snippets/printing-note-names-with-and-without-an-octave-marker.ly
Documentation/snippets/printing-the-bar-number-for-the-first-measure.ly
Documentation/snippets/quoting-another-voice-with-transposition.ly
Documentation/snippets/quoting-another-voice.ly
Documentation/snippets/recorder-fingering-chart.ly
Documentation/snippets/redefining-grace-note-global-defaults.ly
Documentation/snippets/removing-bar-numbers-from-a-score.ly
Documentation/snippets/removing-connecting-bar-lines-on-staffgroup,-pianostaff,-or-grandstaff.ly
Documentation/snippets/removing-the-first-empty-line.ly
Documentation/snippets/rest-styles.ly
Documentation/snippets/reverting-default-beam-endings.ly
Documentation/snippets/satb-choir-template---four-staves.ly
Documentation/snippets/setting-hairpin-behavior-at-bar-lines.ly
Documentation/snippets/setting-system-separators.ly
Documentation/snippets/setting-the-double-repeat-default-for-volte.ly
Documentation/snippets/setting-the-minimum-length-of-hairpins.ly
Documentation/snippets/shortening-volta-brackets.ly
Documentation/snippets/showing-chords-at-changes.ly
Documentation/snippets/simple-lead-sheet.ly
Documentation/snippets/single-staff-template-with-notes,-lyrics,-and-chords.ly
Documentation/snippets/single-staff-template-with-notes,-lyrics,-chords-and-frets.ly
Documentation/snippets/single-staff-template-with-notes-and-chords.ly
Documentation/snippets/single-staff-template-with-notes-and-lyrics.ly
Documentation/snippets/single-staff-template-with-only-notes.ly
Documentation/snippets/slides-in-tablature.ly
Documentation/snippets/snap-pizzicato-bartok-pizzicato.ly
Documentation/snippets/stand-alone-two-column-markup.ly
Documentation/snippets/stem-and-beam-behavior-in-tablature.ly
Documentation/snippets/string-quartet-template-simple.ly
Documentation/snippets/string-quartet-template-with-separate-parts.ly
Documentation/snippets/subdividing-beams.ly
Documentation/snippets/time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly
Documentation/snippets/transcription-of-ancient-music-with-incipit.ly
Documentation/snippets/transposing-pitches-with-minimum-accidentals-smart-transpose.ly
Documentation/snippets/tweaking-clef-properties.ly
Documentation/snippets/tweaking-grace-layout-within-music.ly
Documentation/snippets/use-square-bracket-at-the-start-of-a-staff-group.ly
Documentation/snippets/using-alternative-flag-styles.ly
Documentation/snippets/using-arpeggiobracket-to-make-divisi-more-visible.ly
Documentation/snippets/using-double-slurs-for-legato-chords.ly
Documentation/snippets/using-grace-note-slashes-with-normal-heads.ly
Documentation/snippets/using-ly-grob-object-to-access-grobs-with--tweak.ly
Documentation/snippets/using-the-whiteout-property.ly
Documentation/snippets/using-ties-with-arpeggios.ly
Documentation/snippets/vertically-aligned-dynamics-and-textscripts.ly
Documentation/snippets/vertically-aligning-dynamics-across-multiple-notes.ly
Documentation/snippets/vertically-aligning-ossias-and-lyrics.ly
Documentation/snippets/vertically-centering-paired-figured-bass-extenders.ly
Documentation/snippets/vocal-ensemble-template-with-automatic-piano-reduction.ly
Documentation/snippets/vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly
Documentation/snippets/vocal-ensemble-template-with-verse-and-refrain.ly
Documentation/snippets/vocal-ensemble-template.ly
Documentation/snippets/volta-below-chords.ly
Documentation/snippets/woodwind-diagrams-key-lists.ly
Documentation/snippets/woodwind-diagrams-listing.ly
Documentation/web/news-front.itexi
VERSION
input/regression/glissando-skip.ly [new file with mode: 0644]
input/regression/part-combine-3voices.ly [new file with mode: 0644]
lily/audio-item.cc
lily/beam-quanting.cc
lily/beam.cc
lily/bezier.cc
lily/dynamic-performer.cc
lily/glissando-engraver.cc
lily/include/audio-item.hh
lily/include/beam-scoring-problem.hh
lily/include/skyline-pair.hh
lily/include/skyline.hh
lily/include/slur-score-parameters.hh
lily/include/system.hh
lily/page-layout-problem-scheme.cc [new file with mode: 0644]
lily/part-combine-iterator.cc
lily/pure-from-neighbor-interface.cc
lily/rhythmic-head.cc
lily/skyline-pair.cc
lily/skyline.cc
lily/slur-configuration.cc
lily/slur-score-parameters.cc
lily/slur.cc
lily/span-bar-engraver.cc
lily/span-bar.cc
lily/system.cc
lily/tuplet-number.cc
ly/music-functions-init.ly
python/musicexp.py
python/musicxml.py
scm/define-grob-properties.scm
scm/define-grobs.scm
scm/layout-slur.scm
scm/paper-system.scm
scm/part-combiner.scm
scm/stencil.scm
scripts/musicxml2ly.py
stepmake/stepmake/texinfo-rules.make
stepmake/stepmake/texinfo-vars.make

index 9b598c923ac1f0107ae6e9feab0ee4eb36c85850..8f5006ef80a97c288aaa99908e426dc50c019840 100644 (file)
@@ -214,6 +214,9 @@ txt-to-html:
        $(foreach a, $(README_TOP_FILES), cp $(top-src-dir)/$(a) $(outdir)/$(a).txt && ) true
        $(PYTHON) $(step-bindir)/text2html.py $(OUT_TXT_FILES)
 
+# Explicitly list the dependencies on generated content
+$(outdir)/web.texi: $(outdir)/we-wrote.itexi $(outdir)/others-did.itexi $(outdir)/weblinks.itexi
+
 ifeq ($(out),www)
 ## Extra images dependencies
 $(OUT_TEXINFO_MANUALS): $(outdir)/pictures
@@ -222,18 +225,13 @@ $(outdir)/pictures:
        $(MAKE) -C pictures WWW-1
        ln -sf ../pictures/$(outdir) $@
 
+$(outdir)/web.texi: $(outdir)/ly-examples
+
 $(outdir)/ly-examples:
        $(MAKE) -C web/ly-examples
        ln -sf ../web/ly-examples/$(outdir) $@
 endif
 
-ifeq ($(out),www)
-$(outdir)/web.texi: $(outdir)/ly-examples $(outdir)/we-wrote.itexi $(outdir)/others-did.itexi
-else
-# duplicate (without ly-examples)
-$(outdir)/web.texi: $(outdir)/we-wrote.itexi $(outdir)/others-did.itexi
-endif
-
 
 # Ugh, using '%' twice not possible
 $(outdir)/notation/notation.xml: $(outdir)/notation.texi
@@ -246,11 +244,6 @@ $(outdir)/internals/internals.xml: $(outdir)/internals.texi
 
 $(outdir)/learning.texi $(outdir)/notation.texi: $(OUT_PDF_IMAGES)
 
-$(foreach manual, $(MANUAL_SUBDIRS),\
-$(eval $(outdir)/(manual).texi: $(call src-wildcard,$(manual)/*.ite??)))
-
-
-
 $(outdir)/source:
        @rm -f $(@)
        ln -sf $(depth) $(@)
index b15e8442488368f883e43f01f601296921f23d1c..bac6bed2d6a3f50405d5059caa86b92801b4b9d7 100644 (file)
@@ -924,7 +924,13 @@ LilyDev users should skip over these @q{install} instructions.
 Install @command{git-cl} by entering:
 
 @example
-git clone https://github.com/martine/git-cl
+git clone https://github.com/gperciva/git-cl.git
+@end example
+
+If that command fails for some reason, try this instead:
+
+@example
+git clone git://github.com/gperciva/git-cl.git
 @end example
 
 @item
index e10986e7cffeeed7861b6f56846269834d8872f4..fb892d0bb33e23d282754f70ef8055101a6b2413 100644 (file)
@@ -64,7 +64,7 @@ This section describes what contexts are, and how to modify them.
 * Modifying context plug-ins::
 * Changing context default settings::
 * Defining new contexts::
-* Aligning contexts::
+* Context layout order::
 @end menu
 
 
@@ -929,79 +929,73 @@ Then the output at the start of this subsection can be entered as
 @end example
 
 
-@node Aligning contexts
-@subsection Aligning contexts
+@node Context layout order
+@subsection Context layout order
 
-New contexts may be aligned above or below existing contexts.  This
-could be useful in setting up a vocal staff (@rlearning{Vocal ensembles}) and
-in ossia,
+@cindex contexts, layout order
+@funindex \accepts
+@funindex \denies
 
-@c TODO Better example needed.  Ref LM, and expand on it.
+Contexts are normally positioned in a system from top to bottom
+in the order in which they are encountered in the input file.  When
+contexts are nested, the outer context will include inner nested
+contexts as specified in the input file, provided the inner contexts
+are included in the outer context's @qq{accepts} list.  Nested
+contexts which are not included in the outer context's @qq{accepts}
+list will be repositioned below the outer context rather than nested
+within it.
 
-@cindex ossia
-@funindex alignAboveContext
-@funindex alignBelowContext
+The @qq{accepts} list of a context can be changed with the
+@code{\accepts} and @code{\denies} commands.  @code{\accepts} adds a
+context to the @qq{accepts} list and @code{\denies} removes a context
+from the list.  For example, it would not normally be desirable for
+chord names to be nested within a @code{Staff} context, so the
+@code{ChordNames} context is not included by default in the @qq{accepts}
+list of the @code{Staff} context, but if this were to be required it can
+be done:
 
-@lilypond[quote,ragged-right]
-ossia = { f4 f f f }
-\score{
-  \relative c' \new Staff = "main" {
-    c4 c c c
-    <<
-      \new Staff \with { alignAboveContext = #"main" } \ossia
-      { d8 f d f d f d f }
-    >>
+@lilypond[verbatim,quote]
+\score {
+  \new Staff {
+    c' d' e' f'
+    \chords { d1:m7 b1:min7.5- }
   }
 }
 @end lilypond
 
-@cindex nested contexts
-@cindex contexts, nested
-
-@funindex \accepts
-@funindex \denies
-
-Contexts like @code{PianoStaff} can contain other contexts
-nested within them.  Contexts which are acceptable for nesting
-are defined by the @qq{accepts} list of a context.  Contexts
-which are not in this list are placed below the outer context
-in the printed score.
-For example, the @code{PianoStaff} context is defined by default
-to accept @code{Staff} and @code{FiguredBass} contexts within
-it, but not (for example) a @code{Lyrics} context.  So in the
-following structure the lyrics are placed below the piano staff
-rather than between the two staves:
-
-@lilypond[verbatim,quote,relative=1]
-\new PianoStaff
-<<
-  \new Staff { e4 d c2 }
-  \addlyrics { Three blind mice }
+@lilypond[verbatim,quote]
+\score {
   \new Staff {
-    \clef "bass"
-    { c,1 }
+    c' d' e' f'
+    \chords { d1:m7 b1:min7.5- }
   }
->>
+  \layout {
+    \context {
+      \Staff
+      \accepts "ChordNames"
+    }
+  }
+}
 @end lilypond
 
-The @qq{accepts} list of a context can be modified to include
-additional nested contexts, so if we wanted the lyrics to appear
-between the two staves we could use:
+@code{\denies} is mainly used when a new context is being based on
+another, but the required nesting differs.  For example, the
+@code{VaticanaStaff} context is based on the @code{Staff} context, but
+with the @code{VaticanaVoice} context substituted for the @code{Voice}
+context in the @qq{accepts} list.
+
+Note that a context will be silently created implicitly if a command
+is encountered when there is no suitable context available to
+contain it.  This can give rise to unexpected new staves or scores.
+
+@seealso
+Usage Manual:
+@rprogram{An extra staff appears}.
+
+Installed Files:
+@file{ly/engraver-init.ly}.
 
-@lilypond[verbatim,quote,relative=1]
-\new PianoStaff \with { \accepts Lyrics }
-<<
-  \new Staff { e4 d c2 }
-  \addlyrics { Three blind mice }
-  \new Staff {
-    \clef "bass"
-    { c,1 }
-  }
->>
-@end lilypond
 
-The opposite of @code{\accepts} is @code{\denies}; this removes a
-context from the @qq{accepts} list.
 
 @node Explaining the Internals Reference
 @section Explaining the Internals Reference
@@ -2101,7 +2095,6 @@ modified by completely re-defining them as alists.}
 @menu
 * Input modes::
 * Direction and placement::
-* Context layout order::
 * Distances and measurements::
 * Staff symbol properties::
 * Spanners::
@@ -2307,32 +2300,6 @@ c2( c)
 @end lilypond
 
 
-@node Context layout order
-@subsection Context layout order
-
-@cindex contexts, layout order
-
-Contexts are normally positioned in a system from top to bottom
-in the order in which they are encountered in the input file.  When
-contexts are nested, the outer context will include inner nested
-contexts as specified in the input file, provided the inner contexts
-are included in the outer context's @qq{accepts} list.  Nested
-contexts which are not included in the outer context's @qq{accepts}
-list will be repositioned below the outer context rather than nested
-within it.
-
-Note that a context will be silently created implicitly if a command
-is encountered when there is no suitable context available to
-contain it.  This can give rise to unexpected new staves or scores.
-
-The default order in which contexts are laid out and the
-@qq{accepts} list can be changed, see @ref{Aligning contexts}.
-
-@seealso
-Usage Manual:
-@rprogram{An extra staff appears}.
-
-
 @node Distances and measurements
 @subsection Distances and measurements
 
index d91a40de99ee97d3df414e083c56569320ca6045..89232888ae7c622a17a4f62611e40e0bc37e1a96 100644 (file)
@@ -3043,33 +3043,39 @@ Internals Reference:
 @cindex acciaccatura
 
 @funindex \grace
-@funindex grace
+@funindex \slashedGrace
+@funindex \acciaccatura
+@funindex \appoggiatura
 
-Grace notes are ornaments that are written out.  Grace notes
-are printed in a smaller font and take up no logical time
-in a measure.
+Grace notes are musical ornaments, printed in a smaller font, that take
+up no additional logical time in a measure.
 
 @lilypond[quote,relative=2,verbatim]
-c4 \grace c16 c4
-\grace { c16[ d16] } c2
+c4 \grace b16 a4(
+\grace { b16[ c16] } a2)
 @end lilypond
 
-LilyPond also supports two special types of grace notes, the
+There are three other types of grace notes possible; the
 @emph{acciaccatura} -- an unmeasured grace note indicated by a slurred
-small note with a slashed stem -- and the @emph{appoggiatura}, which
-takes a fixed fraction of the main note and appears in small print
-without a slash.
+note with a slashed stem -- and the @emph{appoggiatura}, which takes a
+fixed fraction of the main note it is attached to and prints without the
+slash.  It is also possible to write a grace note with a slashed stem,
+like the @emph{acciaccatura} but without the slur, so as to place it
+between notes that are slurred themselves, using the
+@code{\slashedGrace} function.
 
 @lilypond[quote,relative=2,verbatim]
-\grace c8 b4
 \acciaccatura d8 c4
 \appoggiatura e8 d4
-\acciaccatura { g16[ f] } e4
+\acciaccatura { g16[ f] } e2
+\slashedGrace a,8 g4
+\slashedGrace b16 a4(
+\slashedGrace b8 a2)
 @end lilypond
 
-The placement of grace notes is synchronized between different
-staves.  In the following example, there are two sixteenth grace
-notes for every eighth grace note
+The placement of grace notes is synchronized between different staves.
+In the following example, there are two sixteenth grace notes for every
+eighth grace note
 
 @lilypond[quote,relative=2,verbatim]
 <<
index 0890ed6455068b2d35d8f549cc24ea57247b01cc..b30e14ac382499282d007dc74c84c73a17e8e516 100644 (file)
@@ -1099,7 +1099,7 @@ Learning Manual:
 @rlearning{Vocal ensembles}.
 
 Notation Reference:
-@ref{Aligning contexts},
+@ref{Context layout order},
 @ref{Creating contexts}.
 
 @node Placing syllables horizontally
index 7b5cceb19b129777aa238bbfc878120868d42b0b..7578781fc8c7c0877297fefe70ec790f66ee4fe7 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "keyboards"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Los símbolos específicos de acordeón discanto se escriben mediante
 @code{\\markup}.  Se puede trucar la colocación vertical de los
index 102cf4b06be988c2563f27b5c950ac0939707da4..c9d3a56faf8e284d7a3dc0faf47cddc260a508a9 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "chords, ancient-notation, contexts-and-engravers"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 
 Al escribir un bajo cifrado, podemos situar las cifras encima o debajo
index 3a426b13c8d95bf7c54d30c117c2b01f90ad6500..bc52ce5ac1d2a410f54fd4d98d6f52364e580b9e 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "pitches, staff-notation, vocal-music"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   doctitlees = "Añadir un ámbito por voz"
   texidoces = "
 Se puede añadir un ámbito por cada voz. En este caso, el ámbito se
index bd4f6f5fc87d2f698e531041ebb09c8730a37010..1100aa208c824cd6745202d26283630654d933e2 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "staff-notation, contexts-and-engravers, breaks"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Al añadir un pentagrama nuevo en un salto de línea, por desgracia
 se añade un espacio adicional al final de la línea antes del salto
index a619f07d8f8a001d9781f3145c7958ff5d793a6c..47dab6d4618b5b99145ca673d2945a3712bf31d9 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "staff-notation, contexts-and-engravers"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Se puede añadir (posiblemente de forma temporal) un pentagrama
 nuevo una vez que la pieza ha comenzado.
index 1c031725ff39d27bda829874526e82902274503e..ce5e6391cc12ed83e9f281e6c4c9b219bbfa3953 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "chords"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Para añadir indicaciones de línea divisoria dentro del contexto de
 los nombres de acorde @code{ChordNames}, incluya el grabador
index 9a020117ac71b9ccef956c16a7feb8da61c37d33..6f21837270e15fd9d552705fd07d0a2d689e0b6e 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms, expressive-marks"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 La sintaxis de LilyPond puede implicar muchas colocaciones poco
 comunes para los paréntesis, corchetes, etc, que a veces se tienen
index 7fdcb5b2f9da1eb53034f4bc651236f47190952d..7d4f73ef5ffcffdece091813b71d988528660762 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms, percussion"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Mediante la utilización de las potentes herramientas preconfiguradas
 como la función @code{\\drummode} y el contexto @code{DrumStaff}, la
index 5ecb570e7a1671eb7a70567adf0698d60e69a79d..4d5083fd807858af1ad209fcf195ea26350ceb39 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Para añadir digitaciones a las tablaturas, utilice una combinación de
 @code{\\markup} y @code{\\finger}.
index 06fb1ad68a5d3ce6aeb14ac3eb04d1eecc3f41b7..6c45f34517fbe3da98e5936b5c0e73bfc9c0781e 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "staff-notation, vocal-music"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 
   texidoces = "
    Este ejemplo muestra una forma de simplificar la adición de muchas
index 3d9ff364df429485be168dc7c3e2cd65981f25d7..ed6122a3672f2cd0b24c166931893328584ac925 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "expressive-marks"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 La función @code{\\parenthesize} es un truco especial que encierra
 objetos entre paréntesis.  El grob asociado es @code{ParenthesesItem}.
index 59ffd8753c68795b8a73842566689e09bb9227ed..2735d45a6bbffa6d913555245053335e685a6e25 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "text, titles"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Con algo de código de Scheme, se puede añadir fácilmente la fecha
 actual a una partitura.
index 41c8a80c27723ca95940f9dfd043826b4b2a22ff..549c23672b318413de2254fc03d93d47d738b435 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "repeats"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 El grabador @code{Volta_engraver} reside de forma predeterminada
 dentro del contexto de @code{Score}, y los corchetes de la repetición
index e8eb502cfad58d00456533d9d004048f21a2b45f..04a0c049d21b6dfdfc5e14b0630ab6f4fdb08e37 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "simultaneous-notes"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
  doctitlees = "Voces adicionales para evitar colisiones"
  texidoces = "
 En ciertos casos de polifonía compleja, se necesitan voces adicionales
index 693b47c48c97b23310d55605b0b87da81a6c5512..424d0ac2af336397d6e98909a4090f6afc0c13b6 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Se puede ajustar la separación entre las notas de adorno utilizando la
 propiedad @code{spacing-increment} de @code{Score.GraceSpacing}.
index 719edcd8509dfaf923784c499e055f526c3c6c25..d14bea00e657f74503653783d6f86d682598e776 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Este fragmento de código muestra cómo situar la línea de base de la
 letra más cerca del pentagrama.
index bea2dfe5624ac02c12a7e87edddcb73bfdf5d008..9f9534d15657873be5780cc0938406dada583784 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "expressive-marks"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Puede ser necesario trucar la propiedad
 @code{shortest-duration-space} para poder ajustar el tamaño de las
index 678c12df150a0d1aa4b58394394706db7886c3d7..93b91760ccb48cf28e5ae1d224727a4055c69055 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "text, paper-and-layout, titles"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 La alineación horizontal de los nombres de instrumento se puede
 trucar modificando la propiedad @code{Staff.InstrumentName
index 2e3865542926770fa5f2110eb0111fb1286dc17a..98ed04498138c570c6299efb04494d0d349411b2 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 
 Los números de compás se alinean de forma predeterminada por la
index 85ee5dce1fe17a1aab3e9a0839cad50a79ed122b..f62bb9897f92b523fc1543349fa470ba51f47227 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "text"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Si están especificadas, las marcas de texto se pueden alinear con
 objetos de notación distintos a las líneas divisorias.  Entre estos
index 3692a310309952afe4be2a3d8bd111e41ae12f22..fe14e2367f1ee6b6cd79b74ab5bdc83bf01b1b4e 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "editorial-annotations, fretted-strings, spacing"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 
   texidoces = "
 Las cifras de digitación orientadas verticalmente se colocan de forma
index 02406380d3bebfe9468f5017a47f865775656007..caadfd7aa90beaa5bd8630618e80b73eb1d7b3ed 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "pitches, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Se puede variar la longitud de las plicas de las figuras unidas por
 una barra mediante la sobreescritura de la propiedad
index 1d4433234753964382cc427471397ca1d11a9ba1..759a7b8cad2a73f93aae54347eb2b06200e6e6b5 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "pitches, vocal-music"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   doctitlees = "Ámbitos con varias voces"
   texidoces = "
 La adición del grabador @code{Ambitus_engraver} al contexto de
index 75aa9b1a19aec4e1b87c19fcbb0c70d8082273f2..96534d72480d6a0e1ffc1cda28ce959ebeac1f38 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "editorial-annotations, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 De forma predeterminada se añaden corchetes de análisis sencillos
 debajo del pentagrama.  El ejemplo siguiente muestra una manera de
index 9dd34ccd176aa15ce4ed89b6d4db33665ef4524b..ffd28cd53985e858c9297b2817be39f0cd074818 100644 (file)
@@ -9,7 +9,7 @@
 \version "2.15.9"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Aquí se muestran muchos de (¿o quizá todos?) los símbolos que
 están contemplados por la capacidad de LilyPond para la música
index d350b6907f817c30e554fcc527c8de0285e9fd76..ecc6fc48f562a0c200eedb03b60e5c0a65657e01 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "vocal-music, ancient-notation, template"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Este ejemplo muestra cómo hacer una transcripción moderna de canto
 gregoriano. El canto gregoriano no tiene compás ni plicas; utiliza
index b298e1c0add1d1c9f88f8c1a9f400cdb33b328dd..d89be0d609aa65286f9fe4a66e447c9a304e6a41 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "ancient-notation, template"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Al transcribir música mensural, es útil un «incipit» al compienzo
 de la pieza para indicar la tonalidad y el tempo
index 746ab81e68786441eb92e27a185bbff774b97dab..778263b414b7bad195e717401573cc6fe191dc00 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "ancient-notation"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Las indicaciones de compás también se pueden grabar en estilo antiguo.
 
index e40f8c06d89743cc391b155a5c7410ab6331f8eb..968985a01034649a8f266b5502f5280bad48f814 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "vocal-music, template"
 
-%% Translation of GIT committish: b1bebb842d9762894fc7b2a178e2bdfcd544419f
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Esta plantilla muestra una forma de preparar un cántico salmódico
 anglicano.  También muestra cómo se pueden añadir estrofas adicionales
index bdc7c542191991f8c6148f55f72315197103aaf0..73679c78424f9def5cb5e6acdd99838397fc1480 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "pitches, editorial-annotations"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   doctitlees = "Aplicar estilos de cabeza según la nota de la escala"
   texidoces = "
 La propiedad @code{shapeNoteStyles} se puede usar para definir varios
index e3c7d916374dc29dd1194bc6b055bc7ec37591b0..1b4670ff3beaab7665ffda1189d13fd679fa1c57 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "world-music"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Para las improvisaciones o @emph{taqasim} que son libres durante unos
 momentos, se puede omitir la indicación de compás y se puede usar
index af401ccd8d4fdd1c6a748812e076894f25dab1eb..ad5a60fb567f8ec209ec6c2f433d999dc02e4860 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "expressive-marks, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Se puede hacer que una ligadura de expresión sea asimétrica para
 adaptarse mejor a un patrón asimétrico de notas.
index 07e85822dc369ca655317ba930c600c87bb7ef96..bd497cc5cf71fdbc3bedf8da8735a6492e74aaca 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Se pueden subdividir las barras automáticamente.  Estableciendo la
 propiedad @code{subdivideBeams}, las barras se subdividen en
index 2e01a839567b5c6fa2ea5cf5422cca98bb358f14..050af049282f7a7330b177c8e3a596028ea279a6 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms, editorial-annotations, chords, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 
   texidoces = "
 
index 414fac1bb707b822dcaf24cd80649aad913a6b0c..628bb11339fdd6d1cd1252339ee26e3e82646f5a 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Las reglas de final de barra especificadas en el contexto
 @code{Score} se aplican a todos los pentagramas, pero se pueden
index 4fb1bbcc351b53e7e4d4d10fc96aa2d318f4aa36..ddcba4ca0d8c95857699860c1bbe0b072eb657a7 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 No está especificada ninguna agrupación predeterminada automática
 de las barras para el compás de 7/8, de forma que si se requieren
index 03c63ea2ca6f73ef3a01932c6d0124504442a0e0..c0362e71e52949669a731533fc695d6dcc712d86 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Normalmente están prohibidos los saltos de línea si las barras
 atraviesan las líneas divisorias.  Se puede cambiar este
index d807e6c1e06c53e389eca3fe1d22e8beed4077b0..833193b7e29e9a92f92811f78e2b01164db0cea8 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "editorial-annotations, text"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 La instrucción @code{\\whiteout} intercala un rectángulo blanco
 debajo de un elemento de marcado.  Este rectángulo blanco no tapa
index ee3506f1988bf3962fd56f7cfd4526f8eb84a4ea..b5e6fd346d1a81cef9025a59ba68d001d6cdb1f2 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "expressive-marks"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Para hacer invisibles partes de un regulador de crescendo, se usa
 el método de dibujar un rectángulo blanco encima de la parte
index f70e7b15352435d99d28ee5c78afccb449940745..3d2bfb9ec6e4145718215da0fc5a425442bbb1d2 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "expressive-marks, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 A veces se denota una «cesura» mediante una doble marca de respiración
 parecida a las vías del tren, con un calderón encima. Este fragmento
index 04739dc1fa7b4394aeb0bbd8119b73de491d6615..ec2898abb4f34a5d0cd4ac73b49462e79570e38c 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "expressive-marks, text"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Este ejemplo proporciona una función para tipografiar un regulador con
 texto por debajo, como @qq{molto} o @qq{poco}. El ejemplo ilustra
index cf0f664d5a86dce944171d2ba5dc0d9a3cd82a64..19ecf262a73522f8fc4af652eba36ccc83fb7fc0 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "expressive-marks, unfretted-strings"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Para hacer más pequeño el círculo de @code{\\flageolet} (armónico)
 utilice la siguiente función de Scheme.
index 2f0cc86dac4b075db8436eec78c5b6fdda14c00f..d25c0af3cc43938624a23a055c6c7a4c41da92c0 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "simultaneous-notes, editorial-annotations, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Se pueden modificar notas individuales de un acorde con la instrucción
 @code{\\tweak}, alterando la propiedad @code{font-size}.
index fa4236a2fa5049aa19123a0bb37f9d08f10f3b91..82744b8a211bc384692c03f63dccb92eba332be3 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Se insertan automáticamente barras en ángulo cuando se detecta un
 intervalo muy grande entre las notas.  Se puede hacer un ajuste
index abe5168879c1ac5e3ec7af80acb63d19df45dab3..6b2c0522ee8827f55431638bceef31a9a382aa19 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "chords"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Se puede establecer el separador entre las distintas partes del
 nombre de un acorde para que sea cualquier elemento de marcado.
index d70f41ee9fe22a068afc6bda80f2c2ec0a5acf9b..fbf079f6ab8b402415d3d4735ffb71fd2ed39a46 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
  doctitlees = "Cambiar la forma de los silencios multicompás"
  texidoces = "
 Si hay diez compases de silencio o menos, se imprime en el pentagrama
index ab151a2c4bf539810a0f085690dcb12f9479e9a1..c71c45a4fddfa7c65c6bed1e3f2f472f414eca92 100644 (file)
@@ -22,7 +22,8 @@ Ils s'aligneront par défaut sur la corde du haut ou le sommet du fret.
   lsrtags = "fretted-strings"
 
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 
   texidoces = "
 
index d1fac5e770142ee07cb92fa0287a5e205b810e1a..41add8712650aeeb53d3c73445cf0a77f0246956 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "contexts-and-engravers, midi"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Al producir una salida MIDI, el comportamiento predeterminado es que
 cada pentagrama representa un canal MIDI, con todas las voces de dicho
index e98099f9bb5c6739c69c1e1b4751e4dec1204df0..064cfbe51b7f72abf60d3e865724dc075038877d 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "simultaneous-notes"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Al utilizar la posibilidad de combinación automática de partes, se
 puede modificar el texto que se imprime para las secciones de solo
index 98863ae7391c351608c9a6ed60434ea454dbc9ce..3b973a2116f8f4445322c9e99a6da8f16b599a92 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "expressive-marks, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Se puede modificar el texto empleado para los crescendos y
 decrescendos modificando las propiedades de contexto
index 16620f75b2ee1d3f012929aa3e6502b015df653b..5e54b3f8ff093dfb38b23cb415ee7d0378e8e58e 100644 (file)
@@ -7,7 +7,7 @@
 %% Note: this file works from version 2.14.0
 \version "2.14.0"
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 
   texidoces = "
 Es posible ajustar la separación en las indicaciones de tesitura.
index dd0eee12b1180300ea126a92bfcba72248eb309c..9371e4d8cc110938af39bf371cd59ecbd9b89e61 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "expressive-marks, editorial-annotations"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Se puede cambiar el aspecto de las ligaduras de expresión de
 continuas a punteadas o intermitentes.
index 6347d46bd745517ef65dab9ffc64972dc1043370..713189fb46d6aaf7a5c07da70e0bfb2d2ce7c612 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "expressive-marks"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 El glifo de la marca de respiración se puede ajustar
 sobreescribiendo la propiedad de texto del objeto de presentación
index 5e6cb2ba3fee658cbf46e16d43b732d08eaf5e16..69f753c38e3b0385726ef25956997681b5c18854 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "chords"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 La nomenclatura inglesa (predeterminada) para los acordes del cifrado
 americano se puede cambiar por la alemana (@code{\\germanChords}
index df8bd3721f625f130e130d1d67bc8012779150fe..35d0d17c3e948aa3660c9053be630510b697b7ad 100644 (file)
@@ -7,7 +7,7 @@
 %% Note: this file works from version 2.14.0
 \version "2.14.0"
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 
   texidoces = "
 Este código muestra cómo cambiar la cantidad de puntillos de una nota.
index f9faa4063083c89f739e1548195a5975a9da7c2a..6715a36bb87a0bc882905579e32d5fc99adc2e9e 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "chords"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Las alteraciones y los signos «más» pueden aparecer antes o
 después de los números, según el valor de las propiedades
index 14a5bfe01a557c410321e90e4c4d9c464619e9dc..58dde7018d819176383a9a7b0f049c79a5dfef05 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%%%    Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%%%    Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 
   texidoces = "
 
index 6b87cacdb3971f1a8ae05de6257f2028a0d0e601..553b6f5206d4df9e9ae4033aa7c413d0f725460b 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms, tweaks-and-overrides, midi"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Para cambiar el tempo en la salida MIDI sin
 imprimir nada, hacemos invisible la indicación metronómica:
index c24ffc2719d939906d7ba09a68e719f8f251ff8d..0fc4abaca065887c8acfaabf3cd2b47ad8acfd53 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "keyboards, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Se puede usar @code{Staff.pedalSustainStrings} para fijar el texto de
 las indicaciones de pisar pedal y levantar pedal.  Observe que las
index 5bf944273fed5f47b3f2660586116926792c50f9..44cc53b8afdc068f8af77893bc332094e1747fe5 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 La instrucción @code{\\time} establece las propiedades
 @code{timeSignatureFraction}, @code{beatLength}, @code{beatGrouping} y
index 3dd879bef8f3533d91438e96ba6166b262581f71..f6913bb50aa8ce6352e23c9079e496c5af25eec0 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
  doctitlees = "Cambiar el número del grupo especial"
  texidoces = "
 
index ff0d71f297feee9d1e02dfa8bc230e5b0c0523f6..803078fff68ad08fb847a5f9a0da89491041128e 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms, contexts-and-engravers"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 La propiedad @code{measureLength}, junto con
 @code{measurePosition}, determina cuándo es necesario dibujar una
index b740e3ba3766aa0871a60b4f6995a4a7edd1ccbc..c7d95c7db4335411fb49664e547c98967824ce17 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms, vocal-music, ancient-notation, contexts-and-engravers"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Este tipo de notación se utiliza para el canto de los Salmos, en
 que las estrofas no siempre tienen la misma longitud.
index c8aa0bf3b78b3a0a867526f2386fc64d5b853d63..f169c7cc13528d7dd0959251dae78fa3f82f4fcd 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 
   texidoces = "
 Los deslizamientos para acordes se pueden indicar tanto en el contexto
index 9a32fbdc7e5b0d5f7d3959fe5dfc8ef38acb33c9..6500c0a2379ca6f97a1910b06f013c3d6b06abcf 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "chords"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Se puede usar la propiedad @code{chordNameExceptions} para
 almacenar una lista de notaciones espaciales para acordes
index 0ffcc288e5751906ce96a4607117d2b77aa453de..0cecf7f81f1a39c59ffdc70ceaec48f1aa157adf 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "chords"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 La presentación del acorde de séptima mayor se
 puede ajustar mediante majorSevenSymbol.
index 0f10aac169f817d441e827eaad1c5377c63d9d7c..3a60905ece263303e2592deb71f538fc5b5241ff 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Se puede hacer que los diagramas de posiciones se muestren sólo
 cuando el acorde cambia o al comienzo de una nueva línea.
index 28e5180bd6fcdc975dac6031f079fa050151eea7..2a1015d329814625c9a0299b79d82e314080f143 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Este código muestra cómo recortar (extraer) fragmentos a partir de una
 partitura completa.
index fc7f5e2206885ee9a07387750fc491fd8fe2d414..7c892a772c5f1e3886555331742019b7eabd7904 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "simultaneous-notes, chords, keyboards"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Los «clusters» o racimos son un mecanismo para indicar la
 interpretación de un ámbito de notas al mismo tiempo.
index 6b760f5931fe6a77d958e0924e05b2bc7ea79119..fe56169db67f668b578786db9d17a938a2e0fef3 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "expressive-marks, text"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Ciertas indicaciones dinámicas pueden llevar textos (como @qq{più
 forte} o @qq{piano subito}). Se pueden producir usando un bloque
index dd6ecb805b3cfebc9b2fb54478a3e0c59506e81b..e304a1bab402ee230515479ec237ffb8caeb4c33 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "simultaneous-notes, text"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 
 La herramienta de combinación de partes (instrucción
index f5b622d47d7e4f27fa09c27e71656ed4115b0574..45d45aac0ee49c412202e075495f223a45cf39d9 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: ea4fdf1afa3e6bb9a7c586f5a533be93ff3312d3
  doctitlees = "Indicaciones de compases compuestos"
  texidoces = "
 Las indicaciones de compás poco frecuentes como @qq{5/8} se pueden
index 4a404cdc6304c83e96362411f77bab9f4a4d18cb..69d604559ca3b1827e43a9e2a1cac853f306fe3b 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 La agrupación de pulsos dentro de un compás está controlada por la
 propiedad de contexto @code{beatStructure}.  Hay establecidos valores
index 702e545a847e55f26989cee037581c8eb80dce74..fa643e05877694f892d99d24fe0f46bf2c96a956 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "expressive-marks"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Se puede tipografiar un gissando contemporáneo sin nota final
 utilizando una nota oculta y temporalización de cadenza.
index 3a8dee79c46962bfb64c57e0abea5c6ea5dc9caa..24c8ff132974bfd7c5659b3d1c97dd82c3dbe72f 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 
   texidoces = "
 La visibilidad de los objetos de extensión que acaban en la primera
index 63a9565269eb05e281fcd3aae8eb84603f827cbf..947a3cb1f60b94fdcd150b0bcf2e51e18195785a 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "editorial-annotations, chords, keyboards, fretted-strings"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Se puede controlar con precisión la colocación de los números de
 digitación.  Para que se tenga en cuenta la orientación de las
index c7d4c07d2fcda72a695c4f19ddf85780995298d3..73cb41a2e1c8d97a6fec6cb2264563fa07ebb1a5 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "expressive-marks, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 El orden vertical que ocupan las inscripciones gráficas está
 controlado con la propiedad @code{'script-priority}. Cuanto más
index 0ba0aae8430595ba9b71925f9043bf32867fd631..8c0abb2e889e71f4974c401f5bba1acf58de9043 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 
   texidoces = "
 El comportamiento predeterminado de la visibilidad de los corchetes de
index 7276937ebbedf00a659dcc0ffe92905a4c3c40db..b6894d5b0e8d36a1e964d3b6884eb218591eed1a 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "expressive-marks, editorial-annotations, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 texidoces = "
 La creación de un grupeto circular de anticipación entre dos notas,
 donde la nota inferior del grupeto utiliza una alteración, requiere
index 63b038ca8fd7205a05b4380caf5da9981a7a210e..27334417cc47752ff9e68b71011b9a301cd86605 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "pitches"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 En una música que tenga muchas apariciones de la
 misma secuencia de notas a distintas alturas, podría ser de
index 555c26e5227dc0c120bdd8779e61b75ee1240951..0d7be082470119b6c32a5867d73b41a6a1097cde 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "expressive-marks"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Se puede trazar un símbolo de arpegio entre notas de distintas
 voces que están sobre el mismo pentagrama si el grabador
index 6e2bdd8bc29ca7f540910f90b71762407a7f3d41..ed7bfc504969ab8ac530f8038a23c7148b83ac2c 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "staff-notation, editorial-annotations, contexts-and-engravers, paper-and-layout"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Para crear pentagramas en blanco, genere compases vacíos y después
 elimine el grabador de números de compás @code{Bar_number_engraver}
index 589d320d1f26e5b8b31c9da74b075545956f4dd6..593ee09ebc346eb2992dc17d34a73c9e307b8dd1 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "expressive-marks"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Dentro de un @code{PianoStaff}, es posible hacer que un arpegio
 cruce entre los pentagramas ajustando la propiedad
index bc525cada2f4a1698cb43123af0a7cac3fb7b405..47b76b54262d46729792bb9be121383f246e39af 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "expressive-marks"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Se pueden crear arpegios que se cruzan entre pentagramas dentro de
 contextos distintos a @code{GrandStaff}, @code{PianoStaff} y
index 5f7f1f0d9042f45dff7831a1bd11447e7179b4e9..f63dcb1e77877f94d2bc523642f0432c99ff98fa 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Se pueden crear indicaciones metronómicas nuevas en modo de
 marcado, pero no cambian el tempo en la salida MIDI.
index c09e4947dbffc1f90476b16da9fbbafab46317d3..d7a0c5329272eda387962f805bdd628eb62a81f5 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "expressive-marks, text"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Aunque la manera más fácil de añadir paréntesis a una indicación
 de dinámica es utilizar un bloque @code{\\markup}, este método
index 227902a5851acfdcc29cbbe9d4ba0e26648d4366..dd52ab85a23eafcb84ca7974a4271a0d10af5c8f 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "expressive-marks, text, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 A diferencia de las inscripciones de texto, las lestras de ensayo
 no se pueden apilar en un punto concreto de la partitura: sólo se
index 30ef2d93ea1af7425be5981c487f22f9bebba9df..46e6a806e15f13aeee99bfe5eb82930f0d5b4c61 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "expressive-marks, keyboards, unfretted-strings"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 En determinadas situaciones es necesario crear ligaduras de
 expresión entre notas que están en voces distintas.
index d2720b18fcf3f9071f6c0e2199aabd6963af4e74..a230bf1e36a7bfd8c11970828242c8c2efffd18b 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "expressive-marks, text, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Las instrucciones @code{\\startTextSpan} y @code{\\stopTextSpan}
 permiten la creación de elementos de extensión textuales tan
index 743262705f347e8ca6c7733fb78e7ae4894b95bf..39893203dcdcbf973a6efaa1b9e837698476aeb7 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "repeats, keyboards"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 
   texidoces = "
 
index 65694749fbe6deb71c5c74483833eb7d8884b102..b8c6f62b659281fa04096d4e3bce3bdea6ca4b09 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "ancient-notation, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Se pueden tipografiar «custos» en diferentes estilos.
 
index a3e48c96f22d43e8f6b15537c02859fa0851c7f1..6b90aae8b97145bbc1ee76a06ac4fabf8ccfb655 100644 (file)
@@ -23,7 +23,8 @@ l'instancier de manière explicite pour adapter ses propriétés.
   lsrtags = "fretted-strings, tweaks-and-overrides"
 
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Se pueden establecer las propiedades de los diagramas de
 posiciones de acordes por medio de @code{'fret-diagram-details}.
index 75bf60ece7c41dd343342fc0cf960377289af92e..94253091a3b778eb4c2bba6d02b3accde399b539 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "fretted-strings, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Se pueden establecer las propiedades de los diagramas de
 posiciones a través de @code{'fret-diagram-details}.  Para los
index e22b5d8d51dc07cd554ad9c79ae750520753cd85..34b7c8c668d0b049d98ba815f5ee58f26f79906c 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "editorial-annotations"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 La dirección predeterminada de las plicas sobre la tercera línea
 del pentagrama está determinada por la propiedad
index 7fe68eda8e42b5ae859a134299891317b54b3a34..ff8e05141e8cf7745b2bc8572741d4a6aeb5438f 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 
   texidoces = "
 Este ejemplo demuestra cómo se puede definir el grabador de ámbito en
index 8c8cc71438b036ca8f3073d0cf0687d8e215ffbe..80b9459020777b532993cef8dd61b9bab0373486 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 
 Se pueden añadir diagramas de posiciones predefinidas para
index 61c64b447929c01229e0acc422f3f1ee0503f718..7b95e3711d5413d8edc32e4a2c0bedd63483ce47 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "staff-notation, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Si hay un solo pentagrama en un de los tipos de sistema
 @code{ChoirStaff} o @code{StaffGroup}, el comportamiento
index c0c9819cede1e228a656c3a3efba168a0f535963..143f975fd257860225ae7e44f0988c144f07ea8e 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 
   texidoces = "
 He aquí una forma de imprimir un acorde en el que suena la misma nota
index 30fb087b23b2dbc912703540860e56beb8d03d4c..fd6010af97d2a4016482a76768389442b0725819 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 
   texidoces = "
 Al trabajar con los callbacks de un grob, puede ser de mucha ayuda
index 24838b714289563d66f0505892dfd4579d8d52f5..62c1c724f01548b577b92f2ce123a3e08e0b22cd 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   doctitlees = "Alteraciones de estilo dodecafónico para todas las notas incluidas las naturales"
   texidoces = "
 En las obras de principios del s.XX, empezando por Schoenberg, Berg y
index 75d791b77eb1d37661174b66b238b3850ccca0d7..3546abe9380bbba9c04cc609b2ac949bbfafe0fd 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 
   texidoces = "
 Funciones postfijas para la creación de objetos de extensión de texto
index b35749a052576bb8cc1da5a7260d0a5296486be5..39279a37feeb9e11e6a14395b8f7b1ad37074cc2 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 
   texidoces = "
 Los objetos de extensión \cresc, \dim y \decresc ahora se pueden
index fe30d0419dbc4ad2e798988ea2b36c0ad2b0e0a4..d045b8452d13871491af4c61aabd6af299d6d49d 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "editorial-annotations, text"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Se puede insertar códico PostScript directamente dentro de un
 bloque @code{\\markup}.
index 06d81b57b18fd48b93f125fe319f590f9938ee67..11b0ce4456005891a682ab6b4c27221b42e2c89d 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Del problema central de la notación, esto es, crear un determinado
 símbolo, se encargan los «plugins» o complementos añadidos.  Cada
index f39d3fd353ae156ee8773033d24f7a11ae211a46..71f8c0974a61724431c3d8a21bb07b0b36707d84 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
  doctitlees = "Grabado manual de las ligaduras"
  texidoces = "
 Se pueden grabar a mano las ligaduras modificando la propiedad
index 29cd39df15087045aa9f64e3c3147d28a0e432d1..fa4e710ae38123140403593fd460e3c001a1fc85 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
  doctitlees = "Escribir varios grupos especiales usando una sola instrucción \\times"
  texidoces = "
 La propiedad @code{tupletSpannerDuration} establece cuánto debe durar
index ad838c220528e68ec8d02e9c790530e686f887bd..75b9732a3e1a981ebad27f75e2184674c55e8726 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 
   texidoces = "
 Se puede simular un @qq{hammer} o ligado ascendente con ligaduras de
index e750a41a351692ad27c04cdaeea5803b716a73c9..8196ab1e90b7480356ebd6dc631298d9652648e1 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "winds"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Se pueden conseguir símbolos especiales combinando glifos existentes,
 lo que es de utilidad para la notación de instrumentos de viento.
index 4b2a677e7cc920592b8106322887c30864cb1371..9c23fb2e9004538a479e1b442caa5641a79a8b9e 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "fretted-strings"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 En este ejemplo se combinan las digitaciones de la mano izquierda,
 indicaciones del número de cuerda y digitaciones de la mano
index da6086473b71b8b59b03ed474a13b742250b191b..ff4f2d016f1fd23fb8a597d7d89257164995d571 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 
   texidoces = "
 
index d712a7c0918ae7b6cc2e70a8b2299f08d0b4d347..884b13dcc7d89c82b932fc94d94a0d1c5edd2fbc 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Son posibles tanto los corchetes rectos sobre notas sueltas como
 extremos de barra sueltos en figuras unidas, con una combinación de
index 51dc9f03d23acf1728cfeea3fc621b696934cce0..69d7be60e89b7796bc88ff1a196fd2b59028c25c 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "simultaneous-notes, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 
  doctitlees = "Forzar el desplazamiento horizontal de las notas"
 
index a4ce186cd9660a551a16023ec9eca2890ca0ce0d..9c2771f6073472d36c99da5f13aa3788db1acd94 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "vocal-music"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 
 Si LilyPond no cree que haya sitio suficiente para un guión separador
index bfc663de681f0ed5377f01179cb855a915df8a42..8225eae39b2c6736b2674a9f28d31d6c7d159e23 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 
   texidoces = "
 Se pueden crear tablas alternativas de diagramas de posiciones.  Se
index c7f12d8d4e700631147e629e84d8bced5b613957..231332d1c3227c402806d66735bd0350236e36e0 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Armónicos sobre cuerdas pisadas (armónicos artificiales):
 "
index fd2f070adf6a81e114573345b6225ab1ac050eab..001940a0fed5d7852673a53fe0f62c906d434d4e 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "pitches"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Este fragmento de código basado en Scheme genera
 24 notas aleatorias (o tantas como se necesiten), basándose en la
index 55cb6d54a72315841853d3485e02518f56c0ef53..f4a3ac03a4a8c422eac2596801115503f9ff7d89 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%%%    Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%%%    Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 
   texidoces = "
 En muchos casos, las llaves que no están en la columna central se
index af86ed4f5fd8d70552908830aee836b3ba16ad28..0de1386011a5f77d000c74ea70b6108191656577 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "editorial-annotations"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Se puede cambiar el aspecto de las líneas de rejilla
 sobreescribiendo algunas de sus propiedades.
index 5448248f146738ca39448e40b549bc6f0286de37..6b5d93c9e01f17e1deedaf678980469a2cff86d7 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "editorial-annotations"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Se pueden trazar líneas verticales normales entre pentagramas para
 mostrar la relación entre notas; sin embargo, en caso de música
index 8dc0ca9a360240f95195de4c5124f9ff48de0175..b4055ef72365b3bf2dffd85de770f2aa01a160de 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Los patrones de barrado se pueden alterar con la propiedad
 @code{beatGrouping}:
index c24104630358478fce2c6c83600211ba03690906..8babc678bd2dbfb1765f8b510082d3544816fbad 100644 (file)
@@ -5,10 +5,10 @@
 %
 % This file is in the public domain.
 %% Note: this file works from version 2.14.0
-\version "2.14.0"
+\version "2.15.10"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 
 
   texidoces = "
@@ -38,7 +38,7 @@ in the following example.
 hideFretNumber = {
   \once \override TabNoteHead #'transparent = ##t
   \once \override NoteHead #'transparent = ##t
-  \once \override Stem #'transparent = ##t
+  \once \override Stem #'transparent = ##t \once \override Flag #'transparent = ##t
   \once \override Flag #'transparent = ##t
   \once \override NoteHead #'no-ledgers = ##t
   \once \override Glissando #'(bound-details left padding) = #0.3
index e2a6ce9352d07173a19545b663b990e3ecceedf4..33639f356db00b15664cfa78a7caed3d8525d949 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms, fretted-strings"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Para la música de guitarra, es posible mostrar los ritmos de rasgueo,
 además de las notas de la melodía, acordes y diagramas de posiciones.
index bd8fb5d90e076138ab4f8139f6fa87653ea324e2..3cdafeb19993c8dda51164ef4094ee0223781bf5 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "expressive-marks, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Los reguladores pueden imprimirse en uno cualquiera de los estilos de
 @code{line-interface}: discontinuo, punteado, línea, trino o zig-zag.
index 782a5210b047ffabe2d32eec028b7898a68e990b..0141510df92c99534523a1428f967ad0ba2faa43 100644 (file)
@@ -7,7 +7,7 @@
 %% Note: this file works from version 2.14.0
 \version "2.14.0"
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 
   texidoces = "
 Aquí se muestra la manera de ocultar las alteraciones de las notas
index 6bb2890870b38eb663ae35f8192c9f8738b029a2..a56f9d50398632cf8febb37be1ca6f3a714f08a4 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "expressive-marks"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Los cambios de dinámica con estilo de texto (como cresc. y dim.)
 se imprimen con una línea intermitente que muestra su alcance.
index d0e43a26a0e7afa44a058cc2b4506648a4d504e9..6ea2826720f35881eac5c7671623c8569d11f13f 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "vocal-music, template"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
   Este fragmento de código muestra una forma de preparar un himno cuando
 cada línea comienza con un compás parcial.  También muestra cómo
index e78a5f3425498b5737e7f6c5dbf476c26a673a72..a7d6c4051653d1f1ab1a7334efe128b8508c9ab1 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Los «incipit» se pueden escribir utilizando el grob del nombre del
 instruemento, pero manteniendo independientes las definiciones del
index 5f0eee4487261773515a2e299142036564466e9b..a3dd15bdda2b5cf6ec10daab9e749ade302736e8 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "keyboards"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Un corchete de arpegio puede indicar que se tienen que tocar con la
 misma mano notas que están en dos pentagramas distintos. Para hacerlo,
index 5f458d2c63eb6c28cdf161973e0ec52780e7b440..498bfb8b8f2af57b97935645d11737412aa90fd0 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "expressive-marks, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Las marcas de cesura se pueden crear sobreescribiendo la propiedad
 @code{'text} del objeto @code{BreathingSign}.  También está disponible
index 187ae6a7ae7f4ce62cbdecba47cbf159c07593de..374018fee1165b7aea585e26e77e6602c3c40643 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "repeats"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 También se pueden imprimir símbolos de porcentaje sueltos.
 
index c6839e5a8293a43c6cec696ce7eed943c3a4889d..2d05280cb71fafe9a13d42f3a6690218cc01e9d8 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "keyboards, percussion, fretted-strings, template"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Ésta es una plantilla bastante avanzada, para un conjunto de
 jazz. Observe que la notación de todos los instrumentos está en
index 513edaa8e4df08e9e8b08239893ec88000abce46..445f59708910b98c608c834bb3ad83e7ed38811d 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "pitches, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Cuando se produce un cambio de clave, el símbolo de clave se imprime a
 un tamaño menor que la clave inicial.  Esto se puede ajustar con
index db67212b65ebc6b6a6901dad8e980cee56a04af1..df20e28ccfdeba6798cd621bc6d933e9498bfcf0 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 La tablatura se puede formatear utilizando letras en lugar de números.
 
index f0b86dd6ff8529f6785d68d9ea97b814958212f9..3e7f987fbb8df95b3e662aae5552a4789308627e 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "expressive-marks, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Se pueden aplicar puntas de flecha a los elementos de extensión de
 texto y de línea (como el Glissando).
index 60ca54571f6c1ee4bdfe19c6c9dd1fe9033b0618..1a6676d0cf3f0b3ae5a8570bc6c8a50b09775eb5 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "text, vocal-music"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 La alineación horizontal de la letra se puede ajustar sobreescribiendo
 la propiedad @code{self-alignment-X} del objeto @code{LyricText}.
index 9b92424768178d7df3d64c1d1cded3a368364232..da2a8dd944c94e9ba0a58ff31761cdc9f423c292 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 El «Makam» es un tipo de melodía de Turquía que
 utiliza alteraciones microtonales de 1/9 de tono.  Consulte el
index 102eab7cb8138bdfbda6f81f04b72f623af2ab21..79081786da811f143b91dc81c17244aab5c865ad 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 
 Las ligaduras de expresión se pueden construir con patrones de
index aa791227c8620fe4910d53071c320697ca005b66..bfb337905abc8cafd213526c9bfba98e778ba11f 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "staff-notation, editorial-annotations"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Se puede engrosar una línea del pentagrama con fines pedagógicos
 (p.ej. la tercera línea o la de la clave de Sol).  Esto se puede
index 9981d3ab95f8fa36770c6a22dcc177521c99e8dc..c70bac8cd68e0b3837cbe2bf07a34fa103102172 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "repeats, staff-notation, editorial-annotations"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Este fragmento de código proporciona una solución alternativa a la
 producción de contadores de compás utilizando repeticiones
index 8e9019ad52b8c9c0bb5927b480fc770dde696f91..01a4730585c3aa146bdd11d0c16a84e36ec59ce7 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "staff-notation, ancient-notation, contexts-and-engravers, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 La disposición «mensurstriche» en que las líneas divisorias no
 están dibujadas sobre los pentagramas, sino entre ellos, se puede
index 90a0c6de8a5db498a9644ff2101d152464887b29..0794a60539bc1d7a3408ad1deee9b798e0f0bd09 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Utilice un texto de marcado para sustituir el glifo de clave (TAB) con
 una fuente tipográfica moderna.
index 1a9affb9405543b01635384d3a6573566db1f26d..a35ca2abfc3e59552daee45d26821de21536662e 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "expressive-marks"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Las abreviaturas se encuentran definidas dentro del archivo
 @file{ly/script-init.ly}, donde las variables @code{dashHat},
index b7cd9ca2c2d4533e4654508c4c7c509d621b11ca..f47010916352207c4b5184ff3d64103bbe760c2e 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms, simultaneous-notes, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Cuando se puede una nota en la voz superior para evitar la colisión
 con una nota de otra voz, el comportamiento predeterminado es
index 0e23b73d427cfff33007795bcf6fd0ed9d9c818b..27a2490e1c807def9f8f06223fbf09271e9d86d4 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "expressive-marks, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Se puede ajustar la posición vertical de una ligadura de
 expresión utilizando la propiedad @code{positions} del objeto
index b76f2da0b64d6ccbf5368bd02b5bc6c1fab8ad00..de9ae465df4b89c11cab6e8161299fd73337d0f6 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms, text"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 texidoces = "
 Los elementos de marcado aplicados a un silencio multicompás se
 centran encima o debajo de éste.  Los elementos de marcado extensos
index 33190181106e79a2837f2bb28a0625d134a60a43..85f146cb3e1b66bf7e6f07ec38cb706e83f35c78 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "staff-notation, contexts-and-engravers, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Se puede utilizar la propiedad
 @code{systemStartDelimiterHierarchy} para crear grupos de
index a838305c76fa4c5b85369f44a52a5dffbf54caa2..bb4a0a506d9d091185957fa62d9282c3512fd256 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 LilyPond también proporciona funciones de formato para imprimir
 números de grupo especial diferentes a la propia fracción, así
index e0268b2d6080993c08114c74956f73593c9c9d72..cfd5f540fae0fd98bddd234d819ed0d9a201caee 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   doctitlees = "Armaduras de tonalidad no tradicionales"
   texidoces = "
 
index da442fa1631b0c59209cb9d2a151909146dd8052..13e94264f5e062e0be93552c8b4eccccbb860503 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 
 Las cabezas de nota de notación fácil utilizan la propiedad
index f33d81eda4aa9c028513ed5d5684833171da42e3..3898abfa9ccc691c8736de4f4ca76ffb301c268a 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Referencia para armónicos sobre cuerdas al aire (armónicos naturales):
 
index f363075516fc9b66c2db9ccae8411c24aa25a146..f1bda1e40be449418905b219c6b9a9f6f8bf3442 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "pitches, staff-notation, vocal-music, template"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Esta plantilla muestra el uso de contextos @code{StaffGroup} y
 @code{GrandStaff} anidados para sub-agrupar instrumentos del mismo
index 4ecd940c180a174984c191adefb7f4e8f2b423f8..7da788abd1174d0773ee6417dce5f4e4500440c4 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "pitches, text"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 
 Internamente, @code{\\ottava} establece las propiedades
index a892395e7a1b520c9fe0d6442d17232da7345128..60c803fb54572eb412c2eb98f61898f88b3d4c7a 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms"
 
-%%   Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%%   Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 
   texidoces = "
 
index dba0e30622e702445b327e55e313553ab36d5c5e..d8c59b5d251624e936d4afd3781f28e6cbf59b0b 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "repeats, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Se pueden mostrar los contadores de las repeticiones del tipo
 porcentaje a intervalos regulares mediante el establecimiento de
index 293e398834fa3c0e491936e4787f838fa5fd423b..e742834a940844beb623b8ce7748b82e3aec0b52 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "repeats"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Las repeticiones de compases completos de más de dos repeticiones
 pueden llevar un contador si se activa la propiedad adecuada, como se
index a6a95073ec13d7af1c7fea3640b75436a515a9eb..70232fc56813dabca2554b387836c898b1c8a6c9 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
  doctitlees = "Permitir saltos de línea dentro de grupos especiales con barra"
  texidoces = "
 Este ejemplo artificial muestra cómo se pueden permitir tanto los
index 8d0c1402107a3ae2db61c1bb5651ba47e6dfceeb..e35c8fa362ac432576ed12112bf4589d8469c2ff 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "keyboards, template"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Presentamos a continuación una plantilla de piano sencilla con algunas
 notas.
index 991479b451c333da18ccb7b419c2b426fb6bddbf..0c5b0ab1fbd19b8885c40a67bbe0d5b2a040f764 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Muchas partituras de piano tienen las indicaciones dinámicas centradas
 entre los dos pentagramas.  El contexto @code{Dynamics}, si se sitúa
index cb4b2bd9c0648523908bda465a017a7fb83d8d50..51f575c9c69985d4e3cd6ba839697de70595434f 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "text, keyboards, template"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 En lugar de tener un pentagrama dedicado a la melodía y la letra, ésta
 se puede centrar entre los pentagramas de un sistema de piano.
index d90618d5c475e5453756944379bdb75066355163..bcb6ee0d2e9eb5714764b623ec595204dbc2d27d 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "vocal-music, keyboards, template"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 He aquí el típico formato dde una canción: un pentagrama con la
 melodía y la letra, y el acompañamiento de piano por debajo.
index 2e8a0a201037c479c21afdc91822cd9f88c22e21..b404d0e4b3dc695a327ddd474dba41827078aa50 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "fretted-strings"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Es posible ejercer un mayor control sobre la colocación de las
 digitaciones de la mano derecha estableciendo el valor de una
index aa1795f1ad683639270f5262bf6375cddab99924..c6353cd0d6e1f711a6d09eac43c5a18a266fb860 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "fretted-strings"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 La polifonía se crea de la misma forma en un @code{TabStaff} que
 en una pauta normal.
index e2ed8d2ddcbf298dc21d15000a589901c2657b35..79ef8167d25ef405545e4a5073f24d6924770507 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "expressive-marks, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Si necesitamos alargar o acortar un símbolo de arpegio, podemos
 modificar independientemente los extremos superior e inferior.
index 3f12902a1c633d6006b78c541731d018fa06be60..ad7cf1de0d654912d4319f0ba4c3854c492177f5 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 
 Cuando se colocan figuras sobre líneas adicionales, sus barras se
index 11a71361aaa97aad174bcd5c163d79cbf9706114..bd5ab8a92501445254ed2ab933262328bc3d80ed 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 
 Al establecer la propiedad @code{'strict-grace-spacing} hacemos que
index d1c50b847e450b012c75358b621707f04519446f..c5e38e8db190c9b48772ee3ac7ef3ed5073a3c49 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
  doctitlees = "Posicionar los silencios multicompás"
  texidoces = "
 A diferencia de los silencios normales, no existe una instrucción
index 1c3451f34497f8f9a128a7cb3ba5f95034f0b649..1a73483e17c003bd05f904eb4e23e1d68ac162f7 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "expressive-marks, editorial-annotations, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 
 Los elementos de marcado de texto deben tener la propiedad
index be7c22d585dbd8eb4d7b984b21d33623fda7b176..26c811202b051dfd63eb9364c1e09a67a4f7eba0 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "pitches"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 doctitlees = "Evitar que se añadan becuadros adicionales automáticamente"
 
 texidoces = "
index eb7f37250141d1bf747f184b434987f13de5b977..ccfdac0a51dc4fb7802980ec00aebbf11e408f15 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "pitches"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 doctitlees = "Evitar que se impriman becuadros cuando cambia la armadura"
 
 texidoces = "
index 7386aa8c6f041a251f46fc4a75c9743a0ae9063c..7c9f1e2228a8afbc55dcb6213060abd6da9825d0 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "repeats, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Se puede imprimir una línea divisoria de la forma @code{|:} al
 principio de la pieza, sobreescribiendo la propiedad correspondiente:
index e3beb190466ea895f91bb2814d587db591f18c19..887055be42da89567b44a6ea26e70d1afed5457c 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 
 Se pueden imprimir los números de compás a intervalos regulares
index e243bcf2c1e419ddbbc34368fc9d6f8fd0e6f79f..39e3b2ae3317d3db424614fe9ba3ab0040efe003 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 
 Los números de compás también se pueden imprimir dentro de rectángulos o de circunferencias.
index 33278e8eadaf44c976109e7b4b79599cf5b62fe5..6278a1072db16e748142c7efebf3150df916c537 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "expressive-marks"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Se pueden imprimir reguladores con un círculo en la punta (notación
 «al niente») estableciendo la propiedad @code{circled-tip} del objeto
index e9e0c7ff93866c961758070c829c079fac71d1e6..bcc5256e0ec7097f960f3594c831f6930546c301 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "text"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 
   texidoces = "
 
index 31d7d84d52423ee2d6d2b56fa7a43c375440ea91..dda9b8e3815712865f95ccdd68014ba07fad058e 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "text"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Aunque normalmente las marcas de texto sólo se imprimen sobre el
 pentagrama superior, también se pueden imprimir en otro pentagrama
index 558160f4ea66ada222cb7662a0cd0975220399db..86fec1bcc933d2eb422f23da068c3570c2f35669 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms, expressive-marks, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 De forma predeterminada, las indicaciones metronómicas y las
 letras de ensayo se imprimen encima del pentagrama.  Para
index 673a31c3a8bd334c91498781e547f837fc4511a3..2b473fc87bc5e5b95dc25bb14d89bb4772f3e7bd 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Se puede usar el contexto @code{NoteNames} para imprimir el valor
 textual de las notas.  La propiedad @code{printOctaveNames} activa o
index b4530884852244edbc82937be293d5f559ece3e5..01ae02de7863e705cdc8f0bf31ad287565817f90 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 
 De forma predeterminada se suprime el número del primer compás de una
index 0ff2514c12a0dea187a113533d80315038d5e9c9..44e1bd151f06eff7ba18735bcb6c5589130a9ca2 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "pitches, staff-notation"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Los pasajes citados tienen en cuenta la transposición de la fuente
 tanto como la del destino.  En este ejemplo, todos los
index 3927fec3af00e5b17fb19c4eb8ab6199171af900..a36d1a12943f09649e54da5e01baa81e75526351 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "staff-notation"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 
 La propiedad @code{quotedEventTypes} determina los tipos de eventos
index 714c52cd0598e2d433ffbfef1359179f780f9996..b05f8562f644e72492b19c939e51513031e9b414 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "winds"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 
   texidoces = "
 El ejemplo siguiente muestra cómo se pueden realizar diagramas de
index 1cb4ceb3363b46ae4dfd182556167cbb13a6fff5..c46447e15236f8461cc8a88a995cbd8ea49bceac 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 
 Los valores predeterminados para las notas de adorno están
index 74aa399711363734e7352d0c465cf63f06b3707e..25a1f20cdd350a15bcc7792cfacdb0d8ead4e74a 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms, contexts-and-engravers"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 
 Se pueden eliminar completamente los números de compás quitando el
index cc4ff11d140ccfdb342209bad7b665e36680a857..a0770b813c3a070f83ed8403bde2cc23502e354d 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 De forma predeterminada, las líneas divisorias en los grupos
 StaffGroup, PianoStaff o GrandStaff se conectan entre los pentagramas.
index 47d676591d257b8297b46e27eac52298a2e910e9..ad2cf513c2ad021fb1e5c7f6d60118802f329483 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "staff-notation, tweaks-and-overrides, breaks"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 El primer pentagrama vacío también se puede suprimir de la
 partitura estableciendo la propiedad @code{remove-first} de
index 221b38f0c479a55a65836c8a408e6d0b9efea704..39df7bc5be60642fb7894d82949520c69ea34339 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms, ancient-notation, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   doctitlees = "Estilos de silencios"
   texidoces = "
 Los silencios se pueden imprimir en distintos estilos.
index e3b3017657fca0f938f8f86e440a144a10cedbe9..18b1a9dde17ae0afcae7bf3b3c73f83981fc38e6 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Para tipografiar las barras agrupadas en la forma @code{3-4-3-2} sólo
 es necesario modificar la estructura de pulsos:
index 2492732d45f0c582c33df4e0a27b162adb4c7719..966cf0d81d6628a0597d887643afb1367dba4371 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "vocal-music, template"
 
-%% Translation of GIT committish: b1bebb842d9762894fc7b2a178e2bdfcd544419f
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 
   texidoces = "
 Plantilla de coro SATB (en cuatro pentagramas)
index 8a617e59850b2a61f758a0c26f01e1e1c691292f..f7383442cc435de5d0e2129e34516eba92214063 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "expressive-marks, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Si la nota que da fin a un regulador cae sobre la primera parte de
 un compás, el regulador se detiene en la línea divisoria
index 3a2991487729060b47cecfdc16872f121ceeba63..0b81ecd42a9a6e58255d84bafa29dffcd3581973 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "staff-notation, tweaks-and-overrides, paper-and-layout"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Se pueden insertar separadores sistema entre los sistemas de una
 página.  Se puede usar cualquier elemento de marcado, pero
index feba3e29c253a4603fe0766f7c84e1c0c1807824..809a5287a7d25985ac54e13004b4d4428b7618c4 100644 (file)
@@ -7,7 +7,7 @@
 %% Note: this file works from version 2.14.0
 \version "2.14.0"
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 
   texidoces = "
 
index eddfe22d0a4ff8efb5c1b477712072800cbb3075..44c3f95fe60d4f8b6ed18ed6ecd2d9adb79a8ec5 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "expressive-marks"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Si los reguladores son demasiado cortos, se pueden alargar
 modificando la propiedad @code{minimum-length} del objeto
index 7491e9344c92d62dd3f1b62c88ee3baecf101cb6..2c129d6611dd0b4fd6abec74e44e86dbcb08f734 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "repeats"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 De forma predeterminada, los corchetes de primera y segunda vez se
 trazan encima de los finales alternativos completos, pero es posible
index 80aa7049614451c8d468bad5830f27b53bded566..89d5877b86c996ae9a6d2e67a1e28b6d43456d5e 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "chords"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Se pueden imprimir los acordes exclusivamente al comienzo de las
 líneas y cuando cambia el acorde.
index 7998275c2d4f0fda640fed70281d433194d6d1fa..68a81808004f2f538466c1adb924df9e2c8143d6 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "chords"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Al juntar nombres de acorde en cifrado americano, melodía y letra,
 obtenemos una hoja guía de acordes o «lead sheet»:
index 593ca47d7e28747f7b90040377587fe92177a58a..e9303ef49ebdf2b691d940863e9482b7f6ac327b 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "vocal-music, chords, template"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Esta plantilla facilita la preparación de una canción con melodía,
 letra y acordes.
index 4dbc43e17d02273528421f9eda480cd23ddef7dd..d27d8c1602e1a5a7b5fe708b7308a8aefc201b32 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "vocal-music, chords, template"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Presentamos a continuación un ejemplo de plantilla para una hoja
 guía de acordes con melodía, letra, acordes y diagramas de
index 7fdf1d4463ed752cc0826bbf325cfc6fcedf6eab..57a593d37054889e96a1233a43fb3157d019212c 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "chords, template"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 ¿Quiere preparar una hoja guía de acordes (o «lead sheet») con
 melodía y acordes?  ¡No busque más!
index 6b05e973d62e3dca7a39809a9d08688730e4e305..ca72e43fbb86f8831bd6b1e7fa21d51962bfba1f 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "vocal-music, template"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Esta pequeña plantilla muestra una melodía sencilla con letra. Córtela
 y péguela, escriba las notas y luego la letra. Este ejemplo desactiva
index 3eed5a65769b649fbebb8f971559275d2614b8cf..1e488326d8375b1ab885fbbae51e90a81f4f6967 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "template"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Esta plantilla simple prepara un pentagrama con notas, adecuado para
 un instrumento solista o un fragmento melódico. Córtelo y péguelo en
index 1267ce2ecbc3bba7ba2872f0f2e1e7fcd90b0694..a336b0bd4b82b11b52dfd006b70d96d742846bc5 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 
 Los deslizamientos se pueden componer tipográficamente tanto en los
index f9d834c83c1fc7cfc6552794a56cc6ca241300aa..798cca5ad2cfb81ee5594b9260ef1880469c24d3 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   doctitlees = "Marca de pizzicato de chasquido (`pizzicato de Bartók')"
   texidoces = "
 El pizzicato de chasquido (también llamado @q{Pizzicato de Bartók}) es un
index be3f37c94ad724aeec88d474fa68ce0120d1f566..5877d17c9583fc4dfab13e8a7ee107c61328c8b0 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "text"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Los textos independientes se pueden disponer en varias columnas
 utilizando instrucciones @code{\\markup}:
index a68335f95ec13ed8e59409cca70cae58b8b2f80d..7f930a045595d5f758b64fcf9ca69ec01c1de38c 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 La dirección de las plicas se contola de la misma forma en la
 tablatura que en la notación tradicional. Las barras se pueden
index f9baba8e593b51bfde91198e73d27517fac4d795..9e4b9ae35dea2b8302e8477ffc7ce74b178d8841 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "unfretted-strings, template"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Esta plantilla muestra un cuarteto de cuerda normal. También utiliza
 una sección @code{\\global} para el compás y la armadura
index 80c0b72a6016a18dcec3ac7a2aeccdaf5bcfc015..1a7e9609cda430f3572b1e64bdbdbc316cab95f3 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "unfretted-strings, template"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 El fragmento de código @qq{Plantilla de cuarteto de cuerda} produce un
 resultado satisfactorio para el cuarteto, pero ¿y si tenemos que
index bba85fb6bb14bb0cda1ab4841a2854d5eac744e5..1622b5bf8d7a89fc254d7ad057859add63712f07 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 
   texidoces = "
 
index 46a4ae024bd761d5cbe599f45f34108fd56562c7..1be7342e58d3e9a25bcf31d002723f75963938ed 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 
 A veces, la indicación de compás no debe imprimir la fracción completa
index 2fe993cb8d796aef92f82fe1eef32f483de1995c..88d2d59bbd4946c96d5ef2c528c3855c1700d7ca 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "ancient-notation, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 A modo de alternativa para obtener auténticos «incipit»
 independientes de la partitura principal, se incluyen como
index 88ccaff75e8a54b01fd259719df8866e386923b7..f98cdfeb2e84e6a0262d3c663a387b99de43694a 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "pitches"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 doctitlees = "Transportar música con el menor número de alteraciones"
 texidoces = "
 Este ejemplo utiliza código de Scheme para forzar las
index 5a7c2a9de2dc3bb5ceb632efd3abf06682aeb948..1afde1f2292008a61b18c1e5b8423e296525887c 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "pitches, staff-notation, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   doctitlees = "Trucaje de las propiedades de clave"
   texidoces = "
 La instrucción @code{\\clef \"treble_8\"} equivale a un ajuste de
index 5e38f9da8d9f5a4873c09ae185e93465ead33e02..e2bf45d17c735346ff679946f5c74feddcabdb92 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 
 La disposición de las expresiones de adorno se puede cambiar a lo
index 16d9a53506b8c1cb89d2af738ce1d3de749410a0..f32e85b2ea1c16206f0ca9344e479fd38b0b78fc 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "staff-notation, contexts-and-engravers"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Se puede usar el delimitador de comienzo de un sistema
 @code{SystemStartSquare} estableciéndolo explícitamente dentro de
index c975e50ac42b18366a31e0ce6d14aa8aa2c822fe..a5329b989b7ec98dcdec9cae7034e6967976bd20 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 
 Se pueden imprimir estilos alternativos del corchete o gancho de las
index b521d6b6d920c496da5bd8f98b5eb3b489bcdf4c..0e36eac501731ceedc53f850b9cc86a040347366 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "expressive-marks, vocal-music"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 El corchete de arpegios @code{arpeggioBracket} se puede usar para
 indicar la división de voces cuando no hay plicas que puedan ofrecer
index 7fe8032374584a79dbff22ec8a1f5f94cc06da29..c2e1838b9c334a9c99c55aeecf75db102cad234a 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "expressive-marks"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Algunos compositores escriben dos ligaduras cuando quieren acordes
 legato.  Esto se puede conseguir estableciendo @code{doubleSlurs}.
index b3c8d605a6f09d51f2055acf3def096b30fcbc3d..0042a9821baa1ffcf54f7e33aff9db729f5697e3 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 
 Es posible aplicar la barrita que cruza la barra de las
index 912e36704448c21d6d99f74982e38648713bebd5..f287ec2df015a058ac99c6138c32d08e58bbcaec 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 
   texidoces = "
 
index fd76cb9390e1f99e90126d6c8a934cdd1902a1e1..ede6836dcc2b6a5cdbe5f949d3033d5acdc62652 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 
   texidoces = "
 
index 00781b41749f0cbad2fedaf84af66c698d484097..80e204cd311af1f21a635e4703954e00f6760609 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "rhythms"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
  doctitlees = "Uso de ligaduras en los arpegios"
  texidoces = "
 En ocasiones se usan ligaduras de unión para escribir los arpegios.
index 181244b37eb5f129ada2245b97e521259657d728..66516cde80e8666d7309ec441e3e3fed3a9a0a49 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "tweaks-and-overrides, spacing"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Mediante el establecimiento de la propiedad @code{'Y-extent} a un valor
 adecuado, todos los objetos @code{DynamicLineSpanner} (reguladores e
index 9f1d5eca2517c791062723c6417b1807115495e2..d842e8f32853091cd056fb0d57114315755e30e4 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "expressive-marks"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Las expresiones dinámicas que se comienzan, terminan o se producen
 en la misma nota se alinean verticalmente.  Para asegurar que las
index 4e2b678b604e41b83c411a1736727a4022dc1489..4fb3513b059651e34a03e33ecbb5d997de189e46 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "vocal-music, tweaks-and-overrides, spacing"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Este fragmento de código muestra el uso de las propiedades de
 contexto @code{alignBelowContext} y @code{alignAboveContext} para
index 5b0b75e958ee0b4e88b37d03704fb8179de007e6..b8ea79e0a1140489127857a52d3f1119da4a603e 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "chords, tweaks-and-overrides"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Allí donde se utilicen líneas extensoras para el bajo cifrado mediante
 el establecimiento de @code{useBassFigureExtenders} al valor
index 270c7e56778b1b40caf74b02eff5d037a1db0b14..faa9224f9e306c638b28664ab71737cd2f9a9631 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 
 Esta plantilla añade una reducción de piano automática a la partitura
index 505f917a4ef584e297394ea160acc0127f78c0bb..6ea379abfcba4dbec33cefdbbfcd777d2027f491 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "text, vocal-music, contexts-and-engravers, template"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Esta plantilla es, básicamente, la misma que la sencilla plantilla
 @qq{Conjunto vocal}, excepto que aquí todas las líneas de letra se
index 8aaa65dae49c4abd36d7857f494ffe35db8fa658..b93b4fdb7d6e9e3f7f96544281e0b380c4f48c74 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 
   texidoces = "
 Esta plantilla crea una partitura que comienza con una estrofa para
index aec0ddd40ab172505531cf1bfd0b02db05b7f6b7..8f04c596f2585a8f62f17d6b4aba027b96e90790 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 He aquí una partitura vocal estándar para cuatro voces SATB. Con
 grupos mayores, suele ser útil incluir una sección que aparezca en
index 8610bd2b06ca794b652d3a74ea887990f835381a..c4bcbc88caa9d29e1997cfcebc79b3cefdb17596 100644 (file)
@@ -9,7 +9,7 @@
 \header {
   lsrtags = "repeats, staff-notation, chords"
 
-%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%% Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 Mediante la adición del grabador @code{Volta_engraver} al
 pentagrama pertinente, se pueden poner los corchetes de primera y
index 331a47493f78f7c168373dd803ce848c8ca0d880..e9b675c105ce34831caaa824975c00208b20bc85 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%%%    Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%%%    Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
 
   texidoces = "
 
index b94ca3032dc5ea32b246f089c4b9f9d9a31e270b..95040852c19c958844907ee4af397e18c6b32e6b 100644 (file)
@@ -8,7 +8,7 @@
 \version "2.14.0"
 
 \header {
-%%%    Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
+%%%    Translation of GIT committish: 2d548a99cb9dba80f2ff035582009477cd37eceb
   texidoces = "
 El fragmento de música que aparece a continuación presenta todos los
 diagramas de viento madera que se encuentran definidos en LilyPond por
index 28e131b789e808b91b2e6f12f53f84314b9d3e32..2edf682350ca73389199761972adffc77e0f90bd 100644 (file)
@@ -8,6 +8,20 @@
 
 @c used for news about the upcoming release; see CG 10.2
 
+@newsItem
+@subsubheading LilyPond 2.15.14 released!  @emph{October 7, 2011}
+
+We are happy to announce the release of LilyPond 2.15.14.  This
+release contains the usual number of bugfixes.
+
+It is strongly recommended that normal users do @strong{not} use
+this release, and instead use the stable 2.14 version.  Please
+note that due to a few Critical bugs, this is not the next release
+candidate.
+
+@newsEnd
+
+
 @newsItem
 @subsubheading LilyPond 2.15.13 released!  @emph{September 27, 2011}
 
diff --git a/VERSION b/VERSION
index b66f174127774a199e37e83369f01140ecd96ee0..2d12833dc4d1992409ab54a1157fe130611695ab 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,7 +1,7 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=2
 MINOR_VERSION=15
-PATCH_LEVEL=14
+PATCH_LEVEL=15
 MY_PATCH_LEVEL=
 VERSION_STABLE=2.14.2
-VERSION_DEVEL=2.15.13
+VERSION_DEVEL=2.15.14
diff --git a/input/regression/glissando-skip.ly b/input/regression/glissando-skip.ly
new file mode 100644 (file)
index 0000000..9b3febb
--- /dev/null
@@ -0,0 +1,12 @@
+\version "2.15.12"
+
+\header {
+  texidoc = "@code{NoteColumn} grobs can be skipped over by glissandi.
+"
+}
+
+\relative c' {
+  a2 \glissando
+  \once \override NoteColumn #'glissando-skip = ##t
+  f''4 d,
+}
diff --git a/input/regression/part-combine-3voices.ly b/input/regression/part-combine-3voices.ly
new file mode 100644 (file)
index 0000000..169b522
--- /dev/null
@@ -0,0 +1,18 @@
+\version "2.15.14"
+
+\header {
+  texidoc ="It is possible to use the part combiner for three
+       voices with \\partcombineUp and \\partcombineDown."
+}
+
+
+soprano = { d''2 f'' g'' }
+alto = { a' c''4 d'' e''2 }
+tenor = { f'2 a'4 b' c''2 }
+basso = { d'4 e' f' g' g'2 }
+
+\new Staff << \partcombineUp \soprano \alto \\ \basso >>
+
+\new Staff << \soprano \\ \partcombineDown \tenor \basso >>
+
+
index 1cbf7765b70f338ff82a5b9ed004ddf47c8eebbd..e14fa2f7af1972351093b84afabc1912f505b825 100644 (file)
@@ -79,9 +79,11 @@ Audio_dynamic::Audio_dynamic ()
 {
 }
 
-Audio_span_dynamic::Audio_span_dynamic ()
+Audio_span_dynamic::Audio_span_dynamic (Real min_volume, Real max_volume)
 {
   grow_dir_ = CENTER;
+  min_volume_ = min_volume;
+  max_volume_ = max_volume;
 }
 
 void
@@ -135,7 +137,7 @@ Audio_span_dynamic::render ()
 
   Real start_v = dynamics_[0]->volume_;
   if (dynamics_.back ()->volume_ < 0)
-    dynamics_.back ()->volume_ = max (min (start_v + grow_dir_ * 0.25, 1.0), 0.1);
+    dynamics_.back ()->volume_ = max (min (start_v + grow_dir_ * 0.25, max_volume_), min_volume_);
 
   delta_v = dynamics_.back ()->volume_ - dynamics_[0]->volume_;
 
index 106fffc74134713cbd74fc181ec48b7e44dd2857..8baf0161b40163a7d0362db70b8480d9b0322dda 100644 (file)
@@ -30,11 +30,16 @@ using namespace std;
 #include "direction.hh"
 #include "directional-element-interface.hh"
 #include "grob.hh"
+#include "grob-array.hh"
+#include "item.hh"
 #include "international.hh"
+#include "least-squares.hh"
 #include "libc-extension.hh"
 #include "main.hh"
+#include "note-head.hh"
 #include "output-def.hh"
 #include "pointer-group-interface.hh"
+#include "rhythmic-head.hh"
 #include "staff-symbol-referencer.hh"
 #include "stencil.hh"
 #include "stem.hh"
@@ -127,7 +132,7 @@ Beam_configuration *Beam_configuration::new_config (Interval start,
 Real
 Beam_scoring_problem::y_at (Real x, Beam_configuration const *p) const
 {
-  return p->y[LEFT] + (x - x_span[LEFT]) * p->y.delta () / x_span.delta ();
+  return p->y[LEFT] + (x - x_span_[LEFT]) * p->y.delta () / x_span_.delta ();
 }
 
 /****************************************************************/
@@ -154,12 +159,12 @@ LY_DEFINE (ly_beam_score_count, "ly:beam-score-count", 0, 0, 0,
 void Beam_scoring_problem::add_collision (Real x, Interval y,
                                           Real score_factor)
 {
-  if (edge_dirs[LEFT] == edge_dirs[RIGHT])
+  if (edge_dirs_[LEFT] == edge_dirs_[RIGHT])
     {
-      Direction d = edge_dirs[LEFT];
+      Direction d = edge_dirs_[LEFT];
 
-      Real quant_range_y = quant_range[LEFT][-d]
-                           + (x - x_span[LEFT]) * (quant_range[RIGHT][-d] - quant_range[LEFT][-d]) / x_span.delta ();
+      Real quant_range_y = quant_range_[LEFT][-d]
+                           + (x - x_span_[LEFT]) * (quant_range_[RIGHT][-d] - quant_range_[LEFT][-d]) / x_span_.delta ();
 
       if (d * (quant_range_y - minmax (d, y[UP], y[DOWN])) > 0)
         {
@@ -173,15 +178,15 @@ void Beam_scoring_problem::add_collision (Real x, Interval y,
   for (vsize j = 0; j < segments_.size (); j++)
     {
       if (segments_[j].horizontal_.contains (x))
-        c.beam_y_.add_point (segments_[j].vertical_count_ * beam_translation);
+        c.beam_y_.add_point (segments_[j].vertical_count_ * beam_translation_);
       if (segments_[j].horizontal_[LEFT] > x)
         break;
     }
-  c.beam_y_.widen (0.5 * beam_thickness);
+  c.beam_y_.widen (0.5 * beam_thickness_);
 
   c.x_ = x;
 
-  y *= 1 / staff_space;
+  y *= 1 / staff_space_;
   c.y_ = y;
   c.base_penalty_ = score_factor;
   collisions_.push_back (c);
@@ -190,9 +195,9 @@ void Beam_scoring_problem::add_collision (Real x, Interval y,
 void Beam_scoring_problem::init_collisions (vector<Grob *> grobs)
 {
   Grob *common_x = NULL;
-  segments_ = Beam::get_beam_segments (beam, &common_x);
+  segments_ = Beam::get_beam_segments (beam_, &common_x);
   vector_sort (segments_, beam_segment_less);
-  if (common[X_AXIS] != common_x)
+  if (common_[X_AXIS] != common_x)
     {
       programming_error ("Disagree on common x. Skipping collisions in beam scoring.");
       return;
@@ -203,10 +208,10 @@ void Beam_scoring_problem::init_collisions (vector<Grob *> grobs)
     {
       Box b;
       for (Axis a = X_AXIS; a < NO_AXES; incr (a))
-        b[a] = grobs[i]->extent (common[a], a);
+        b[a] = grobs[i]->extent (common_[a], a);
 
       Real width = b[X_AXIS].length ();
-      Real width_factor = sqrt (width / staff_space);
+      Real width_factor = sqrt (width / staff_space_);
 
       Direction d = LEFT;
       do
@@ -223,15 +228,15 @@ void Beam_scoring_problem::init_collisions (vector<Grob *> grobs)
   for (set<Grob *>::const_iterator it (stems.begin ()); it != stems.end (); it++)
     {
       Grob *s = *it;
-      Real x = s->extent (common[X_AXIS], X_AXIS).center ();
+      Real x = s->extent (common_[X_AXIS], X_AXIS).center ();
 
       Direction stem_dir = get_grob_direction (*it);
       Interval y;
       y.set_full ();
-      y[-stem_dir] = Stem::chord_start_y (*it) + (*it)->relative_coordinate (common[Y_AXIS], Y_AXIS)
-                     - beam->relative_coordinate (common[Y_AXIS], Y_AXIS);
+      y[-stem_dir] = Stem::chord_start_y (*it) + (*it)->relative_coordinate (common_[Y_AXIS], Y_AXIS)
+                     - beam_->relative_coordinate (common_[Y_AXIS], Y_AXIS);
 
-      Real factor = parameters.STEM_COLLISION_FACTOR;
+      Real factor = parameters_.STEM_COLLISION_FACTOR;
       if (!unsmob_grob (s->get_object ("beam")))
         factor = 1.0;
       add_collision (x, y, factor);
@@ -240,19 +245,19 @@ void Beam_scoring_problem::init_collisions (vector<Grob *> grobs)
 
 void Beam_scoring_problem::init_stems ()
 {
-  extract_grob_set (beam, "covered-grobs", collisions);
-  extract_grob_set (beam, "stems", stems);
+  extract_grob_set (beam_, "covered-grobs", collisions);
+  extract_grob_set (beam_, "stems", stems);
   for (int a = 2; a--;)
     {
-      common[a] = common_refpoint_of_array (stems, beam, Axis (a));
-      common[a] = common_refpoint_of_array (collisions, common[a], Axis (a));
+      common_[a] = common_refpoint_of_array (stems, beam_, Axis (a));
+      common_[a] = common_refpoint_of_array (collisions, common_[a], Axis (a));
     }
 
-  Drul_array<Grob *> edge_stems (Beam::first_normal_stem (beam),
-                                 Beam::last_normal_stem (beam));
+  Drul_array<Grob *> edge_stems (Beam::first_normal_stem (beam_),
+                                 Beam::last_normal_stem (beam_));
   Direction d = LEFT;
   do
-    x_span[d] = edge_stems[d] ? edge_stems[d]->relative_coordinate (common[X_AXIS], X_AXIS) : 0.0;
+    x_span_[d] = edge_stems[d] ? edge_stems[d]->relative_coordinate (common_[X_AXIS], X_AXIS) : 0.0;
   while (flip (&d) != LEFT);
 
   Drul_array<bool> dirs_found (0, 0);
@@ -263,52 +268,52 @@ void Beam_scoring_problem::init_stems ()
         continue;
 
       Stem_info si (Stem::get_stem_info (s));
-      si.scale (1 / staff_space);
-      stem_infos.push_back (si);
+      si.scale (1 / staff_space_);
+      stem_infos_.push_back (si);
       dirs_found[si.dir_] = true;
 
       bool f = to_boolean (s->get_property ("french-beaming"))
                && s != edge_stems[LEFT] && s != edge_stems[RIGHT];
 
-      Real y = Beam::calc_stem_y (beam, s, common, x_span[LEFT], x_span[RIGHT], CENTER,
+      Real y = Beam::calc_stem_y (beam_, s, common_, x_span_[LEFT], x_span_[RIGHT], CENTER,
                                   Interval (0, 0), f);
-      base_lengths.push_back (y / staff_space);
-      stem_xpositions.push_back (s->relative_coordinate (common[X_AXIS], X_AXIS));
+      base_lengths_.push_back (y / staff_space_);
+      stem_xpositions_.push_back (s->relative_coordinate (common_[X_AXIS], X_AXIS));
     }
 
-  edge_dirs = Drul_array<Direction> (CENTER, CENTER);
-  if (stem_infos.size ())
+  edge_dirs_ = Drul_array<Direction> (CENTER, CENTER);
+  if (stem_infos_.size ())
     {
-      edge_dirs = Drul_array<Direction> (stem_infos[0].dir_,
-                                         stem_infos.back ().dir_);
+      edge_dirs_ = Drul_array<Direction> (stem_infos_[0].dir_,
+                                         stem_infos_.back ().dir_);
     }
 
-  is_xstaff = Align_interface::has_interface (common[Y_AXIS]);
-  is_knee = dirs_found[LEFT] && dirs_found[RIGHT];
+  is_xstaff_ = Align_interface::has_interface (common_[Y_AXIS]);
+  is_knee_ = dirs_found[LEFT] && dirs_found[RIGHT];
 
-  staff_radius = Staff_symbol_referencer::staff_radius (beam);
-  edge_beam_counts = Drul_array<int>
+  staff_radius_ = Staff_symbol_referencer::staff_radius (beam_);
+  edge_beam_counts_ = Drul_array<int>
                      (Stem::beam_multiplicity (stems[0]).length () + 1,
                       Stem::beam_multiplicity (stems.back ()).length () + 1);
 
-  // TODO - why are we dividing by staff_space?
-  beam_translation = Beam::get_beam_translation (beam) / staff_space;
+  // TODO - why are we dividing by staff_space_?
+  beam_translation_ = Beam::get_beam_translation (beam_) / staff_space_;
 
   d = LEFT;
   do
     {
-      quant_range[d].set_full ();
+      quant_range_[d].set_full ();
       if (!edge_stems[d])
         continue;
 
-      Real stem_offset = edge_stems[d]->relative_coordinate (common[Y_AXIS], Y_AXIS)
-                         - beam->relative_coordinate (common[Y_AXIS], Y_AXIS);
-      Interval heads = Stem::head_positions (edge_stems[d]) * 0.5 * staff_space;
+      Real stem_offset = edge_stems[d]->relative_coordinate (common_[Y_AXIS], Y_AXIS)
+                         - beam_->relative_coordinate (common_[Y_AXIS], Y_AXIS);
+      Interval heads = Stem::head_positions (edge_stems[d]) * 0.5 * staff_space_;
 
-      Direction ed = edge_dirs[d];
-      heads.widen (0.5 * staff_space
-                   + (edge_beam_counts[d] - 1) * beam_translation + beam_thickness * .5);
-      quant_range[d][-ed] = heads[ed] + stem_offset;
+      Direction ed = edge_dirs_[d];
+      heads.widen (0.5 * staff_space_
+                   + (edge_beam_counts_[d] - 1) * beam_translation_ + beam_thickness_ * .5);
+      quant_range_[d][-ed] = heads[ed] + stem_offset;
     }
   while (flip (&d) != LEFT);
 
@@ -317,39 +322,531 @@ void Beam_scoring_problem::init_stems ()
 
 Beam_scoring_problem::Beam_scoring_problem (Grob *me, Drul_array<Real> ys)
 {
-  beam = me;
-  unquanted_y = ys;
+  beam_ = me;
+  unquanted_y_ = ys;
 
   /*
     Calculations are relative to a unit-scaled staff, i.e. the quants are
-    divided by the current staff_space.
+    divided by the current staff_space_.
   */
-  staff_space = Staff_symbol_referencer::staff_space (me);
-  beam_thickness = Beam::get_beam_thickness (me) / staff_space;
-  line_thickness = Staff_symbol_referencer::line_thickness (me) / staff_space;
+  staff_space_ = Staff_symbol_referencer::staff_space (me);
+  beam_thickness_ = Beam::get_beam_thickness (me) / staff_space_;
+  line_thickness_ = Staff_symbol_referencer::line_thickness (me) / staff_space_;
 
   // This is the least-squares DY, corrected for concave beams.
-  musical_dy = robust_scm2double (me->get_property ("least-squares-dy"), 0);
+  musical_dy_ = robust_scm2double (me->get_property ("least-squares-dy"), 0);
 
-  parameters.fill (me);
+  parameters_.fill (me);
   init_stems ();
 }
 
+// Assuming V is not empty, pick a 'reasonable' point inside V.
+static Real
+point_in_interval (Interval v, Real dist)
+{
+  if (isinf (v[DOWN]))
+    return v[UP] - dist;
+  else if (isinf (v[UP]))
+    return v[DOWN] + dist;
+  else
+    return v.center ();
+}
+
+/* Set stem's shorten property if unset.
+
+TODO:
+take some y-position (chord/beam/nearest?) into account
+scmify forced-fraction
+
+This is done in beam because the shorten has to be uniform over the
+entire beam.
+*/
+
+void
+set_minimum_dy (Grob *me, Real *dy)
+{
+  if (*dy)
+    {
+      /*
+        If dy is smaller than the smallest quant, we
+        get absurd direction-sign penalties.
+      */
+
+      Real ss = Staff_symbol_referencer::staff_space (me);
+      Real beam_thickness = Beam::get_beam_thickness (me) / ss;
+      Real slt = Staff_symbol_referencer::line_thickness (me) / ss;
+      Real sit = (beam_thickness - slt) / 2;
+      Real inter = 0.5;
+      Real hang = 1.0 - (beam_thickness - slt) / 2;
+
+      *dy = sign (*dy) * max (fabs (*dy),
+                              min (min (sit, inter), hang));
+    }
+}
+
+Interval
+Beam::no_visible_stem_positions (Grob *me, Interval default_value)
+{
+  extract_grob_set (me, "stems", stems);
+  if (stems.empty ())
+    return default_value;
+
+  Interval head_positions;
+  Slice multiplicity;
+  for (vsize i = 0; i < stems.size (); i++)
+    {
+      head_positions.unite (Stem::head_positions (stems[i]));
+      multiplicity.unite (Stem::beam_multiplicity (stems[i]));
+    }
+
+  Direction dir = get_grob_direction (me);
+
+  if (!dir)
+    programming_error ("The beam should have a direction by now.");
+
+  Real y = head_positions.linear_combination (dir)
+           * 0.5 * Staff_symbol_referencer::staff_space (me)
+           + dir * get_beam_translation (me) * (multiplicity.length () + 1);
+
+  y /= Staff_symbol_referencer::staff_space (me);
+  return Interval (y, y);
+}
+
+/*
+  Compute a first approximation to the beam slope.
+*/
+MAKE_SCHEME_CALLBACK (Beam, calc_least_squares_positions, 2);
+SCM
+Beam::calc_least_squares_positions (SCM smob, SCM /* posns */)
+{
+  Grob *me = unsmob_grob (smob);
+
+  int count = normal_stem_count (me);
+  Interval pos (0, 0);
+  if (count < 1)
+    return ly_interval2scm (no_visible_stem_positions (me, pos));
+
+  vector<Real> x_posns;
+  extract_grob_set (me, "normal-stems", stems);
+  Grob *commonx = common_refpoint_of_array (stems, me, X_AXIS);
+  Grob *commony = common_refpoint_of_array (stems, me, Y_AXIS);
+
+  Real my_y = me->relative_coordinate (commony, Y_AXIS);
+
+  Grob *fvs = first_normal_stem (me);
+  Grob *lvs = last_normal_stem (me);
+
+  Interval ideal (Stem::get_stem_info (fvs).ideal_y_
+                  + fvs->relative_coordinate (commony, Y_AXIS) - my_y,
+                  Stem::get_stem_info (lvs).ideal_y_
+                  + lvs->relative_coordinate (commony, Y_AXIS) - my_y);
+
+  Real x0 = first_normal_stem (me)->relative_coordinate (commonx, X_AXIS);
+  for (vsize i = 0; i < stems.size (); i++)
+    {
+      Grob *s = stems[i];
+
+      Real x = s->relative_coordinate (commonx, X_AXIS) - x0;
+      x_posns.push_back (x);
+    }
+  Real dx = last_normal_stem (me)->relative_coordinate (commonx, X_AXIS) - x0;
+
+  Real y = 0;
+  Real slope = 0;
+  Real dy = 0;
+  Real ldy = 0.0;
+  if (!ideal.delta ())
+    {
+      Interval chord (Stem::chord_start_y (stems[0]),
+                      Stem::chord_start_y (stems.back ()));
+
+      /* Simple beams (2 stems) on middle line should be allowed to be
+         slightly sloped.
+
+         However, if both stems reach middle line,
+         ideal[LEFT] == ideal[RIGHT] and ideal.delta () == 0.
+
+         For that case, we apply artificial slope */
+      if (!ideal[LEFT] && chord.delta () && count == 2)
+        {
+          /* FIXME. -> UP */
+          Direction d = (Direction) (sign (chord.delta ()) * UP);
+          pos[d] = get_beam_thickness (me) / 2;
+          pos[-d] = -pos[d];
+        }
+      else
+        pos = ideal;
+
+      /*
+        For broken beams this doesn't work well. In this case, the
+        slope esp. of the first part of a broken beam should predict
+        where the second part goes.
+      */
+      ldy = pos[RIGHT] - pos[LEFT];
+    }
+  else
+    {
+      vector<Offset> ideals;
+      for (vsize i = 0; i < stems.size (); i++)
+        {
+          Grob *s = stems[i];
+          ideals.push_back (Offset (x_posns[i],
+                                    Stem::get_stem_info (s).ideal_y_
+                                    + s->relative_coordinate (commony, Y_AXIS)
+                                    - my_y));
+        }
+
+      minimise_least_squares (&slope, &y, ideals);
+
+      dy = slope * dx;
+
+      set_minimum_dy (me, &dy);
+
+      ldy = dy;
+      pos = Interval (y, (y + dy));
+    }
+
+  /*
+    "position" is relative to the staff.
+  */
+  scale_drul (&pos, 1 / Staff_symbol_referencer::staff_space (me));
+
+  me->set_property ("least-squares-dy", scm_from_double (ldy));
+  return ly_interval2scm (pos);
+}
+
+/* This neat trick is by Werner Lemberg,
+   damped = tanh (slope)
+   corresponds with some tables in [Wanske] CHECKME */
+MAKE_SCHEME_CALLBACK (Beam, slope_damping, 2);
+SCM
+Beam::slope_damping (SCM smob, SCM posns)
+{
+  Grob *me = unsmob_grob (smob);
+  Drul_array<Real> pos = ly_scm2interval (posns);
+
+  if (normal_stem_count (me) <= 1)
+    return posns;
+
+  SCM s = me->get_property ("damping");
+  Real damping = scm_to_double (s);
+  Real concaveness = robust_scm2double (me->get_property ("concaveness"), 0.0);
+  if (concaveness >= 10000)
+    {
+      pos[LEFT] = pos[RIGHT];
+      me->set_property ("least-squares-dy", scm_from_double (0));
+      damping = 0;
+    }
+
+  if (damping)
+    {
+      scale_drul (&pos, Staff_symbol_referencer::staff_space (me));
+
+      Real dy = pos[RIGHT] - pos[LEFT];
+
+      Grob *fvs = first_normal_stem (me);
+      Grob *lvs = last_normal_stem (me);
+
+      Grob *commonx = fvs->common_refpoint (lvs, X_AXIS);
+
+      Real dx = last_normal_stem (me)->relative_coordinate (commonx, X_AXIS)
+                - first_normal_stem (me)->relative_coordinate (commonx, X_AXIS);
+
+      Real slope = dy && dx ? dy / dx : 0;
+
+      slope = 0.6 * tanh (slope) / (damping + concaveness);
+
+      Real damped_dy = slope * dx;
+
+      set_minimum_dy (me, &damped_dy);
+
+      pos[LEFT] += (dy - damped_dy) / 2;
+      pos[RIGHT] -= (dy - damped_dy) / 2;
+
+      scale_drul (&pos, 1 / Staff_symbol_referencer::staff_space (me));
+    }
+
+  return ly_interval2scm (pos);
+}
+
+/*
+  We can't combine with previous function, since check concave and
+  slope damping comes first.
+
+  TODO: we should use the concaveness to control the amount of damping
+  applied.
+*/
+MAKE_SCHEME_CALLBACK (Beam, shift_region_to_valid, 2);
+SCM
+Beam::shift_region_to_valid (SCM grob, SCM posns)
+{
+  Grob *me = unsmob_grob (grob);
+
+  /*
+    Code dup.
+  */
+  vector<Real> x_posns;
+  extract_grob_set (me, "stems", stems);
+  extract_grob_set (me, "covered-grobs", covered);
+
+  Grob *common[NO_AXES] = { me, me };
+  for (Axis a = X_AXIS; a < NO_AXES; incr (a))
+    {
+      common[a] = common_refpoint_of_array (stems, me, a);
+      common[a] = common_refpoint_of_array (covered, common[a], a);
+    }
+  Grob *fvs = first_normal_stem (me);
+
+  if (!fvs)
+    return posns;
+  Interval x_span;
+  x_span[LEFT] = fvs->relative_coordinate (common[X_AXIS], X_AXIS);
+  for (vsize i = 0; i < stems.size (); i++)
+    {
+      Grob *s = stems[i];
+
+      Real x = s->relative_coordinate (common[X_AXIS], X_AXIS) - x_span[LEFT];
+      x_posns.push_back (x);
+    }
+
+  Grob *lvs = last_normal_stem (me);
+  x_span[RIGHT] = lvs->relative_coordinate (common[X_AXIS], X_AXIS);
+
+  Drul_array<Real> pos = ly_scm2interval (posns);
+
+  scale_drul (&pos, Staff_symbol_referencer::staff_space (me));
+
+  Real beam_dy = pos[RIGHT] - pos[LEFT];
+  Real beam_left_y = pos[LEFT];
+  Real slope = x_span.delta () ? (beam_dy / x_span.delta ()) : 0.0;
+
+  /*
+    Shift the positions so that we have a chance of finding good
+    quants (i.e. no short stem failures.)
+  */
+  Interval feasible_left_point;
+  feasible_left_point.set_full ();
+
+  for (vsize i = 0; i < stems.size (); i++)
+    {
+      Grob *s = stems[i];
+      if (Stem::is_invisible (s))
+        continue;
+
+      Direction d = get_grob_direction (s);
+      Real left_y
+        = Stem::get_stem_info (s).shortest_y_
+          - slope * x_posns [i];
+
+      /*
+        left_y is now relative to the stem S. We want relative to
+        ourselves, so translate:
+      */
+      left_y
+      += + s->relative_coordinate (common[Y_AXIS], Y_AXIS)
+         - me->relative_coordinate (common[Y_AXIS], Y_AXIS);
+
+      Interval flp;
+      flp.set_full ();
+      flp[-d] = left_y;
+
+      feasible_left_point.intersect (flp);
+    }
+
+  vector<Grob *> filtered;
+  /*
+    We only update these for objects that are too large for quanting
+    to find a workaround.  Typically, these are notes with
+    stems, and timesig/keysig/clef, which take out the entire area
+    inside the staff as feasible.
+
+    The code below disregards the thickness and multiplicity of the
+    beam.  This should not be a problem, as the beam quanting will
+    take care of computing the impact those exactly.
+  */
+  Real min_y_size = 2.0;
+
+  // A list of intervals into which beams may not fall
+  vector<Interval> forbidden_intervals;
+
+  for (vsize i = 0; i < covered.size (); i++)
+    {
+      if (!covered[i]->is_live ())
+        continue;
+
+      if (Beam::has_interface (covered[i]) && is_cross_staff (covered[i]))
+        continue;
+
+      Box b;
+      for (Axis a = X_AXIS; a < NO_AXES; incr (a))
+        b[a] = covered[i]->extent (common[a], a);
+
+      if (b[X_AXIS].is_empty () || b[Y_AXIS].is_empty ())
+        continue;
+
+      if (intersection (b[X_AXIS], x_span).is_empty ())
+        continue;
+
+      filtered.push_back (covered[i]);
+      Grob *head_stem = Rhythmic_head::get_stem (covered[i]);
+      if (head_stem && Stem::is_normal_stem (head_stem)
+          && Note_head::has_interface (covered[i]))
+        {
+          if (Stem::get_beam (head_stem))
+            {
+              /*
+                We must assume that stems are infinitely long in this
+                case, as asking for the length of the stem typically
+                leads to circular dependencies.
+
+                This strategy assumes that we don't want to handle the
+                collision of beams in opposite non-forced directions
+                with this code, where shortening the stems of both
+                would resolve the problem, eg.
+
+                 x    x
+                |    |
+                =====
+
+                =====
+                |   |
+                x   x
+
+                Such beams would need a coordinating grob to resolve
+                the collision, since both will likely want to occupy
+                the centerline.
+              */
+              Direction stemdir = get_grob_direction (head_stem);
+              b[Y_AXIS][stemdir] = stemdir * infinity_f;
+            }
+          else
+            {
+              // TODO - should we include the extent of the stem here?
+            }
+        }
+
+      if (b[Y_AXIS].length () < min_y_size)
+        continue;
+
+      Direction d = LEFT;
+      do
+        {
+          Real x = b[X_AXIS][d] - x_span[LEFT];
+          Real dy = slope * x;
+
+          Direction yd = DOWN;
+          Interval disallowed;
+          do
+            {
+              Real left_y = b[Y_AXIS][yd];
+
+              left_y -= dy;
+
+              // Translate back to beam as ref point.
+              left_y -= me->relative_coordinate (common[Y_AXIS], Y_AXIS);
+
+              disallowed[yd] = left_y;
+            }
+          while (flip (&yd) != DOWN);
+
+          forbidden_intervals.push_back (disallowed);
+        }
+      while (flip (&d) != LEFT);
+    }
+
+  Grob_array *arr
+    = Pointer_group_interface::get_grob_array (me,
+                                               ly_symbol2scm ("covered-grobs"));
+  arr->set_array (filtered);
+
+  vector_sort (forbidden_intervals, Interval::left_less);
+  Real epsilon = 1.0e-10;
+  Interval feasible_beam_placements (beam_left_y, beam_left_y);
+
+  /*
+    forbidden_intervals contains a vector of intervals in which
+    the beam cannot start.  it iterates through these intervals,
+    pushing feasible_beam_placements epsilon over or epsilon under a
+    collision.  when this type of change happens, the loop is marked
+    as "dirty" and re-iterated.
+
+    TODO: figure out a faster ways that this loop can happen via
+    a better search algorithm and/or OOP.
+  */
+
+  bool dirty = false;
+  do
+    {
+      dirty = false;
+      for (vsize i = 0; i < forbidden_intervals.size (); i++)
+        {
+          Direction d = DOWN;
+          do
+            {
+              if (forbidden_intervals[i][d] == d * infinity_f)
+                feasible_beam_placements[d] = d * infinity_f;
+              else if (forbidden_intervals[i].contains (feasible_beam_placements[d]))
+                {
+                  feasible_beam_placements[d] = d * epsilon + forbidden_intervals[i][d];
+                  dirty = true;
+                }
+            }
+          while (flip (&d) != DOWN);
+        }
+    }
+  while (dirty);
+
+  // if the beam placement falls out of the feasible region, we push it
+  // to infinity so that it can never be a feasible candidate below
+  Direction d = DOWN;
+  do
+    {
+      if (!feasible_left_point.contains (feasible_beam_placements[d]))
+        feasible_beam_placements[d] = d * infinity_f;
+    }
+  while (flip (&d) != DOWN);
+
+  if ((feasible_beam_placements[UP] == infinity_f && feasible_beam_placements[DOWN] == -infinity_f) && !feasible_left_point.is_empty ())
+    {
+      // We are somewhat screwed: we have a collision, but at least
+      // there is a way to satisfy stem length constraints.
+      beam_left_y = point_in_interval (feasible_left_point, 2.0);
+    }
+  else if (!feasible_left_point.is_empty ())
+    {
+      // Only one of them offers is feasible solution. Pick that one.
+      if (abs (beam_left_y - feasible_beam_placements[DOWN]) > abs (beam_left_y - feasible_beam_placements[UP]))
+        beam_left_y = feasible_beam_placements[UP];
+      else
+        beam_left_y = feasible_beam_placements[DOWN];
+    }
+  else
+    {
+      // We are completely screwed.
+      me->warning (_ ("no viable initial configuration found: may not find good beam slope"));
+    }
+
+  pos = Drul_array<Real> (beam_left_y, (beam_left_y + beam_dy));
+  scale_drul (&pos, 1 / Staff_symbol_referencer::staff_space (me));
+
+  return ly_interval2scm (pos);
+}
+
 void
 Beam_scoring_problem::generate_quants (vector<Beam_configuration *> *scores) const
 {
-  int region_size = (int) parameters.REGION_SIZE;
+  int region_size = (int) parameters_.REGION_SIZE;
 
   // Knees and collisions are harder, lets try some more possibilities
-  if (is_knee)
+  if (is_knee_)
     region_size += 2;
   if (collisions_.size ())
     region_size += 2;
 
   Real straddle = 0.0;
-  Real sit = (beam_thickness - line_thickness) / 2;
+  Real sit = (beam_thickness_ - line_thickness_) / 2;
   Real inter = 0.5;
-  Real hang = 1.0 - (beam_thickness - line_thickness) / 2;
+  Real hang = 1.0 - (beam_thickness_ - line_thickness_) / 2;
   Real base_quants [] = {straddle, sit, inter, hang};
   int num_base_quants = int (sizeof (base_quants) / sizeof (Real));
 
@@ -367,14 +864,14 @@ Beam_scoring_problem::generate_quants (vector<Beam_configuration *> *scores) con
     for (vsize j = 0; j < unshifted_quants.size (); j++)
       {
         Beam_configuration *c
-          = Beam_configuration::new_config (unquanted_y,
+          = Beam_configuration::new_config (unquanted_y_,
                                             Interval (unshifted_quants[i],
                                                       unshifted_quants[j]));
 
         Direction d = LEFT;
         do
           {
-            if (!quant_range[d].contains (c->y[d]))
+            if (!quant_range_[d].contains (c->y[d]))
               {
                 delete c;
                 c = NULL;
@@ -456,14 +953,14 @@ Beam_scoring_problem::solve () const
   if (configs.empty ())
     {
       programming_error ("No viable beam quanting found.  Using unquanted y value.");
-      return unquanted_y;
+      return unquanted_y_;
     }
 
   Beam_configuration *best = NULL;
 
   bool debug
-    = to_boolean (beam->layout ()->lookup_variable (ly_symbol2scm ("debug-beam-scoring")));
-  SCM inspect_quants = beam->get_property ("inspect-quants");
+    = to_boolean (beam_->layout ()->lookup_variable (ly_symbol2scm ("debug-beam-scoring")));
+  SCM inspect_quants = beam_->get_property ("inspect-quants");
   if (scm_is_pair (inspect_quants))
     {
       debug = true;
@@ -518,7 +1015,7 @@ Beam_scoring_problem::solve () const
         }
 
       string card = best->score_card_ + to_string (" c%d/%d", completed, configs.size ());
-      beam->set_property ("annotation", ly_string2scm (card));
+      beam_->set_property ("annotation", ly_string2scm (card));
     }
 #endif
 
@@ -529,21 +1026,21 @@ Beam_scoring_problem::solve () const
 void
 Beam_scoring_problem::score_stem_lengths (Beam_configuration *config) const
 {
-  Real limit_penalty = parameters.STEM_LENGTH_LIMIT_PENALTY;
+  Real limit_penalty = parameters_.STEM_LENGTH_LIMIT_PENALTY;
   Drul_array<Real> score (0, 0);
   Drul_array<int> count (0, 0);
 
-  for (vsize i = 0; i < stem_xpositions.size (); i++)
+  for (vsize i = 0; i < stem_xpositions_.size (); i++)
     {
-      Real x = stem_xpositions[i];
-      Real dx = x_span.delta ();
+      Real x = stem_xpositions_[i];
+      Real dx = x_span_.delta ();
       Real beam_y = dx
-                    ? config->y[RIGHT] * (x - x_span[LEFT]) / dx + config->y[LEFT] * (x_span[RIGHT] - x) / dx
+                    ? config->y[RIGHT] * (x - x_span_[LEFT]) / dx + config->y[LEFT] * (x_span_[RIGHT] - x) / dx
                     : (config->y[RIGHT] + config->y[LEFT]) / 2;
-      Real current_y = beam_y + base_lengths[i];
-      Real length_pen = parameters.STEM_LENGTH_DEMERIT_FACTOR;
+      Real current_y = beam_y + base_lengths_[i];
+      Real length_pen = parameters_.STEM_LENGTH_DEMERIT_FACTOR;
 
-      Stem_info info = stem_infos[i];
+      Stem_info info = stem_infos_[i];
       Direction d = info.dir_;
 
       score[d] += limit_penalty * max (0.0, (d * (info.shortest_y_ - current_y)));
@@ -554,7 +1051,7 @@ Beam_scoring_problem::score_stem_lengths (Beam_configuration *config) const
       /* We introduce a power, to make the scoring strictly
          convex. Otherwise a symmetric knee beam (up/down/up/down)
          does not have an optimum in the middle. */
-      if (is_knee)
+      if (is_knee_)
         ideal_score = pow (ideal_score, 1.1);
 
       score[d] += length_pen * ideal_score;
@@ -574,7 +1071,7 @@ void
 Beam_scoring_problem::score_slope_direction (Beam_configuration *config) const
 {
   Real dy = config->y.delta ();
-  Real damped_dy = unquanted_y.delta ();
+  Real damped_dy = unquanted_y_.delta ();
   Real dem = 0.0;
   /*
     DAMPING_DIRECTION_PENALTY is a very harsh measure, while for
@@ -587,13 +1084,13 @@ Beam_scoring_problem::score_slope_direction (Beam_configuration *config) const
     {
       if (!dy)
         {
-          if (fabs (damped_dy / x_span.delta ()) > parameters.ROUND_TO_ZERO_SLOPE)
-            dem += parameters.DAMPING_DIRECTION_PENALTY;
+          if (fabs (damped_dy / x_span_.delta ()) > parameters_.ROUND_TO_ZERO_SLOPE)
+            dem += parameters_.DAMPING_DIRECTION_PENALTY;
           else
-            dem += parameters.HINT_DIRECTION_PENALTY;
+            dem += parameters_.HINT_DIRECTION_PENALTY;
         }
       else
-        dem += parameters.DAMPING_DIRECTION_PENALTY;
+        dem += parameters_.DAMPING_DIRECTION_PENALTY;
     }
 
   config->add (dem, "Sd");
@@ -604,8 +1101,8 @@ void
 Beam_scoring_problem::score_slope_musical (Beam_configuration *config) const
 {
   Real dy = config->y.delta ();
-  Real dem = parameters.MUSICAL_DIRECTION_FACTOR
-             * max (0.0, (fabs (dy) - fabs (musical_dy)));
+  Real dem = parameters_.MUSICAL_DIRECTION_FACTOR
+             * max (0.0, (fabs (dy) - fabs (musical_dy_)));
   config->add (dem, "Sm");
 }
 
@@ -614,14 +1111,14 @@ void
 Beam_scoring_problem::score_slope_ideal (Beam_configuration *config) const
 {
   Real dy = config->y.delta ();
-  Real damped_dy = unquanted_y.delta ();
+  Real damped_dy = unquanted_y_.delta ();
   Real dem = 0.0;
 
-  Real slope_penalty = parameters.IDEAL_SLOPE_FACTOR;
+  Real slope_penalty = parameters_.IDEAL_SLOPE_FACTOR;
 
   /* Xstaff beams tend to use extreme slopes to get short stems. We
      put in a penalty here. */
-  if (is_xstaff)
+  if (is_xstaff_)
     slope_penalty *= 10;
 
   /* Huh, why would a too steep beam be better than a too flat one ? */
@@ -644,11 +1141,11 @@ void
 Beam_scoring_problem::score_horizontal_inter_quants (Beam_configuration *config) const
 {
   if (config->y.delta () == 0.0
-      && abs (config->y[LEFT]) < staff_radius * staff_space)
+      && abs (config->y[LEFT]) < staff_radius_ * staff_space_)
     {
-      Real yshift = config->y[LEFT] - 0.5 * staff_space;
-      if (fabs (my_round (yshift) - yshift) < 0.01 * staff_space)
-        config->add (parameters.HORIZONTAL_INTER_QUANT_PENALTY, "H");
+      Real yshift = config->y[LEFT] - 0.5 * staff_space_;
+      if (fabs (my_round (yshift) - yshift) < 0.01 * staff_space_)
+        config->add (parameters_.HORIZONTAL_INTER_QUANT_PENALTY, "H");
     }
 }
 
@@ -662,18 +1159,18 @@ Beam_scoring_problem::score_forbidden_quants (Beam_configuration *config) const
 {
   Real dy = config->y.delta ();
 
-  Real extra_demerit = parameters.SECONDARY_BEAM_DEMERIT
-                       / max (edge_beam_counts[LEFT], edge_beam_counts[RIGHT]);
+  Real extra_demerit = parameters_.SECONDARY_BEAM_DEMERIT
+                       / max (edge_beam_counts_[LEFT], edge_beam_counts_[RIGHT]);
 
   Direction d = LEFT;
   Real dem = 0.0;
-  Real eps = parameters.BEAM_EPS;
+  Real eps = parameters_.BEAM_EPS;
 
   do
     {
-      for (int j = 1; j <= edge_beam_counts[d]; j++)
+      for (int j = 1; j <= edge_beam_counts_[d]; j++)
         {
-          Direction stem_dir = edge_dirs[d];
+          Direction stem_dir = edge_dirs_[d];
 
           /*
             The 2.2 factor is to provide a little leniency for
@@ -681,15 +1178,15 @@ Beam_scoring_problem::score_forbidden_quants (Beam_configuration *config) const
             will be in the gap of the (2, sit) quant, leading to a
             false demerit.
           */
-          Real gap1 = config->y[d] - stem_dir * ((j - 1) * beam_translation + beam_thickness / 2 - line_thickness / 2.2);
-          Real gap2 = config->y[d] - stem_dir * (j * beam_translation - beam_thickness / 2 + line_thickness / 2.2);
+          Real gap1 = config->y[d] - stem_dir * ((j - 1) * beam_translation_ + beam_thickness_ / 2 - line_thickness_ / 2.2);
+          Real gap2 = config->y[d] - stem_dir * (j * beam_translation_ - beam_thickness_ / 2 + line_thickness_ / 2.2);
 
           Interval gap;
           gap.add_point (gap1);
           gap.add_point (gap2);
 
-          for (Real k = -staff_radius;
-               k <= staff_radius + eps; k += 1.0)
+          for (Real k = -staff_radius_;
+               k <= staff_radius_ + eps; k += 1.0)
             if (gap.contains (k))
               {
                 Real dist = min (fabs (gap[UP] - k), fabs (gap[DOWN] - k));
@@ -707,38 +1204,38 @@ Beam_scoring_problem::score_forbidden_quants (Beam_configuration *config) const
     }
   while ((flip (&d)) != LEFT);
 
-  if (max (edge_beam_counts[LEFT], edge_beam_counts[RIGHT]) >= 2)
+  if (max (edge_beam_counts_[LEFT], edge_beam_counts_[RIGHT]) >= 2)
     {
       Real straddle = 0.0;
-      Real sit = (beam_thickness - line_thickness) / 2;
+      Real sit = (beam_thickness_ - line_thickness_) / 2;
       Real inter = 0.5;
-      Real hang = 1.0 - (beam_thickness - line_thickness) / 2;
+      Real hang = 1.0 - (beam_thickness_ - line_thickness_) / 2;
 
       Direction d = LEFT;
       do
         {
-          if (edge_beam_counts[d] >= 2
-              && fabs (config->y[d] - edge_dirs[d] * beam_translation) < staff_radius + inter)
+          if (edge_beam_counts_[d] >= 2
+              && fabs (config->y[d] - edge_dirs_[d] * beam_translation_) < staff_radius_ + inter)
             {
               // TODO up/down symmetry.
-              if (edge_dirs[d] == UP && dy <= eps
+              if (edge_dirs_[d] == UP && dy <= eps
                   && fabs (my_modf (config->y[d]) - sit) < eps)
                 dem += extra_demerit;
 
-              if (edge_dirs[d] == DOWN && dy >= eps
+              if (edge_dirs_[d] == DOWN && dy >= eps
                   && fabs (my_modf (config->y[d]) - hang) < eps)
                 dem += extra_demerit;
             }
 
-          if (edge_beam_counts[d] >= 3
-              && fabs (config->y[d] - 2 * edge_dirs[d] * beam_translation) < staff_radius + inter)
+          if (edge_beam_counts_[d] >= 3
+              && fabs (config->y[d] - 2 * edge_dirs_[d] * beam_translation_) < staff_radius_ + inter)
             {
               // TODO up/down symmetry.
-              if (edge_dirs[d] == UP && dy <= eps
+              if (edge_dirs_[d] == UP && dy <= eps
                   && fabs (my_modf (config->y[d]) - straddle) < eps)
                 dem += extra_demerit;
 
-              if (edge_dirs[d] == DOWN && dy >= eps
+              if (edge_dirs_[d] == DOWN && dy >= eps
                   && fabs (my_modf (config->y[d]) - straddle) < eps)
                 dem += extra_demerit;
             }
@@ -769,11 +1266,11 @@ Beam_scoring_problem::score_collisions (Beam_configuration *config) const
                     beam_y.distance (collision_y[UP]));
 
       Real scale_free
-        = max (parameters.COLLISION_PADDING - dist, 0.0) /
-          parameters.COLLISION_PADDING;
+        = max (parameters_.COLLISION_PADDING - dist, 0.0) /
+          parameters_.COLLISION_PADDING;
       demerits
       += collisions_[i].base_penalty_ *
-         pow (scale_free, 3) * parameters.COLLISION_PENALTY;
+         pow (scale_free, 3) * parameters_.COLLISION_PENALTY;
     }
 
   config->add (demerits, "C");
index 1ecd71a88ff5a87027c7aa987c67292a5954196d..030aa5d531e1f897a88a35c5c45817e269b05971 100644 (file)
@@ -45,7 +45,6 @@
 #include "international.hh"
 #include "interval-set.hh"
 #include "item.hh"
-#include "least-squares.hh"
 #include "lookup.hh"
 #include "main.hh"
 #include "misc.hh"
@@ -884,38 +883,6 @@ Beam::consider_auto_knees (Grob *me)
     }
 }
 
-/* Set stem's shorten property if unset.
-
-TODO:
-take some y-position (chord/beam/nearest?) into account
-scmify forced-fraction
-
-This is done in beam because the shorten has to be uniform over the
-entire beam.
-*/
-
-void
-set_minimum_dy (Grob *me, Real *dy)
-{
-  if (*dy)
-    {
-      /*
-        If dy is smaller than the smallest quant, we
-        get absurd direction-sign penalties.
-      */
-
-      Real ss = Staff_symbol_referencer::staff_space (me);
-      Real beam_thickness = Beam::get_beam_thickness (me) / ss;
-      Real slt = Staff_symbol_referencer::line_thickness (me) / ss;
-      Real sit = (beam_thickness - slt) / 2;
-      Real inter = 0.5;
-      Real hang = 1.0 - (beam_thickness - slt) / 2;
-
-      *dy = sign (*dy) * max (fabs (*dy),
-                              min (min (sit, inter), hang));
-    }
-}
-
 MAKE_SCHEME_CALLBACK (Beam, calc_stem_shorten, 1)
 SCM
 Beam::calc_stem_shorten (SCM smob)
@@ -951,466 +918,6 @@ Beam::calc_stem_shorten (SCM smob)
   return scm_from_double (0.0);
 }
 
-Interval
-Beam::no_visible_stem_positions (Grob *me, Interval default_value)
-{
-  extract_grob_set (me, "stems", stems);
-  if (stems.empty ())
-    return default_value;
-
-  Interval head_positions;
-  Slice multiplicity;
-  for (vsize i = 0; i < stems.size (); i++)
-    {
-      head_positions.unite (Stem::head_positions (stems[i]));
-      multiplicity.unite (Stem::beam_multiplicity (stems[i]));
-    }
-
-  Direction dir = get_grob_direction (me);
-
-  if (!dir)
-    programming_error ("The beam should have a direction by now.");
-
-  Real y = head_positions.linear_combination (dir)
-           * 0.5 * Staff_symbol_referencer::staff_space (me)
-           + dir * get_beam_translation (me) * (multiplicity.length () + 1);
-
-  y /= Staff_symbol_referencer::staff_space (me);
-  return Interval (y, y);
-}
-
-/*
-  Compute a first approximation to the beam slope.
-*/
-MAKE_SCHEME_CALLBACK (Beam, calc_least_squares_positions, 2);
-SCM
-Beam::calc_least_squares_positions (SCM smob, SCM /* posns */)
-{
-  Grob *me = unsmob_grob (smob);
-
-  int count = normal_stem_count (me);
-  Interval pos (0, 0);
-  if (count < 1)
-    return ly_interval2scm (no_visible_stem_positions (me, pos));
-
-  vector<Real> x_posns;
-  extract_grob_set (me, "normal-stems", stems);
-  Grob *commonx = common_refpoint_of_array (stems, me, X_AXIS);
-  Grob *commony = common_refpoint_of_array (stems, me, Y_AXIS);
-
-  Real my_y = me->relative_coordinate (commony, Y_AXIS);
-
-  Grob *fvs = first_normal_stem (me);
-  Grob *lvs = last_normal_stem (me);
-
-  Interval ideal (Stem::get_stem_info (fvs).ideal_y_
-                  + fvs->relative_coordinate (commony, Y_AXIS) - my_y,
-                  Stem::get_stem_info (lvs).ideal_y_
-                  + lvs->relative_coordinate (commony, Y_AXIS) - my_y);
-
-  Real x0 = first_normal_stem (me)->relative_coordinate (commonx, X_AXIS);
-  for (vsize i = 0; i < stems.size (); i++)
-    {
-      Grob *s = stems[i];
-
-      Real x = s->relative_coordinate (commonx, X_AXIS) - x0;
-      x_posns.push_back (x);
-    }
-  Real dx = last_normal_stem (me)->relative_coordinate (commonx, X_AXIS) - x0;
-
-  Real y = 0;
-  Real slope = 0;
-  Real dy = 0;
-  Real ldy = 0.0;
-  if (!ideal.delta ())
-    {
-      Interval chord (Stem::chord_start_y (stems[0]),
-                      Stem::chord_start_y (stems.back ()));
-
-      /* Simple beams (2 stems) on middle line should be allowed to be
-         slightly sloped.
-
-         However, if both stems reach middle line,
-         ideal[LEFT] == ideal[RIGHT] and ideal.delta () == 0.
-
-         For that case, we apply artificial slope */
-      if (!ideal[LEFT] && chord.delta () && count == 2)
-        {
-          /* FIXME. -> UP */
-          Direction d = (Direction) (sign (chord.delta ()) * UP);
-          pos[d] = get_beam_thickness (me) / 2;
-          pos[-d] = -pos[d];
-        }
-      else
-        pos = ideal;
-
-      /*
-        For broken beams this doesn't work well. In this case, the
-        slope esp. of the first part of a broken beam should predict
-        where the second part goes.
-      */
-      ldy = pos[RIGHT] - pos[LEFT];
-    }
-  else
-    {
-      vector<Offset> ideals;
-      for (vsize i = 0; i < stems.size (); i++)
-        {
-          Grob *s = stems[i];
-          ideals.push_back (Offset (x_posns[i],
-                                    Stem::get_stem_info (s).ideal_y_
-                                    + s->relative_coordinate (commony, Y_AXIS)
-                                    - my_y));
-        }
-
-      minimise_least_squares (&slope, &y, ideals);
-
-      dy = slope * dx;
-
-      set_minimum_dy (me, &dy);
-
-      ldy = dy;
-      pos = Interval (y, (y + dy));
-    }
-
-  /*
-    "position" is relative to the staff.
-  */
-  scale_drul (&pos, 1 / Staff_symbol_referencer::staff_space (me));
-
-  me->set_property ("least-squares-dy", scm_from_double (ldy));
-  return ly_interval2scm (pos);
-}
-
-// Assuming V is not empty, pick a 'reasonable' point inside V.
-static Real
-point_in_interval (Interval v, Real dist)
-{
-  if (isinf (v[DOWN]))
-    return v[UP] - dist;
-  else if (isinf (v[UP]))
-    return v[DOWN] + dist;
-  else
-    return v.center ();
-}
-
-/*
-  We can't combine with previous function, since check concave and
-  slope damping comes first.
-
-  TODO: we should use the concaveness to control the amount of damping
-  applied.
-*/
-MAKE_SCHEME_CALLBACK (Beam, shift_region_to_valid, 2);
-SCM
-Beam::shift_region_to_valid (SCM grob, SCM posns)
-{
-  Grob *me = unsmob_grob (grob);
-
-  /*
-    Code dup.
-  */
-  vector<Real> x_posns;
-  extract_grob_set (me, "stems", stems);
-  extract_grob_set (me, "covered-grobs", covered);
-
-  Grob *common[NO_AXES] = { me, me };
-  for (Axis a = X_AXIS; a < NO_AXES; incr (a))
-    {
-      common[a] = common_refpoint_of_array (stems, me, a);
-      common[a] = common_refpoint_of_array (covered, common[a], a);
-    }
-  Grob *fvs = first_normal_stem (me);
-
-  if (!fvs)
-    return posns;
-  Interval x_span;
-  x_span[LEFT] = fvs->relative_coordinate (common[X_AXIS], X_AXIS);
-  for (vsize i = 0; i < stems.size (); i++)
-    {
-      Grob *s = stems[i];
-
-      Real x = s->relative_coordinate (common[X_AXIS], X_AXIS) - x_span[LEFT];
-      x_posns.push_back (x);
-    }
-
-  Grob *lvs = last_normal_stem (me);
-  x_span[RIGHT] = lvs->relative_coordinate (common[X_AXIS], X_AXIS);
-
-  Drul_array<Real> pos = ly_scm2interval (posns);
-
-  scale_drul (&pos, Staff_symbol_referencer::staff_space (me));
-
-  Real beam_dy = pos[RIGHT] - pos[LEFT];
-  Real beam_left_y = pos[LEFT];
-  Real slope = x_span.delta () ? (beam_dy / x_span.delta ()) : 0.0;
-
-  /*
-    Shift the positions so that we have a chance of finding good
-    quants (i.e. no short stem failures.)
-  */
-  Interval feasible_left_point;
-  feasible_left_point.set_full ();
-
-  for (vsize i = 0; i < stems.size (); i++)
-    {
-      Grob *s = stems[i];
-      if (Stem::is_invisible (s))
-        continue;
-
-      Direction d = get_grob_direction (s);
-      Real left_y
-        = Stem::get_stem_info (s).shortest_y_
-          - slope * x_posns [i];
-
-      /*
-        left_y is now relative to the stem S. We want relative to
-        ourselves, so translate:
-      */
-      left_y
-      += + s->relative_coordinate (common[Y_AXIS], Y_AXIS)
-         - me->relative_coordinate (common[Y_AXIS], Y_AXIS);
-
-      Interval flp;
-      flp.set_full ();
-      flp[-d] = left_y;
-
-      feasible_left_point.intersect (flp);
-    }
-
-  vector<Grob *> filtered;
-  /*
-    We only update these for objects that are too large for quanting
-    to find a workaround.  Typically, these are notes with
-    stems, and timesig/keysig/clef, which take out the entire area
-    inside the staff as feasible.
-
-    The code below disregards the thickness and multiplicity of the
-    beam.  This should not be a problem, as the beam quanting will
-    take care of computing the impact those exactly.
-  */
-  Real min_y_size = 2.0;
-
-  // A list of intervals into which beams may not fall
-  vector<Interval> forbidden_intervals;
-
-  for (vsize i = 0; i < covered.size (); i++)
-    {
-      if (!covered[i]->is_live ())
-        continue;
-
-      if (Beam::has_interface (covered[i]) && is_cross_staff (covered[i]))
-        continue;
-
-      Box b;
-      for (Axis a = X_AXIS; a < NO_AXES; incr (a))
-        b[a] = covered[i]->extent (common[a], a);
-
-      if (b[X_AXIS].is_empty () || b[Y_AXIS].is_empty ())
-        continue;
-
-      if (intersection (b[X_AXIS], x_span).is_empty ())
-        continue;
-
-      filtered.push_back (covered[i]);
-      Grob *head_stem = Rhythmic_head::get_stem (covered[i]);
-      if (head_stem && Stem::is_normal_stem (head_stem)
-          && Note_head::has_interface (covered[i]))
-        {
-          if (Stem::get_beam (head_stem))
-            {
-              /*
-                We must assume that stems are infinitely long in this
-                case, as asking for the length of the stem typically
-                leads to circular dependencies.
-
-                This strategy assumes that we don't want to handle the
-                collision of beams in opposite non-forced directions
-                with this code, where shortening the stems of both
-                would resolve the problem, eg.
-
-                 x    x
-                |    |
-                =====
-
-                =====
-                |   |
-                x   x
-
-                Such beams would need a coordinating grob to resolve
-                the collision, since both will likely want to occupy
-                the centerline.
-              */
-              Direction stemdir = get_grob_direction (head_stem);
-              b[Y_AXIS][stemdir] = stemdir * infinity_f;
-            }
-          else
-            {
-              // TODO - should we include the extent of the stem here?
-            }
-        }
-
-      if (b[Y_AXIS].length () < min_y_size)
-        continue;
-
-      Direction d = LEFT;
-      do
-        {
-          Real x = b[X_AXIS][d] - x_span[LEFT];
-          Real dy = slope * x;
-
-          Direction yd = DOWN;
-          Interval disallowed;
-          do
-            {
-              Real left_y = b[Y_AXIS][yd];
-
-              left_y -= dy;
-
-              // Translate back to beam as ref point.
-              left_y -= me->relative_coordinate (common[Y_AXIS], Y_AXIS);
-
-              disallowed[yd] = left_y;
-            }
-          while (flip (&yd) != DOWN);
-
-          forbidden_intervals.push_back (disallowed);
-        }
-      while (flip (&d) != LEFT);
-    }
-
-  Grob_array *arr
-    = Pointer_group_interface::get_grob_array (me,
-                                               ly_symbol2scm ("covered-grobs"));
-  arr->set_array (filtered);
-
-  vector_sort (forbidden_intervals, Interval::left_less);
-  Real epsilon = 1.0e-10;
-  Interval feasible_beam_placements (beam_left_y, beam_left_y);
-
-  /*
-    forbidden_intervals contains a vector of intervals in which
-    the beam cannot start.  it iterates through these intervals,
-    pushing feasible_beam_placements epsilon over or epsilon under a
-    collision.  when this type of change happens, the loop is marked
-    as "dirty" and re-iterated.
-
-    TODO: figure out a faster ways that this loop can happen via
-    a better search algorithm and/or OOP.
-  */
-
-  bool dirty = false;
-  do
-    {
-      dirty = false;
-      for (vsize i = 0; i < forbidden_intervals.size (); i++)
-        {
-          Direction d = DOWN;
-          do
-            {
-              if (forbidden_intervals[i][d] == d * infinity_f)
-                feasible_beam_placements[d] = d * infinity_f;
-              else if (forbidden_intervals[i].contains (feasible_beam_placements[d]))
-                {
-                  feasible_beam_placements[d] = d * epsilon + forbidden_intervals[i][d];
-                  dirty = true;
-                }
-            }
-          while (flip (&d) != DOWN);
-        }
-    }
-  while (dirty);
-
-  // if the beam placement falls out of the feasible region, we push it
-  // to infinity so that it can never be a feasible candidate below
-  Direction d = DOWN;
-  do
-    {
-      if (!feasible_left_point.contains (feasible_beam_placements[d]))
-        feasible_beam_placements[d] = d * infinity_f;
-    }
-  while (flip (&d) != DOWN);
-
-  if ((feasible_beam_placements[UP] == infinity_f && feasible_beam_placements[DOWN] == -infinity_f) && !feasible_left_point.is_empty ())
-    {
-      // We are somewhat screwed: we have a collision, but at least
-      // there is a way to satisfy stem length constraints.
-      beam_left_y = point_in_interval (feasible_left_point, 2.0);
-    }
-  else if (!feasible_left_point.is_empty ())
-    {
-      // Only one of them offers is feasible solution. Pick that one.
-      if (abs (beam_left_y - feasible_beam_placements[DOWN]) > abs (beam_left_y - feasible_beam_placements[UP]))
-        beam_left_y = feasible_beam_placements[UP];
-      else
-        beam_left_y = feasible_beam_placements[DOWN];
-    }
-  else
-    {
-      // We are completely screwed.
-      me->warning (_ ("no viable initial configuration found: may not find good beam slope"));
-    }
-
-  pos = Drul_array<Real> (beam_left_y, (beam_left_y + beam_dy));
-  scale_drul (&pos, 1 / Staff_symbol_referencer::staff_space (me));
-
-  return ly_interval2scm (pos);
-}
-
-/* This neat trick is by Werner Lemberg,
-   damped = tanh (slope)
-   corresponds with some tables in [Wanske] CHECKME */
-MAKE_SCHEME_CALLBACK (Beam, slope_damping, 2);
-SCM
-Beam::slope_damping (SCM smob, SCM posns)
-{
-  Grob *me = unsmob_grob (smob);
-  Drul_array<Real> pos = ly_scm2interval (posns);
-
-  if (normal_stem_count (me) <= 1)
-    return posns;
-
-  SCM s = me->get_property ("damping");
-  Real damping = scm_to_double (s);
-  Real concaveness = robust_scm2double (me->get_property ("concaveness"), 0.0);
-  if (concaveness >= 10000)
-    {
-      pos[LEFT] = pos[RIGHT];
-      me->set_property ("least-squares-dy", scm_from_double (0));
-      damping = 0;
-    }
-
-  if (damping)
-    {
-      scale_drul (&pos, Staff_symbol_referencer::staff_space (me));
-
-      Real dy = pos[RIGHT] - pos[LEFT];
-
-      Grob *fvs = first_normal_stem (me);
-      Grob *lvs = last_normal_stem (me);
-
-      Grob *commonx = fvs->common_refpoint (lvs, X_AXIS);
-
-      Real dx = last_normal_stem (me)->relative_coordinate (commonx, X_AXIS)
-                - first_normal_stem (me)->relative_coordinate (commonx, X_AXIS);
-
-      Real slope = dy && dx ? dy / dx : 0;
-
-      slope = 0.6 * tanh (slope) / (damping + concaveness);
-
-      Real damped_dy = slope * dx;
-
-      set_minimum_dy (me, &damped_dy);
-
-      pos[LEFT] += (dy - damped_dy) / 2;
-      pos[RIGHT] -= (dy - damped_dy) / 2;
-
-      scale_drul (&pos, 1 / Staff_symbol_referencer::staff_space (me));
-    }
-
-  return ly_interval2scm (pos);
-}
-
 MAKE_SCHEME_CALLBACK (Beam, quanting, 2);
 SCM
 Beam::quanting (SCM smob, SCM posns)
index 38c40f3ffc00e2c4df2827408ef94c2d65aca4fd..a68c03907d047eaa49db73aa8f051e8ea22b586e 100644 (file)
@@ -214,65 +214,52 @@ Bezier::solve_point (Axis ax, Real coordinate) const
 }
 
 /**
-   Assuming AX is X_AXIS, and D is UP, finds the
-   maximum value of curve_coordinate(t, Y_AXIS) subject to
-   l <= curve_coordinate(t, X_AXIS) <= r.
+   For the portion of the curve between L and R along axis AX,
+   return the bounding box limit in direction D along the cross axis to AX.
+   If there is no portion between L and R, return 0.0 and report error.
 */
 Real
 Bezier::minmax (Axis ax, Real l, Real r, Direction d) const
 {
-  Axis other = other_axis (ax);
-  Interval lr (l, r);
-  vector<Real> solutions;
-
-  // Possible solutions are:
-  // t = 0 or 1, or...
-  solutions.push_back (0);
-  solutions.push_back (1);
+  Axis bx = other_axis (ax);
+
+  // The curve could hit its bounding box limit along BX at:
+  //  points where the curve is parallel to AX,
+  Offset vec (0.0, 0.0);
+  vec[ax] = 1.0;
+  vector<Real> sols (solve_derivative (vec));
+  //  or endpoints of the curve,
+  sols.push_back (0.999);
+  sols.push_back (0.001);
+  // (using points just inside the ends, so that an endpoint is evaulated
+  //  if it falls within rounding error of L or R and the curve lies inside)
 
-  // t is a critical point for the other-axis polynomial, or...
-  Polynomial p_prime (polynomial (other));
-  p_prime.differentiate ();
-  vector<Real> criticals = p_prime.solve ();
-  solutions.insert (solutions.end (), criticals.begin (), criticals.end ());
+  Interval iv;
+  for (vsize i = sols.size (); i--;)
+    {
+      Offset p (curve_point (sols[i]));
+      if (p[ax] >= l && p[ax] <= r)
+        iv.add_point (p[bx]);
+    }
 
-  // t solves curve_coordinate(t, X_AXIS) = l or r.
+  //  or intersections of the curve with the bounding lines at L and R.
+  Interval lr (l, r);
   Direction dir = LEFT;
   do
     {
-      Polynomial p (polynomial (ax));
-      p.coefs_[0] -= lr[dir];
-
-      vector<Real> sol = p.solve ();
-      solutions.insert (solutions.end (), sol.begin (), sol.end ());
+      vector<Real> v = get_other_coordinates (ax, lr[dir]);
+      for (vsize i = v.size (); i--;)
+        iv.add_point (v[i]);
     }
   while (flip (&dir) != LEFT);
 
-  Polynomial p (polynomial (ax));
-  Polynomial other_p (polynomial (other));
-  vector<Real> values;
-  for (vsize i = solutions.size (); i--;)
-    {
-      Real t = solutions[i];
-      if (t >= 0 && t <= 1
-          // FIXME: floating point comparison for equality
-          // Two of the t in solutions were found by solving
-          // p(t) = l, bzw. r, and we want this test to pass for these t,
-          // but it can easily fail if floating point internal precision
-          // differs from storage precision.
-          // Better to store separately the two t for which p(t) = l and r
-          && p.eval (t) >= l && p.eval (t) <= r)
-        values.push_back (other_p.eval (t));
-    }
-
-  if (values.empty ())
+  if (iv.is_empty ())
     {
-      programming_error ("no solution found for Bezier intersection");
+      programming_error ("Bezier curve does not cross region of concern");
       return 0.0;
     }
 
-  vector_sort (values, less<Real> ());
-  return (d == DOWN) ? values[0] : values.back ();
+  return iv.at (d);
 }
 
 /**
index 3977a77c30a2166efe89f91e6cc92c8759cc5624..be6cc166de354e1dead268333ebc9a133882831a 100644 (file)
@@ -110,7 +110,7 @@ Dynamic_performer::process_music ()
 
   if (span_events_[START])
     {
-      span_dynamic_ = new Audio_span_dynamic ();
+      span_dynamic_ = new Audio_span_dynamic (equalize_volume (0.1), equalize_volume (1.0));
       announce_element (Audio_element_info (span_dynamic_, span_events_[START]));
 
       span_dynamic_->grow_dir_ = grow_dir_[START];
index 0248c8fe789ff326f7a474869099bdb45be721c5..bb57bf1fcdccc5405842500eb10d478694b1bf61 100644 (file)
@@ -45,8 +45,8 @@ protected:
 private:
   vector<Spanner *> lines_;
   vector<Spanner *> kill_me_;
-  bool start_glissandi;
-  bool stop_glissandi;
+  bool start_glissandi_;
+  bool stop_glissandi_;
 
   Stream_event *event_;
   vector<vsize> note_column_1;
@@ -56,8 +56,8 @@ private:
 Glissando_engraver::Glissando_engraver ()
 {
   event_ = 0;
-  start_glissandi = false;
-  stop_glissandi = false;
+  start_glissandi_ = false;
+  stop_glissandi_ = false;
 }
 
 IMPLEMENT_TRANSLATOR_LISTENER (Glissando_engraver, glissando);
@@ -71,14 +71,17 @@ void
 Glissando_engraver::process_music ()
 {
   if (event_)
-    start_glissandi = true;
+    start_glissandi_ = true;
 }
 
 void
 Glissando_engraver::acknowledge_note_column (Grob_info info)
 {
   Grob *g = info.grob ();
-  if (stop_glissandi)
+  if (to_boolean (g->get_property ("glissando-skip")))
+    return;
+
+  if (stop_glissandi_)
     {
       extract_grob_set (g, "note-heads", note_heads);
       int glissando_index = 0;
@@ -100,10 +103,10 @@ Glissando_engraver::acknowledge_note_column (Grob_info info)
       lines_.clear ();
       note_column_1.clear ();
       note_column_2.clear ();
-      stop_glissandi = false;
+      stop_glissandi_ = false;
     }
 
-  if (start_glissandi)
+  if (start_glissandi_)
     {
       extract_grob_set (g, "note-heads", note_heads);
       SCM map = get_property ("glissandoMap");
@@ -137,13 +140,12 @@ Glissando_engraver::acknowledge_note_column (Grob_info info)
 void
 Glissando_engraver::stop_translation_timestep ()
 {
-
-  if (start_glissandi)
+  if (start_glissandi_)
     {
-      if (stop_glissandi)
+      if (stop_glissandi_)
         programming_error ("overwriting glissando");
-      stop_glissandi = true;
-      start_glissandi = false;
+      stop_glissandi_ = true;
+      start_glissandi_ = false;
     }
   event_ = 0;
 }
index dc4bb6efbd3c1073426567205c4401cb9d540718..ee0e2e9447beb4a7dcf58367f80983342f614a7d 100644 (file)
@@ -54,10 +54,12 @@ class Audio_span_dynamic : public Audio_element
 public:
   Direction grow_dir_;
   vector<Audio_dynamic *> dynamics_;
+  Real min_volume_;
+  Real max_volume_;
 
   virtual void render ();
   void add_absolute (Audio_dynamic *);
-  Audio_span_dynamic ();
+  Audio_span_dynamic (Real min_volume, Real max_volume);
 };
 
 class Audio_key : public Audio_item
index 1ba4fcb7cc5a76fb1bdfbb0a9015b9a3c3f0a65d..1603a6244470e1956905a860c87a88de9d2b1588 100644 (file)
@@ -121,18 +121,18 @@ public:
   Drul_array<Real> solve () const;
 
 private:
-  Grob *beam;
+  Grob *beam_;
 
-  Interval unquanted_y;
+  Interval unquanted_y_;
 
-  Real staff_space;
-  Real beam_thickness;
-  Real line_thickness;
-  Real musical_dy;
+  Real staff_space_;
+  Real beam_thickness_;
+  Real line_thickness_;
+  Real musical_dy_;
 
-  Interval x_span;
+  Interval x_span_;
 
-  vector<Stem_info> stem_infos;
+  vector<Stem_info> stem_infos_;
 
   /*
     Do stem computations.  These depend on YL and YR linearly, so we can
@@ -142,25 +142,25 @@ private:
     affine linear in YL and YR. If YL == YR == 0, then we might have
     stem_y != 0.0, when we're cross staff.
   */
-  vector<Real> base_lengths;
-  vector<Real> stem_xpositions;
+  vector<Real> base_lengths_;
+  vector<Real> stem_xpositions_;
 
-  Grob *common[2];
-  bool is_xstaff;
-  bool is_knee;
+  Grob *common_[2];
+  bool is_xstaff_;
+  bool is_knee_;
 
-  Beam_quant_parameters parameters;
+  Beam_quant_parameters parameters_;
 
-  Real staff_radius;
-  Drul_array<int> edge_beam_counts;
-  Drul_array<Direction> edge_dirs;
+  Real staff_radius_;
+  Drul_array<int> edge_beam_counts_;
+  Drul_array<Direction> edge_dirs_;
 
   // Half-open intervals, representing allowed positions for the beam,
   // starting from close to the notehead to the direction of the stem
   // end.  This is used for quickly weeding out invalid
   // Beam_configurations.
-  Drul_array<Interval> quant_range;
-  Real beam_translation;
+  Drul_array<Interval> quant_range_;
+  Real beam_translation_;
   vector<Beam_collision> collisions_;
   vector<Beam_segment> segments_;
 
index f4b5ced9e300a8c00a1d2014e25afc4827c51cbf..0164f785f6f312788a1d7acad78d59240a4a1647 100644 (file)
@@ -41,6 +41,8 @@ public:
   bool is_empty () const;
   void print () const;
   void print_points () const;
+
+  DECLARE_SCHEME_CALLBACK (skyline, (SCM, SCM));
 };
 
 #endif /* SKYLINE_PAIR_HH */
index 2eccdb2ef4363a14389935a19b2da5b3a0977d81..638fd6d3f3b4c688634491a7d9ceee60e8c4b0a6 100644 (file)
@@ -76,11 +76,22 @@ public:
   void raise (Real);
   void shift (Real);
   Real distance (Skyline const &, Real horizon_padding = 0) const;
+  Real touching_point (Skyline const &, Real horizon_padding = 0) const;
   Real height (Real airplane) const;
   Real max_height () const;
+  Real max_height_position () const;
   void set_minimum_height (Real height);
   void clear ();
   bool is_empty () const;
+
+  DECLARE_SCHEME_CALLBACK (get_touching_point, (SCM, SCM, SCM));
+  DECLARE_SCHEME_CALLBACK (get_distance, (SCM, SCM, SCM));
+  DECLARE_SCHEME_CALLBACK (get_max_height, (SCM));
+  DECLARE_SCHEME_CALLBACK (get_max_height_position, (SCM));
+  DECLARE_SCHEME_CALLBACK (get_height, (SCM, SCM));
+
+protected:
+  Real internal_distance (Skyline const &, Real horizon_padding, Real *touch_point) const;
 };
 
 extern bool debug_skylines;
index cae53a4d8e70cd3742794a784af68860e07df073..866de050f4b63e363045d7f79098afb5f186eb4d 100644 (file)
@@ -28,7 +28,6 @@ struct Slur_score_parameters
 
   Real head_encompass_penalty_;
   Real stem_encompass_penalty_;
-  Real closeness_factor_;
   Real edge_attraction_factor_;
   Real same_slope_penalty_;
   Real steeper_slope_factor_;
index ee44d2afe6c27aff650795e09284fe3d0deba146..4a3c3c1b48d0700f1864e5d9cc8bb92472cab38c 100644 (file)
@@ -61,6 +61,9 @@ public:
   DECLARE_SCHEME_CALLBACK (calc_pure_relevant_grobs, (SCM));
   DECLARE_SCHEME_CALLBACK (height, (SCM));
   DECLARE_SCHEME_CALLBACK (calc_pure_height, (SCM, SCM, SCM));
+  DECLARE_SCHEME_CALLBACK (get_staves, (SCM));
+  DECLARE_SCHEME_CALLBACK (get_spaceable_staves, (SCM));
+  DECLARE_SCHEME_CALLBACK (get_nonspaceable_staves, (SCM));
 
   System (SCM);
   System (System const &);
diff --git a/lily/page-layout-problem-scheme.cc b/lily/page-layout-problem-scheme.cc
new file mode 100644 (file)
index 0000000..e4c62d3
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+  This file is part of LilyPond, the GNU music typesetter.
+
+  Copyright (C) 2011 Joe Neeman <joeneeman@gmail.com>
+
+  LilyPond is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  LilyPond is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "lily-guile.hh"
+#include "grob.hh"
+#include "page-layout-problem.hh"
+
+LY_DEFINE (ly_get_spacing_spec, "ly:get-spacing-spec", 2, 0, 0,
+          (SCM from_scm, SCM to_scm),
+          "Return the spacing spec going between the two given grobs,"
+           " @var{from_scm} and @var{to_scm}.")
+{
+  LY_ASSERT_SMOB (Grob, from_scm, 1);
+  LY_ASSERT_SMOB (Grob, to_scm, 2);
+
+  Grob *from = unsmob_grob (from_scm);
+  Grob *to = unsmob_grob (to_scm);
+
+  return Page_layout_problem::get_spacing_spec (from, to, false, 0, 0);
+}
index 4583d221f646ef9bcdc801dd46c4674366795fb3..9ab0495ae14ce909838c5498e5421d28590fd5bf 100644 (file)
@@ -65,6 +65,11 @@ private:
   Moment start_moment_;
 
   SCM split_list_;
+  SCM direction_;
+  SCM directionOne_;
+  SCM directionTwo_;
+  SCM horizontalShiftOne_;
+  SCM horizontalShiftTwo_;
 
   Stream_event *unisono_event_;
   Stream_event *solo_one_event_;
@@ -133,6 +138,11 @@ Part_combine_iterator::Part_combine_iterator ()
   first_iter_ = 0;
   second_iter_ = 0;
   split_list_ = SCM_EOL;
+  direction_ = SCM_BOOL_F;
+  directionOne_ = scm_from_int (1);
+  directionTwo_ = scm_from_int (-1);
+  horizontalShiftOne_ = scm_from_int (0);
+  horizontalShiftTwo_ = scm_from_int (1);
   state_ = APART;
   playing_state_ = APART;
   last_playing_ = APART;
@@ -349,6 +359,17 @@ Part_combine_iterator::construct_children ()
 {
   start_moment_ = get_outlet ()->now_mom ();
   split_list_ = get_music ()->get_property ("split-list");
+  direction_ = get_music ()->get_property ("direction");
+  if (is_direction (direction_))
+    {
+      directionOne_ = direction_;
+      directionTwo_ = direction_;
+      if (scm_is_true (scm_negative_p (direction_)))
+        {
+          horizontalShiftOne_ = scm_from_int (1);
+          horizontalShiftTwo_ = scm_from_int (0);
+        }
+    }
 
   Context *c = get_outlet ();
 
@@ -369,6 +390,8 @@ Part_combine_iterator::construct_children ()
   Context *two = handles_[CONTEXT_TWO].get_context ();
   set_context (two);
   second_iter_ = unsmob_iterator (get_iterator (unsmob_music (scm_cadr (lst))));
+  Context *shared = handles_[CONTEXT_SHARED].get_context ();
+  set_context (shared);
 
   /* Mimic all settings of voiceOne/voiceTwo for the two separate voices...*/
   /* FIXME: Is there any way to use the definition of \voiceOne/\voiceTwo
@@ -391,16 +414,20 @@ Part_combine_iterator::construct_children ()
     {
       SCM sym = ly_symbol2scm (*p);
       execute_pushpop_property (one, sym,
-                                ly_symbol2scm ("direction"), scm_from_int (1));
+                                ly_symbol2scm ("direction"), directionOne_);
 
       execute_pushpop_property (two, sym,
-                                ly_symbol2scm ("direction"), scm_from_int (-1));
+                                ly_symbol2scm ("direction"), directionTwo_);
+
+      if (scm_is_number (direction_))
+        execute_pushpop_property (shared, sym,
+                                 ly_symbol2scm ("direction"), direction_);
     }
   /* Handle horizontal shifts for crossing notes */
   execute_pushpop_property (one, ly_symbol2scm ("NoteColumn"),
-                            ly_symbol2scm ("horizontal-shift"), scm_from_int (0));
+                            ly_symbol2scm ("horizontal-shift"), horizontalShiftOne_);
   execute_pushpop_property (two, ly_symbol2scm ("NoteColumn"),
-                            ly_symbol2scm ("horizontal-shift"), scm_from_int (1));
+                            ly_symbol2scm ("horizontal-shift"), horizontalShiftTwo_);
   /* Also handle MultiMeasureRest positions for voice 1/2 */
   execute_pushpop_property (one, ly_symbol2scm ("MultiMeasureRest"),
                             ly_symbol2scm ("staff-position"), scm_from_int (4));
index 8d5e724a7b0e2aa8ee89924670c5541cbe7e686c..d0c85aab9e7b0483566e3ae601c170349ea7c8c0 100644 (file)
@@ -54,4 +54,6 @@ ADD_INTERFACE (Pure_from_neighbor_interface,
 
                /* properties */
                "elements-filtered "
+               "pure-relevant-grobs "
+               "pure-Y-common "
               );
index 77993275ff4c6a045af09b6af9b98d73d8b24ed8..24029e3ada42334e83eaf5439c5a765dd0aefd8b 100644 (file)
@@ -65,5 +65,6 @@ ADD_INTERFACE (Rhythmic_head,
                /* properties */
                "dot "
                "duration-log "
+               "glissando-skip "
                "stem "
               );
index 2a3b26ff9e81a0512268b639c2a236d547fdcf70..65510ba47bc5abae683c9200c77baa1bb4f4db1f 100644 (file)
@@ -20,6 +20,7 @@
 
 #include "skyline-pair.hh"
 
+#include "international.hh"
 #include "ly-smobs.icc"
 
 Skyline_pair::Skyline_pair ()
@@ -117,3 +118,19 @@ Skyline_pair::print_smob (SCM s, SCM port, scm_print_state *)
   scm_puts ("#<Skyline-pair>", port);
   return 1;
 }
+
+MAKE_SCHEME_CALLBACK (Skyline_pair, skyline, 2);
+SCM
+Skyline_pair::skyline (SCM smob, SCM dir_scm)
+{
+  Skyline_pair *sp = Skyline_pair::unsmob (smob);
+  Direction dir = robust_scm2dir (dir_scm, UP);
+
+  if (dir == CENTER)
+    {
+      warning (_f ("direction must not be CENTER in ly:skyline-pair::skyline"));
+      dir = UP;
+    }
+
+  return (*sp)[dir].smobbed_copy ();
+}
index 8f62710b0947fa8e48ffcbc7e181cba4709c96de..d65e48b573e7eeb4a2be65bc23c946e168ca6ec3 100644 (file)
@@ -509,6 +509,21 @@ Skyline::shift (Real s)
 
 Real
 Skyline::distance (Skyline const &other, Real horizon_padding) const
+{
+  Real dummy;
+  return internal_distance (other, horizon_padding, &dummy);
+}
+
+Real
+Skyline::touching_point (Skyline const &other, Real horizon_padding) const
+{
+  Real touch;
+  internal_distance (other, horizon_padding, &touch);
+  return touch;
+}
+
+Real
+Skyline::internal_distance (Skyline const &other, Real horizon_padding, Real *touch_point) const
 {
   assert (sky_ == -other.sky_);
 
@@ -534,12 +549,19 @@ Skyline::distance (Skyline const &other, Real horizon_padding) const
 
   Real dist = -infinity_f;
   Real start = -infinity_f;
+  Real touch = -infinity_f;
   while (i != padded_this->buildings_.end () && j != padded_other->buildings_.end ())
     {
       Real end = min (i->end_, j->end_);
       Real start_dist = i->height (start) + j->height (start);
       Real end_dist = i->height (end) + j->height (end);
       dist = max (dist, max (start_dist, end_dist));
+
+      if (end_dist == dist)
+       touch = end;
+      else if (start_dist == dist)
+       touch = start;
+
       if (i->end_ <= j->end_)
         i++;
       else
@@ -553,6 +575,7 @@ Skyline::distance (Skyline const &other, Real horizon_padding) const
       delete padded_other;
     }
 
+  *touch_point = touch;
   return dist;
 }
 
@@ -580,6 +603,14 @@ Skyline::max_height () const
   return sky_ * distance (s);
 }
 
+Real
+Skyline::max_height_position () const
+{
+  Skyline s (-sky_);
+  s.set_minimum_height (0);
+  return touching_point (s);
+}
+
 void
 Skyline::set_minimum_height (Real h)
 {
@@ -646,3 +677,61 @@ Skyline::print_smob (SCM s, SCM port, scm_print_state *)
 
   return 1;
 }
+
+MAKE_SCHEME_CALLBACK_WITH_OPTARGS (Skyline, get_touching_point, 3, 1, "")
+SCM
+Skyline::get_touching_point (SCM skyline_scm, SCM other_skyline_scm, SCM horizon_padding_scm)
+{
+  LY_ASSERT_SMOB (Skyline, other_skyline_scm, 1);
+
+  Real horizon_padding = 0;
+  if (horizon_padding_scm != SCM_UNDEFINED)
+    {
+      LY_ASSERT_TYPE (scm_is_number, horizon_padding_scm, 3);
+      horizon_padding = scm_to_double (horizon_padding_scm);
+    }
+
+  Skyline *skyline = Skyline::unsmob (skyline_scm);
+  Skyline *other_skyline = Skyline::unsmob (other_skyline_scm);
+  return scm_from_double (skyline->touching_point (*other_skyline, horizon_padding));
+}
+
+MAKE_SCHEME_CALLBACK_WITH_OPTARGS (Skyline, get_distance, 3, 1, "")
+SCM
+Skyline::get_distance (SCM skyline_scm, SCM other_skyline_scm, SCM horizon_padding_scm)
+{
+  LY_ASSERT_SMOB (Skyline, other_skyline_scm, 1);
+
+  Real horizon_padding = 0;
+  if (horizon_padding_scm != SCM_UNDEFINED)
+    {
+      LY_ASSERT_TYPE (scm_is_number, horizon_padding_scm, 3);
+      horizon_padding = scm_to_double (horizon_padding_scm);
+    }
+
+  Skyline *skyline = Skyline::unsmob (skyline_scm);
+  Skyline *other_skyline = Skyline::unsmob (other_skyline_scm);
+  return scm_from_double (skyline->distance (*other_skyline, horizon_padding));
+}
+
+MAKE_SCHEME_CALLBACK (Skyline, get_max_height, 1)
+SCM
+Skyline::get_max_height (SCM skyline_scm)
+{
+  return scm_from_double (Skyline::unsmob (skyline_scm)->max_height ());
+}
+
+MAKE_SCHEME_CALLBACK (Skyline, get_max_height_position, 1)
+SCM
+Skyline::get_max_height_position (SCM skyline_scm)
+{
+  return scm_from_double (Skyline::unsmob (skyline_scm)->max_height_position ());
+}
+
+MAKE_SCHEME_CALLBACK (Skyline, get_height, 2)
+SCM
+Skyline::get_height (SCM skyline_scm, SCM x_scm)
+{
+  Real x = robust_scm2double (x_scm, 0.0);
+  return scm_from_double (Skyline::unsmob (skyline_scm)->height (x));
+}
index 99577018129afd9dc8187864675e252e50fb6fcb..b9eaf918862a590f899b68d5a1be946df3a981d1 100644 (file)
@@ -277,18 +277,6 @@ Slur_configuration::score_encompass (Slur_score_state const &state)
 
           demerit += stem_dem;
         }
-      else if (!edge)
-        {
-          Interval ext;
-          ext.add_point (state.encompass_infos_[j].stem_);
-          ext.add_point (state.encompass_infos_[j].head_);
-
-          // ?
-          demerit += -state.parameters_.closeness_factor_
-                     * min (state.dir_
-                            * (y - (ext[state.dir_] + state.dir_ * state.parameters_.free_head_distance_)), 0.0)
-                     / state.encompass_infos_.size ();
-        }
     }
   add_score (demerit, "encompass");
 
index 886799d9818dfd495044008710a901928b9fb942..fe0a7828e2a44fc68e8d86d7d3924ff9f4367162 100644 (file)
@@ -42,8 +42,6 @@ Slur_score_parameters::fill (Grob *me)
     = get_detail (details, ly_symbol2scm ("head-encompass-penalty"));
   stem_encompass_penalty_
     = get_detail (details, ly_symbol2scm ("stem-encompass-penalty"));
-  closeness_factor_
-    = get_detail (details, ly_symbol2scm ("closeness-factor"));
   edge_attraction_factor_
     = get_detail (details, ly_symbol2scm ("edge-attraction-factor"));
   same_slope_penalty_
index 7276df0e0107287968113fdf4f20a33193cfcda9..1f41607307f20ec403fa0ba084369294d561aeed 100644 (file)
@@ -439,8 +439,6 @@ ADD_INTERFACE (Slur,
                "Demerit to apply when note heads collide with a slur.\n"
                "@item stem-encompass-penalty\n"
                "Demerit to apply when stems collide with a slur.\n"
-               "@item closeness-factor\n"
-               "Additional demerit used when scoring encompasses.\n"
                "@item edge-attraction-factor\n"
                "Factor used to calculate the demerit for distances"
                " between slur endpoints and their corresponding base"
@@ -496,7 +494,7 @@ ADD_INTERFACE (Slur,
 
                /* properties */
                "annotation "
-               "avoid-slur "    /* UGH. */
+               "avoid-slur "  /* UGH. */
                "control-points "
                "dash-definition "
                "details "
index 5ebe256346c6cbc4ad98a20a533c765a7a48282b..4addffcac66b218f8c1efd91feb9e16d0a7252dd 100644 (file)
@@ -86,10 +86,6 @@ Span_bar_engraver::stop_translation_timestep ()
 {
   if (spanbar_)
     {
-      vector_sort (bars_, Grob::vertical_less);
-      for (vsize i = 0; i < bars_.size (); i++)
-        Span_bar::add_bar (spanbar_, bars_[i]);
-
       SCM vissym = ly_symbol2scm ("break-visibility");
       SCM vis = bars_[0]->internal_get_property (vissym);
       if (ly_is_equal (spanbar_->internal_get_property (vissym), vis))
index 4cc9971d5da80fc3550f077a53cdad6014da9182..0a46aa69798e1a0b5a1b80161aa774997f7ea4ee 100644 (file)
@@ -88,8 +88,6 @@ Span_bar::print (SCM smobbed_me)
   if (!model_bar)
     model_bar = me;
 
-  vector_sort (extents, Interval::left_less);
-
   Stencil span_bar;
   for (vsize i = 1; i < extents.size (); i++)
     {
index c20f244890244432b9cdc7dad45e30072e454154..f4a37cd24dfa66d13eb4f891cf7c02cea064abfa 100644 (file)
@@ -537,6 +537,9 @@ System::get_paper_system ()
   pl->set_property ("page-break-penalty", right_bound->get_property ("page-break-penalty"));
   pl->set_property ("page-turn-penalty", right_bound->get_property ("page-turn-penalty"));
 
+  if (right_bound->original () == dynamic_cast<System*> (original ())->get_bound (RIGHT))
+    pl->set_property ("last-in-score", SCM_BOOL_T);
+
   Interval staff_refpoints;
   if (Grob *align = get_vertical_alignment ())
     {
@@ -837,6 +840,63 @@ System::get_maybe_pure_bound (Direction d, bool pure, int start, int end)
   return pure ? get_pure_bound (d, start, end) : get_bound (d);
 }
 
+enum {
+  SPACEABLE_STAVES,
+  NONSPACEABLE_STAVES,
+  ALL_STAVES
+};
+
+static SCM
+get_maybe_spaceable_staves (SCM smob, int filter)
+{
+  System *me = dynamic_cast<System*> (unsmob_grob (smob));
+  Grob *align = me->get_vertical_alignment ();
+  SCM ret = SCM_EOL;
+
+  if (align)
+    {
+      SCM *tail = &ret;
+      extract_grob_set (align, "elements", staves);
+
+      for (vsize i = 0; i < staves.size (); ++i)
+        {
+          bool spaceable = Page_layout_problem::is_spaceable (staves[i]);
+          if (staves[i]->is_live () &&
+              ((filter == ALL_STAVES)
+               || (filter == SPACEABLE_STAVES && spaceable)
+               || (filter == NONSPACEABLE_STAVES && !spaceable)))
+            {
+              *tail = scm_cons (staves[i]->self_scm (), SCM_EOL);
+              tail = SCM_CDRLOC (*tail);
+            }
+        }
+    }
+
+  return ret;
+}
+
+MAKE_SCHEME_CALLBACK (System, get_staves, 1)
+SCM
+System::get_staves (SCM smob)
+{
+  return get_maybe_spaceable_staves (smob, ALL_STAVES);
+}
+
+MAKE_SCHEME_CALLBACK (System, get_spaceable_staves, 1)
+SCM
+System::get_spaceable_staves (SCM smob)
+{
+  return get_maybe_spaceable_staves (smob, SPACEABLE_STAVES);
+}
+
+MAKE_SCHEME_CALLBACK (System, get_nonspaceable_staves, 1)
+SCM
+System::get_nonspaceable_staves (SCM smob)
+{
+  return get_maybe_spaceable_staves (smob, NONSPACEABLE_STAVES);
+}
+
+
 ADD_INTERFACE (System,
                "This is the top-level object: Each object in a score"
                " ultimately has a @code{System} object as its X and"
index aaa862395d7163651e74918e45622b9e61e1820d..b4b15a66906338c9f20dae16f737438b2844b65f 100644 (file)
@@ -78,9 +78,8 @@ Tuplet_number::calc_y_offset (SCM smob)
   Spanner *me = unsmob_spanner (smob);
   Spanner *tuplet = unsmob_spanner (me->get_object ("bracket"));
 
-  Interval positions = robust_scm2interval (tuplet->get_property ("positions"), Interval (0.0, 0.0));
-
-  return scm_from_double (positions.center ());
+  Drul_array<Real> positions = robust_scm2drul (tuplet->get_property ("positions"), Drul_array<Real> (0.0, 0.0));
+  return scm_from_double ((positions[LEFT] + positions[RIGHT]) / 2.0);
 }
 
 MAKE_SCHEME_CALLBACK (Tuplet_number, calc_cross_staff, 1)
index c8054927b025df5ebfad68bf88f02cef14e63df9..af09d9db1481882a939e3c74012124fb6c6cdcd4 100644 (file)
@@ -776,7 +776,21 @@ partcombine =
    (_i "Take the music in @var{part1} and @var{part2} and typeset so
 that they share a staff.")
    (make-part-combine-music parser
-                            (list part1 part2)))
+                            (list part1 part2) #f))
+
+partcombineUp =
+#(define-music-function (parser location part1 part2) (ly:music? ly:music?)
+   (_i "Take the music in @var{part1} and @var{part2} and typeset so
+that they share a staff with stems directed upward.")
+   (make-part-combine-music parser
+                            (list part1 part2) UP))
+
+partcombineDown =
+#(define-music-function (parser location part1 part2) (ly:music? ly:music?)
+   (_i "Take the music in @var{part1} and @var{part2} and typeset so
+that they share a staff with stems directed downward.")
+   (make-part-combine-music parser
+                            (list part1 part2) DOWN))
 
 partcombineForce =
 #(define-music-function (location parser type once) (symbol-or-boolean? boolean?)
index 24174656273198be6d69abd7a7171fd1879d101b..d105ef333d2bfb8f50f2dba428b4fbb00caf29e0 100644 (file)
@@ -19,7 +19,7 @@ def escape_instrument_string (input_string):
     if re.match ('.*[\r\n]+.*', retstring):
         rx = re.compile (r'[\n\r]+')
         strings = rx.split (retstring)
-        retstring = "\\markup { \\column { "
+        retstring = "\\markup { \\center-column { "
         for s in strings:
             retstring += "\\line {\"" + s + "\"} "
         retstring += "} }"
@@ -198,6 +198,17 @@ class Duration:
 
         return base * dot_fact * self.factor
 
+# implement the midi command line option '-m' and '--midi'
+# if TRUE add midi-block to .ly file (see below)
+def set_create_midi (option):
+    global midi_option
+    midi_option = option
+
+def get_create_midi ():
+    try:
+        return midi_option
+    except:
+        return False
 
 # Implement the different note names for the various languages
 def pitch_generic (pitch, notenames, accidentals):
@@ -1919,6 +1930,7 @@ class Score:
           self.contents.set_part_information (part_id, staves_info)
 
     def print_ly (self, printer):
+        self.create_midi = get_create_midi ()
         printer.dump ("\\score {");
         printer.newline ()
         if self.contents:
index 278e108b1da4075b436ba8af7fe4ba0f7890f465..50945e8d8d8b78fc19e95bd2a545f2a817eb47d0 100644 (file)
@@ -167,6 +167,14 @@ class Identification (Xml_node):
           ret.append (r.get_text ())
         return string.join (ret, "\n")
 
+    # get contents of the source-element (usually used for publishing information). (These contents are saved in a custom variable named "source" in the header of the .ly file.)
+    def get_source (self):
+        source = self.get_named_children ('source')
+        ret = []
+        for r in source:
+          ret.append (r.get_text ())
+        return string.join (ret, "\n")
+
     def get_creator (self, type):
         creators = self.get_named_children ('creator')
         # return the first creator tag that has the particular type
@@ -232,8 +240,6 @@ class Identification (Xml_node):
                     return mf.get_text () 
         return None
 
-
-
 class Duration (Music_xml_node):
     def get_length (self):
         dur = int (self.get_text ()) * Rational (1,4)
index 58a085800f6ed7a2597ff61c44077eb839d2d1f9..34363155f5a7bd7dbd0f9e4cdffe58ba5d0fa90b 100644 (file)
@@ -406,6 +406,8 @@ read from the NonMusicalPaperColumn that begins the measure.")
 ;;
      (gap ,ly:dimension? "Size of a gap in a variable symbol.")
      (gap-count ,integer? "Number of gapped beams for tremolo.")
+     (glissando-skip ,boolean? "Should this @code{NoteHead} be skipped
+by glissandi?")
      (glyph ,string? "A string determining what @q{style} of glyph is
 typeset.  Valid choices depend on the function that is reading this
 property.")
index db39b6889c20a562259c7620a671c8d12ed634dc..05ba013e27579353fb6b53b737ab272cd27b5d48 100644 (file)
           (ly:eval-simple-closure (car args) unpure start end)
           (if (not (procedure? unpure))
               unpure
-              (apply (cdr pure)
+              (apply unpure
                      (append
                        (list (car args) start end)
                        (cdr args))))))
index 5614dd65c601b0db614ddc25c6a2b214c043d6fc..391582bdf6f25dadeac25c0dedb23f7ea40191ba 100644 (file)
@@ -20,7 +20,6 @@
   '((region-size . 4)
     (head-encompass-penalty . 1000.0)
     (stem-encompass-penalty . 30.0)
-    (closeness-factor . 10)
     (edge-attraction-factor . 4)
     (same-slope-penalty . 20)
     (steeper-slope-factor . 50)
index 9e9f9ab7d4ca85357f1b759de1745cc5ae75a384..d60836199db4622ddcf9b55f182767066fc11028 100644 (file)
@@ -17,7 +17,9 @@
 
 (define-module (scm paper-system))
 
-(use-modules (lily))
+(use-modules (lily)
+            (srfi srfi-1)
+            (ice-9 optargs))
 
 (define-public (paper-system-title? system)
   (equal? #t (ly:prob-property system 'is-title)
          stencil)
   ))
 
-; TODO: annotate the spacing for every spaceable staff within the system.
+
+;; Y-ext and next-Y-ext are either skyline-pairs or extents
+(define*-public (annotate-padding system-Y system-X Y-ext X-ext
+                                 next-system-Y next-system-X next-Y-ext next-X-ext
+                                 layout horizon-padding padding #:key (base-color blue))
+  (let* ((eps 0.001)
+        (skyline (and (ly:skyline-pair? Y-ext)
+                      (ly:skyline-pair::skyline Y-ext DOWN)))
+        (next-skyline (and (ly:skyline-pair? next-Y-ext)
+                           (ly:skyline-pair::skyline next-Y-ext UP)))
+        (annotation-X (cond
+                       ((and skyline next-skyline)
+                        (-
+                         (ly:skyline::get-touching-point skyline next-skyline horizon-padding)
+                         horizon-padding))
+                       (skyline
+                        (ly:skyline::get-max-height-position skyline))
+                       (next-skyline
+                        (ly:skyline::get-max-height-position next-skyline))
+                       (else
+                        (max (cdr X-ext)
+                             (cdr next-X-ext)))))
+        (annotation-Y (if skyline
+                          (ly:skyline::get-height skyline annotation-X)
+                          (car Y-ext)))
+        (next-annotation-Y (if next-skyline
+                               (- (+ (ly:skyline::get-height next-skyline
+                                                             (- (+ annotation-X system-X)
+                                                                next-system-X))
+                                     next-system-Y)
+                                  system-Y)
+                               (cdr next-Y-ext)))
+        (padding-blocks (>= next-annotation-Y (- annotation-Y padding eps)))
+        (contrast-color (append (cdr base-color) (list (car base-color))))
+        (color (if padding-blocks contrast-color base-color))
+        (annotation (ly:stencil-translate-axis
+                     (annotate-y-interval
+                      layout
+                      "padding"
+                      `(,(- annotation-Y padding). ,annotation-Y)
+                      #t
+                      #:color color)
+                     annotation-X X)))
+    (if (> padding 0.0)
+       annotation
+       empty-stencil)))
+
+        
 (define-public (paper-system-annotate system next-system layout)
   "Add arrows and texts to indicate which lengths are set."
-  (let* ((annotations (list))
-        (grob (ly:prob-property system 'system-grob))
+
+  (let* ((grob (ly:prob-property system 'system-grob))
+        (paper-height (ly:output-def-lookup layout 'paper-height))
+        (bottom-margin (ly:output-def-lookup layout 'bottom-margin))
+        (top-margin (ly:output-def-lookup layout 'top-margin))
+        (spaceable-staves (if (ly:grob? grob) (ly:system::get-spaceable-staves grob) '()))
+        (all-staves (if (ly:grob? grob) (ly:system::get-staves grob) '()))
+        (spaceable-staff-annotate
+         (lambda (before-staff after-staff)
+           (let ((before-Y (ly:grob-relative-coordinate before-staff grob Y))
+                 (after-Y (ly:grob-relative-coordinate after-staff grob Y)))
+             (annotate-spacing-spec
+              layout
+              (ly:get-spacing-spec before-staff after-staff)
+              before-Y
+              after-Y))))
+
+        (staff-padding-annotate
+         (lambda (before-staff after-staff)
+           (let ((before-Y (ly:grob-relative-coordinate before-staff grob Y))
+                 (before-X (ly:grob-relative-coordinate before-staff grob X))
+                 (before-X-ext (ly:grob-extent before-staff before-staff X))
+                 (after-Y (ly:grob-relative-coordinate after-staff grob Y))
+                 (after-X (ly:grob-relative-coordinate after-staff grob X))
+                 (after-X-ext (ly:grob-extent after-staff after-staff X))
+                 (skylines (ly:grob-property before-staff 'vertical-skylines))
+                 (after-skylines (ly:grob-property after-staff 'vertical-skylines))
+                 (padding (assoc-get 'padding
+                                     (ly:get-spacing-spec before-staff after-staff)
+                                     0.0))
+                 (horizon-padding (ly:grob-property before-staff
+                                                    'skyline-horizontal-padding
+                                                    0.0)))
+             (ly:stencil-translate
+              (annotate-padding
+               before-Y before-X skylines before-X-ext
+               after-Y after-X after-skylines after-X-ext
+               layout horizon-padding padding)
+              (cons before-X before-Y)))))
+
+        (staff-annotations (if (< 1 (length spaceable-staves))
+                               (map spaceable-staff-annotate
+                                    (drop-right spaceable-staves 1)
+                                    (drop spaceable-staves 1))
+                               '()))
+        (staff-padding-annotations (if (< 1 (length all-staves))
+                                       (map staff-padding-annotate
+                                            (drop-right all-staves 1)
+                                            (drop all-staves 1))
+                                       '()))
         (estimate-extent (if (ly:grob? grob)
                              (annotate-y-interval layout
                                                   "extent-estimate"
                                                   (ly:grob-property grob 'pure-Y-extent)
                                                   #f)
-                             #f)))
-    (let* ((spacing-spec (cond ((and next-system
-                                    (paper-system-title? system)
-                                    (paper-system-title? next-system))
-                               (ly:output-def-lookup layout 'markup-markup-spacing))
-                              ((paper-system-title? system)
-                               (ly:output-def-lookup layout 'markup-system-spacing))
-                              ((and next-system
-                                    (paper-system-title? next-system))
-                               (ly:output-def-lookup layout 'score-markup-spacing))
-                              ((not next-system)
-                               (ly:output-def-lookup layout 'last-bottom-spacing))
-                              (else
-                               (ly:output-def-lookup layout 'system-system-spacing))))
-          (last-staff-Y (car (paper-system-staff-extents system))))
-
-      (set! annotations
-           (annotate-spacing-spec layout spacing-spec last-staff-Y (car (paper-system-extent system Y)))))
-    (if estimate-extent
+                             #f))
+
+        (spacing-spec (cond ((and next-system
+                                  (paper-system-title? system)
+                                  (paper-system-title? next-system))
+                             (ly:output-def-lookup layout 'markup-markup-spacing))
+                            ((paper-system-title? system)
+                             (ly:output-def-lookup layout 'markup-system-spacing))
+                            ((and next-system
+                                  (paper-system-title? next-system))
+                             (ly:output-def-lookup layout 'score-markup-spacing))
+                            ((not next-system)
+                             (ly:output-def-lookup layout 'last-bottom-spacing))
+                            ((ly:prob-property system 'last-in-score #f)
+                             (ly:output-def-lookup layout 'score-system-spacing))
+                            (else
+                             (ly:output-def-lookup layout 'system-system-spacing))))
+        (last-staff-Y (car (paper-system-staff-extents system)))
+        (system-Y (ly:prob-property system 'Y-offset 0.0))
+        (system-X (ly:prob-property system 'X-offset 0.0))
+        (next-system-Y (and next-system
+                            (ly:prob-property next-system 'Y-offset 0.0)))
+        (next-system-X (and next-system
+                            (ly:prob-property next-system 'X-offset 0.0)))
+        (first-staff-next-system-Y (if next-system
+                                       (- (+ (cdr (paper-system-staff-extents next-system))
+                                             system-Y)
+                                          next-system-Y)
+                                       (+ system-Y top-margin bottom-margin (- paper-height))))
+
+        (skyline (or
+                  (ly:prob-property system 'vertical-skylines #f)
+                  (paper-system-extent system Y)))
+        (next-skyline (and next-system
+                           (or
+                            (ly:prob-property next-system 'vertical-skylines #f)
+                            (paper-system-extent next-system Y))))
+        (horizon-padding (and
+                          (ly:grob? grob)
+                          (ly:grob-property grob 'skyline-horizontal-padding 0)))
+        (padding-annotation (if next-system
+                                (annotate-padding
+                                  (- system-Y) system-X skyline (paper-system-extent system X)
+                                  (- next-system-Y) next-system-X next-skyline (paper-system-extent next-system X)
+                                  layout
+                                  horizon-padding
+                                  (assoc-get 'padding spacing-spec 0.0)
+                                  #:base-color blue)
+                                empty-stencil))
+
+        (system-annotation (annotate-spacing-spec
+                            layout spacing-spec
+                            last-staff-Y
+                            first-staff-next-system-Y))
+        (annotations (ly:stencil-add
+                      padding-annotation
+                      (stack-stencils Y DOWN 0.0 staff-padding-annotations)
+                      (stack-stencils Y DOWN 0.0 (append staff-annotations (list system-annotation))))))
+
+     (if estimate-extent
        (set! annotations
-             (stack-stencils X RIGHT 0.5
+             (stack-stencils X RIGHT 5.5
                              (list annotations
                                    estimate-extent))))
-                               
-    (if (not (null? annotations))
-       (set! (ly:prob-property system 'stencil)
-             (ly:stencil-add
-              (ly:prob-property system 'stencil)
-              (ly:make-stencil
-               (ly:stencil-expr annotations)
-               (ly:stencil-extent empty-stencil X)
-               (ly:stencil-extent empty-stencil Y)))))
-    (ly:prob-property system 'stencil)))
+
+     (if (not (null? annotations))
+        (set! (ly:prob-property system 'stencil)
+              (ly:stencil-add
+               (ly:prob-property system 'stencil)
+               (ly:make-stencil
+                (ly:stencil-expr annotations)
+                (ly:stencil-extent empty-stencil X)
+                (ly:stencil-extent empty-stencil Y)))))
+     (ly:prob-property system 'stencil)))
index c492701c9142087bb6c44ac65deabf1a41d0a224..61fbf95f50587f79700f96371a7e3bd087bb1fe5 100644 (file)
@@ -243,7 +243,7 @@ LilyPond version 2.8 and earlier."
     (ly:interpret-music-expression (make-non-relative-music music) global)
     context-list))
 
-(define-public (make-part-combine-music parser music-list)
+(define-public (make-part-combine-music parser music-list direction)
   (let* ((m (make-music 'PartCombineMusic))
         (m1 (make-non-relative-music (context-spec-music (first music-list) 'Voice "one")))
         (m2  (make-non-relative-music  (context-spec-music (second music-list) 'Voice "two")))
@@ -252,6 +252,7 @@ LilyPond version 2.8 and earlier."
         (evs1 (recording-group-emulate m1 listener)))
 
     (set! (ly:music-property m 'elements) (list m1 m2))
+    (set! (ly:music-property m 'direction) direction)
     (set! (ly:music-property m 'split-list)
          (if (and (assoc "one" evs1) (assoc "two" evs2))
              (determine-split-list (reverse! (assoc-get "one" evs1) '())
index 2f31d343f5d020b6e46cff7039123a2917a070f3..79197e87443ac38b2b60aca30d5a378f91481a77 100644 (file)
@@ -658,43 +658,43 @@ with optional arrows of @code{max-size} on start and end controlled by
                                             (center-stencil-on-extent dim-stencil)
                                             0.5))
          (set! annotation
-               (ly:make-stencil (list 'color color (ly:stencil-expr annotation))
-                                (ly:stencil-extent annotation X)
-                                (cons 10000 -10000)))))
+               (stencil-with-color annotation color))))
     annotation))
 
 
-(define*-public (annotate-spacing-spec layout spacing-spec start-Y-offset prev-system-end
+;; TODO: figure out how to annotate padding nicely
+;; TODO: emphasize either padding or min-dist depending on which constraint was active
+(define*-public (annotate-spacing-spec layout spacing-spec start-Y-offset next-staff-Y
                                      #:key (base-color blue))
-  (let* ((get-spacing-var (lambda (sym) (assoc-get sym spacing-spec 0.0)))
-        (space (get-spacing-var 'space))
+   (let* ((get-spacing-var (lambda (sym) (assoc-get sym spacing-spec 0.0)))
+        (space (get-spacing-var 'basic-distance))
         (padding (get-spacing-var 'padding))
         (min-dist (get-spacing-var 'minimum-distance))
-        (contrast-color (append (cdr base-color) (list (car base-color)))))
+        (contrast-color (append (cdr base-color) (list (car base-color))))
+        (min-dist-blocks (<= (- start-Y-offset min-dist) next-staff-Y))
+        (min-dist-color (if min-dist-blocks contrast-color base-color))
+        (basic-annotation (annotate-y-interval layout
+                                               "basic-dist"
+                                               (cons (- start-Y-offset space) start-Y-offset)
+                                               #t
+                                               #:color (map (lambda (x) (* x 0.25)) base-color)))
+        (min-annotation (annotate-y-interval layout
+                                             "min-dist"
+                                             (cons (- start-Y-offset min-dist) start-Y-offset)
+                                             #t
+                                             #:color min-dist-color))
+        (extra-annotation (annotate-y-interval layout
+                                               "extra dist"
+                                               (cons next-staff-Y (- start-Y-offset min-dist))
+                                               #t
+                                               #:color (map (lambda (x) (* x 0.5)) min-dist-color))))
+
     (stack-stencils X RIGHT 0.0
                    (list
-                    (annotate-y-interval layout
-                                         "space"
-                                         (cons (- start-Y-offset space) start-Y-offset)
-                                         #t
-                                         #:color (map (lambda (x) (* x 0.25)) base-color))
-                    (annotate-y-interval layout
-                                         "min-dist"
-                                         (cons (- start-Y-offset min-dist) start-Y-offset)
-                                         #t
-                                         #:color (map (lambda (x) (* x 0.5)) base-color))
-                    (ly:stencil-add
-                     (annotate-y-interval layout
-                                          "bottom-of-extent"
-                                          (cons prev-system-end start-Y-offset)
-                                          #t
-                                          #:color base-color)
-                     (annotate-y-interval layout
-                                          "padding"
-                                          (cons (- prev-system-end padding) prev-system-end)
-                                          #t
-                                          #:color contrast-color))))))
-
+                    basic-annotation
+                    (if min-dist-blocks
+                        min-annotation
+                        (ly:stencil-add min-annotation extra-annotation))))))
 
 (define-public (eps-file->stencil axis size file-name)
   (let*
index 322dfe91ae622bd5129dd299ed7e6c33ff251deb..c6e0b64c530f24aa8106975f7605423790861ece 100644 (file)
@@ -165,16 +165,26 @@ def extract_score_information (tree):
         if value:
             header.set_field (field, musicxml.escape_ly_output_string (value))
 
-    movement_title = tree.get_maybe_exist_named_child ('movement-title')
-    if movement_title:
-        set_if_exists ('title', movement_title.get_text ())
     work = tree.get_maybe_exist_named_child ('work')
     if work:
-        # Overwrite the title from movement-title with work->title
-        set_if_exists ('title', work.get_work_title ())
         set_if_exists ('worknumber', work.get_work_number ())
         set_if_exists ('opus', work.get_opus ())
 
+    movement_title = tree.get_maybe_exist_named_child ('movement-title')
+
+    # use either work-title or movement-title as title.
+    # if both exist use movement-title as subtitle.
+    # if there is only a movement-title (or work-title is empty or missing) the movement-title should be typeset as a title
+    if work:
+        work_title = work.get_work_title ()
+        set_if_exists ('title', work_title)
+        if work_title == '':
+            set_if_exists ('title', movement_title.get_text ())
+        elif movement_title:
+            set_if_exists ('subtitle', movement_title.get_text ())
+    elif movement_title:
+        set_if_exists ('title', movement_title.get_text ())
+
     identifications = tree.get_named_children ('identification')
     for ids in identifications:
         set_if_exists ('copyright', ids.get_rights ())
@@ -183,12 +193,14 @@ def extract_score_information (tree):
         set_if_exists ('editor', ids.get_editor ())
         set_if_exists ('poet', ids.get_poet ())
 
-        set_if_exists ('tagline', ids.get_encoding_software ())
         set_if_exists ('encodingsoftware', ids.get_encoding_software ())
         set_if_exists ('encodingdate', ids.get_encoding_date ())
         set_if_exists ('encoder', ids.get_encoding_person ())
         set_if_exists ('encodingdescription', ids.get_encoding_description ())
 
+        set_if_exists ('source', ids.get_source ())
+
+        # miscellaneous --> texidoc
         set_if_exists ('texidoc', ids.get_file_description ());
 
         # Finally, apply the required compatibility modes
@@ -2648,6 +2660,13 @@ information.""") % 'lilypond')
                   type = 'string',
                   dest = 'output_name',
                   help = _ ("set output filename to FILE, stdout if -"))
+
+    p.add_option ('-m', '--midi',
+                  action = "store_true",
+                  default = False,
+                  dest = "midi",
+                  help = _("add midi-block to .ly file"))
+
     p.add_option_group ('',
                         description = (
             _ ("Report bugs via %s")
@@ -2760,7 +2779,7 @@ def update_layout_information ():
 
 def print_ly_preamble (printer, filename):
     printer.dump_version ()
-    printer.print_verbatim ('%% automatically converted from %s\n' % filename)
+    printer.print_verbatim ('%% automatically converted by musicxml2ly from %s\n' % filename)
 
 def print_ly_additional_definitions (printer, filename):
     if needed_additional_definitions:
@@ -2915,6 +2934,9 @@ def main ():
         opt_parser.print_usage()
         sys.exit (2)
 
+    if options.midi:
+        musicexp.set_create_midi (options.midi)
+
     if options.language:
         musicexp.set_pitch_language (options.language)
         needed_additional_definitions.append (options.language)
index 53ff4bce5366bf564117c1387b69f41ae95d82d0..21e4a8ea039d7b7407845ad2c8faf456eaea097a 100644 (file)
@@ -23,8 +23,14 @@ ifneq ($(INFO_IMAGES_DIR),)
 endif
        touch $@
 
+# Copy files while tracking their dependencies.
 $(outdir)/%.texi: $(src-dir)/%.texi
-       cp -p $< $@
+       mkdir -p $(dir $@)
+       $(DO_TEXI_DEP) cp -f $< $@
+
+$(outdir)/%.itexi: $(src-dir)/%.itexi
+       mkdir -p $(dir $@)
+       $(DO_TEXI_DEP) cp -f $< $@
 
 $(outdir)/%.info: $(outdir)/%.texi $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep $(outdir)/version.itexi $(outdir)/weblinks.itexi
 ifeq ($(WEB_VERSION),yes)
@@ -80,6 +86,5 @@ $(outdir)/version.%: $(top-src-dir)/VERSION
 $(outdir)/weblinks.%: $(top-src-dir)/VERSION
        $(PYTHON) $(top-src-dir)/scripts/build/create-weblinks-itexi.py > $@
 
-.SECONDARY: $(outdir)/version.itexi $(outdir)/version.texi \
-  $(outdir)/$(INFO_IMAGES_DIR).info-images-dir-dep \
-  $(outdir)/*.texi
+# Keep this empty to prevent make from removing intermediate files.
+.SECONDARY:
index cc4865cf3d0448b6986711a8a41ceb0b568308ed..2f2d801ab1210e1bc784306df498c5e84d5b553f 100644 (file)
@@ -8,6 +8,27 @@ OMF_FILES += $(foreach format, html pdf, $(foreach f, $(TEXI_FILES), $(outdir)/$
 
 GENERATE_OMF = $(buildscript-dir)/texi2omf --format $(1) --location $(webdir)$(tree-dir)/$(notdir $(basename $@))  --version $(TOPLEVEL_VERSION) $< > $@
 
+# Find the file $(1) within the texinfo include dirs and return its path.
+# If not found, return $(outdir)/$(1) assuming that it is a generated file.
+find-texi = \
+$(firstword \
+       $(wildcard $(src-dir)/$(1)) \
+       $(wildcard $(top-src-dir)/Documentation/$(1)) \
+       $(outdir)/$(1) \
+)
+
+# Recursively scan the file $(1) for @include, search for included files
+# within the texinfo include dirs, and return all dependencies.
+scan-texi = \
+$(foreach f, $(shell sed -ne "/^@include[[:space:]]/s/@include//p" $(1)), \
+       $(call find-texi,$(f)) \
+       $(call scan-texi,$(call find-texi,$(f))) \
+)
+
+# Find dependencies for the target $@, based on the texinfo source file $<,
+# and write the dependencies to a .dep file.
+DO_TEXI_DEP = ( echo ./$@: $(call scan-texi,$<) > $(basename $@).dep ) &&
+
 TEXINFO_PAPERSIZE_OPTION= $(if $(findstring $(PAPERSIZE),a4),,-t @afourpaper)
 
 DOCUMENTATION_INCLUDES += -I $(top-src-dir)/Documentation